初级会员

- 积分
- 70
- 金钱
- 70
- 注册时间
- 2020-10-22
- 在线时间
- 15 小时
|
1金钱
u32 SPIRXOver ;
void FRAM_Read_CS1(u8* pBuffer,u32 ReadAddr,u32 NumByteToRead)
{
//rtime =1000 ;
SPIRXOver=100 ;
HAL_SPI_Receive_DMA(&hspi1,pBuffer, NumByteToRead);
while( SPIRXOver==100 );
}
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
{
if(hspi ==&hspi1)
{
SPIRXOver = 0 ;
}
}
上面的程序 回卡到 while( SPIRXOver==100 );
监控 变量 SPIRXOver 是零
用断点 SPIRXOver = 0 ; 执行了
修改程序 volatile u32 SPIRXOver ; 这样程序就正常运行了
观察汇编窗口
(u32 SPIRXOver)
0x08000456 68E0 LDR r0,[r4,#0x0C]
0x08000458 2864 CMP r0,#0x64
0x0800045A D0FD BEQ 0x08000458
(volatile u32 SPIRXOver)
0x08000456 68E0 LDR r0,[r4,#0x0C]
0x08000458 2864 CMP r0,#0x64
0x0800045A D0FD BEQ 0x08000456
能看出来 加 volatile 的 返回地址 是456 没加的 是458
都的这步就是 将 变量 SPIRXOver 载入 R0
这个种程序结构应该是经常用的 设定好中断 中断服务中 对标志进行修改 在程序中检查这些标志 ( )
但是这个程序就有问题 谁能帮我解释一下呗 感觉是那里配置不对 因为这样的结构我用过 只是在这个工程中有问题
|
|