基于MPC8280 多通道控制器驱动的研究与实现
3.2 中断处理
当一个MCC 通道产生中断请求时,CP 将中断信息写入循环中断表,然后修改T/RINTPTRR并设置MCCM 寄存器中相应的TINT 或者RINTx 比特。当MCC 中断到达内核后由内核调用中断处理函数。中断处理函数首先清除中断,然后根据MCCE[RINTx]和MCCE[TINT]的值来处理相应的循环中断表。
3.3 接收数据
数据接收程序通过一个先进先出的消息队列和中断处理程序相配合来完成数据的接收。当MCC 的某个通道接收到数据后会设置相应的中断事件比特位。之后中断处理函数将收到的数据进行封装后发送到消息队列。数据接收任务从消息队列接收数据,然后根据 MCC 通道号调用相应的由用户安装的数据接收回调函数。最后由回调函数完成数据的处理。
3.4 发送数据
数据的发送过程由通信协处理器完成。数据发送函数将所发送的数据复制到所使用通道的缓冲区,然后设置相应的控制寄存器,由通信协处理器完成数据从缓冲区到线路接口的发送。数据发送完成后通信协处理器设置中断寄存器MCCE 相应的RINT 比特位。并由中断处理程序通知数据发送函数数据发送已完成。
4 结束语
该驱动程序在基于MPC8280 处理器的VxWorks5.5 操作系统上进行了测试。MCC 通道工作在Transparent 模式下,对多种数据模式进行长时间的数据收发表明该驱动能较稳定地运行。
由于该驱动的中断处理函数检查所有循环中断表的条目并将收到的数据从 MCC 通道的数据缓存发送到消息队列,由此引入了较大的处理延迟,在数据量较大时甚至有可能会造成数据丢失。改进的关键在于中断处理函数和数据接收函数的配合。作为一种改进方法可考虑在中断处理函数内仅执行那些必须的操作,如清除中断,重新设置相关寄存器参数等。将数据处理放在另外一个单独的任务中去执行,并尽量减少数据搬移次数,优化所执行的操作等。最终在程序运行的速度和所完成的功能之间作合适的折中,从而获得所需的性能。本文引用地址:https://www.eepw.com.cn/article/156903.htm
评论