- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2025-04-30 07:46:22
荣誉版主
- 积分
- 2319
|
本帖最后由 tzz1983 于 2024-2-1 13:42 编辑
芯片型号: STC32G12K128
使用场景:UART1 DMA模式收发, 允许DMA中断, 不允许UART1中断。
使用uCOS-ii ,进入空闲任务后会执行挂起CPU,如下指令:
PCON|=0X01; //IDL
_nop_();_nop_();_nop_();_nop_();
添加这两句后串口就工作不正常了,去掉这两句又可以恢复正常. 除串口外别的设备都正常运行,ADC,TIM等不受影响。
按道理来说DMA属于外设,应该不受IDLE影响. 本人怀疑DMA是不是依赖CPU时钟.
不死心, 又尝试了打开串口中断,添加中断函数如下: (因为还是DMA传输,所以只是允许串口中断,只清标志,没有其它有效代码)
void UART1_ISR_Handler (void) interrupt UART1_VECTOR
{
TI=RI=0;
}
当允许串口中断时,串口工作又正常了,我的理解是串口中断激活了CPU时钟,所以DMA又工作了.
现在是: 假如我的理解是正确的话, 那么DMA运行逻辑是不是该说明一下,或者说这是一个硬件BUG? 还是说当使用片上外设DMA时,就不能进IDLE模式了
|
|