AI8051U SPI DMA使用请教
诸位大佬,AI8051U SPI DMA,读取和写入,配置是一样的,它是怎样识别自动写入 or 读取的,规格书反了几遍也没弄明白,哪位大佬指导下,感谢!
// 读取
void SPI_Read_Nbytes(u32 addr, u16 len)
{
// u8i;
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)); //设置起始地址
SPI_WriteByte(((u8 *)&addr));
SPI_WriteByte(((u8 *)&addr));
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)); //设置起始地址
SPI_WriteByte(((u8 *)&addr));
SPI_WriteByte(((u8 *)&addr));
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主模式操作
}
SPI的收发是同步执行的,主机模式MOSI在发送的同时,MISO也在读取。
发送完成的同时,读取也同样完成。
所以读取和写入,配置是一样的。 乘风飞扬 发表于 2024-10-12 10:24
SPI的收发是同步执行的,主机模式MOSI在发送的同时,MISO也在读取。
发送完成的同时,读取也同样完成。
所 ...
理解了,感谢! 学习了
页:
[1]