鉴于最近有很多同事在使用Keystone DSP时遇到如何使用中断或者EDMA方式访问UART端口的问题,在原有代码的基础上整理出此UART实例供大家参考。
1. 实例说明
该实例可运行于C6670或C6678 EVM板,可以直接编译后在EVM上运行,UART端口配置为FIFO模式。
UART 发送端通过中断方式发送,当发送FIFO为空时,UART将产生中断,通过CIC映射到DSP 核中断6,中断服务程序将启动发送流程。
UART接收端通过EDMA方式实现,当有接收数据到达时,UART将自动触发EDMA事件搬移接收FIFO的数据,完成后EDMA产生完成中断5通知CPU做下一步处理。
另外UART支持异常状态,UART端口出现异常时将通过CIC触发中断4,DSP可以通过重启UART等方式处理异常。
2. 实例流程
在初始化PLL和DDR3以后,首先初始化CIC映射UART和中断事件,然后初始化UART和EDMA模块,在中断处理函数里,我们将对FLAG置位,主函数里检查FLAG决定是否通过UART发送数据,通过串口线,可以在PC终端上看到UART的打印输出 HELLOWORLD。
3.用户代码需要注意的问题
在初始化时,应先初始化中断再初始化UART触发发送时间,否则可能引起UART事件被丢弃不能正常进入中断。
在中断服务函数不要写UART FIFO,同样可能引起UART事件被丢弃,UART中断函数只应对FLAG置位或发送信号量以触发UART任务。