背景
XX板上DM8168的GPMC接口与C6455的HPI接口连接,既用作C6455的启动接口,又用作启动完成后两芯片的数据传输通道。
简化后两者的通信机制如下:
两者间采用中断方式。在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