- 打卡等级:偶尔看看I
- 打卡总天数:16
- 最近打卡:2024-12-02 11:29:43
注册会员
- 积分
- 131
|
诸位大佬,
AI8051U SPI DMA,读取和写入,配置是一样的,它是怎样识别自动写入 or 读取的,规格书反了几遍也没弄明白,哪位大佬指导下,感谢!
// 读取
void SPI_Read_Nbytes(u32 addr, u16 len)
{
// u8 i;
if(len == 0) return;
if(!B_FlashOK) return;
while(SpiDmaFlag); //DMA忙检测
while(CheckFlashBusy() > 0); //Flash忙检测
SPI_CE_Low(); //enable device
SPI_WriteByte(SFC_READ); //read command
SPI_WriteByte(((u8 *)&addr)[1]); //设置起始地址
SPI_WriteByte(((u8 *)&addr)[2]);
SPI_WriteByte(((u8 *)&addr)[3]);
SpiDmaFlag = 1;
DMA_SPI_AMT = (u8)(len-1); //设置传输总字节数(低8位):n+1
DMA_SPI_AMTH = (u8)((len-1) >> 8); //设置传输总字节数(高8位):n+1
DMA_SPI_CR |= 0x40; //开始SPI_DMA主模式操作
}
// 写入
void SPI_Write_Nbytes(u32 addr, u16 len)
{
if(len == 0) return;
if(!B_FlashOK) return;
while(SpiDmaFlag); //DMA忙检测
// while(CheckFlashBusy() > 0); //Flash忙检测
FlashWriteEnable(); //使能Flash写命令
SPI_CE_Low(); // enable device
SPI_WriteByte(SFC_PAGEPROG); // 发送页编程命令
SPI_WriteByte(((u8 *)&addr)[1]); //设置起始地址
SPI_WriteByte(((u8 *)&addr)[2]);
SPI_WriteByte(((u8 *)&addr)[3]);
SpiDmaFlag = 1;
DMA_SPI_AMT = (u8)(len-1); //设置传输总字节数(低8位):n+1
DMA_SPI_AMTH = (u8)((len-1) >> 8); //设置传输总字节数(高8位):n+1
DMA_SPI_CR |= 0x40; //开始SPI_DMA主模式操作
}
|
|