void SPI_Read_Nbytes(u32 addr, u16 size)例程问题
/************************************************从Flash中读取数据
入口参数:
addr : 地址参数
buffer : 缓冲从Flash中读取的数据
size : 数据块大小
出口参数:
无
************************************************/
void SPI_Read_Nbytes(u32 addr, u16 size)
{
if(size == 0) return;
if(!B_FlashOK)return;
while(DmaFlag); //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));
DmaFlag = 1;
DMA_SPI_AMT = size-1; //设置传输总字节数:n+1
DMA_SPI_CR |= 0x40; //开始SPI_DMA主模式操作
}
这个例程,参数长度为16位,只设置了DMA_SPI_AMT,是不是少设置了DMA_SPI_AMTH呢?
STC8系列的芯片DMA存储器长度上限是256,所以传输总字节寄存器DMA_SPI_AMT只有一个字节,没有DMA_SPI_AMTH。
STC32系列的芯片DMA存储器长度上限是65536,才有DMA_SPI_AMT与DMA_SPI_AMTH。
如果是在STC32系列芯片上使用的话,请参考STC32G实验箱例程包里的例子“79-UART-SPI-LCM_DMA_交替使用下载显示图片例程”
页:
[1]