最近要写at91sam9260与tms320vc5409的HPI驱动。
初步方案(简单实现功能):
(1)vmalloc()申请内存
(2)带并发控制的字符设备驱动
(3)中断编程,并使用poll/select
优化方案:
(1)利用slab与内存池;
(2)利用内存映射;普通的字符设备驱动传输大数据时相对慢一些
初步方案的程序写的差不多了,就差poll/select了。
HPI接口的控制寄存器HPIC中的hint可由DSP写1中断主机,也可由主机写1清0 hint.但是dspint只能由主机写1中断DSP,不管是主机读还是DSP读都是0;所以
DSP-->ARM 写完数据,置位HINT 然后ARM收到中断,读完数据,清0 HINT。DSP继续写数据时先读下HINT,如果HINT为1,就不继续写数据;稍后继续;若HINT为0,则可以写数据了。
ARM-->DSP 写完数据,置位DSPINT,然后DSP收到中断,读数据,但是DSPINT不能清0,怎么做呢?
目前暂时是约定一个地址,里面放一个flag,1标志数据未读,不能写;0标志数据已读,可写。
为了统一,ARM和DSP收到中断后,都检查flag。
阅读(2349) | 评论(3) | 转发(0) |