HPI中断丢失

在DM8168与C6455通过HPI接口通信中,出现数据传输死锁问题。分析发现因中断处理时序不当,导致中断“丢失”。解决方案是调整read函数中清标志变量和头标记的顺序,避免中断失效,从而解决了系统死锁状况。
摘要由CSDN通过智能技术生成

背景

XX板上DM8168的GPMC接口与C6455的HPI接口连接,既用作C6455的启动接口,又用作启动完成后两芯片的数据传输通道。
HPI连接图

简化后两者的通信机制如下:
两者间采用中断方式。在C6455上预留读写两段缓冲空间,读缓冲用于存放C6455写给DM8168的数据,写缓冲用作存放DM8168写给C6455的数据。

A方向:C6455把数据写入读缓冲区后,置位HPIC寄存器的HINT位,则HINT引脚会发出一个边沿触发DM8168的IO中断。B方向:DM8168把数据写入写缓冲区后,置位HPIC寄存器的DSPINT位,则直接触发C6455的HPI中断。

发送方会将缓冲区头部置一个标志,来标记数据有效性。即发送方置位,接收方读走数据后清标志位。当发送方发现标志位置位时,不会再次发送,避免上一包数据被覆盖。

接收方DM8168采用IO复用的方式接收数据,即实现了read/poll函数。DM8168的中断处理区分顶半部和底半部。中断处理函数中清中断,然后用全局变量flag记录该事件后退出。在poll函数中查询flag变量,若为真则返回POLLIN标志。最后在read函数中读缓冲区数据,清缓冲区头标记,清flag变量,最后把数据返回给应用。
应用层调用select和read函数来取数据。示意代码为:

while(1
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值