我遇到的情况是:如果uart0配置好后先发送数据,则在收到上位机发来的数据时,能进入接收中断;若没有用先发送,则能收到上位机发来的数据,也能看到接收缓存里是上位机发来的第一个数,IIR中也产生了相应的中断标志,但就是无法进入中断服务函数。
HG:
建议接个示波器看看两种情况下,你的rx引脚上以及tx引脚上有什么变化。
Shine:
回复 HG:
请问除了uart接收中断,是否还用了其他中断?IFR中断标志位是否使能?代码不进中断的话,运行到哪里了?
zizhi zhao:
回复 Shine:
同时使用了200hz频率的gpio中断。程序一直在依据gpio中断循环运行。urat0在初始化的时候使能了发送空中断、接收fifo达到触发或超时中断、队列错误中断。这样的话我用上位机发几个数,在线模式下能看到接收缓存寄存器有值,且多发几个能使队列状态中fifo溢出位置位,且DR位也是置位状态。说明数据接受到了,但就是没有进入接收中断服务函数。若我先用dsp往外发数,则能进去发送空中断,这时上位机再给dsp发,就能进入中断了。或者是初始化不使能发送空中断,则也能正常进入接收好中断
zizhi zhao:
回复 Shine:
同时使用了200hz频率的gpio中断。程序一直在依据gpio中断循环运行。urat0在初始化的时候使能了发送空中断、接收fifo达到触发或超时中断、队列错误中断。这样的话我用上位机发几个数,在线模式下能看到接收缓存寄存器有值,且多发几个能使队列状态中fifo溢出位置位,且DR位也是置位状态。说明数据接受到了,但就是没有进入接收中断服务函数。
若我先用dsp往外发数,则能进去发送空中断,这时上位机再给dsp发,就能进入中断了。
或者是初始化不使能发送空中断,则也能正常进入接收好中断。
仿佛就是如果使能了发送fifo空中断位时,就必须立即发数据,才能让uart模块正常工作起来。或者是不能在初始化时使能发空中断,只能使能接收准备好中断……uart也能正常工作
Shine:
回复 zizhi zhao:
使能发送fifo空中断时,IIR寄存器的值是多少?