频谱仪多种内核通信机制的方案设计
4.1 HPI设备驱动程序实现
4.1.1 物理地址到虚拟地址的映射
写Linux设备驱动的第一步,是完善头文件中的宏定义,除了各种参数的定义外,主要是实现硬件寄存器的物理地址到虚拟地址的映射。对于硬件寄存器的操作,其实就是对其物理地址进行读写操作。而Linux系统提供了一种内存管理机制,在这种机制下,程序可以使用比真实物理地址大得多的地址空间,称为虚拟地址。Linux系统中程序的操作部是使用虚拟地址,所以要完成物理地址到虚拟地址的映射。本课题采用ioremap函数的方法,如下:
#define AT91C_SMC_CSR2*(volatile unsigned long*)ioremap(0xFFFFFF78.4)
对于ioremap函数,就是将物理地址0xFFFFFF78开始的4字节的地址映射到虚拟地址空间中,返回值即4字节虚拟地址的首地址,赋给宏定义的变量名AT91C_SMC_CSR2。对宏定义的操作即对物理地址的操作。
4.1.2 HPI驱动的初始化
首先是对HPI硬件的初始化以及中断初始化。对于HPI,主要是重置DSP,已完成时序的同步。设置SMC(静态存储控制器),因为ARM跟DSP的HPI通信是使用PIO线复用。最后向DSP发送握手信号,表示初始化完成。对于中断的初始化,使用:
request_irq(AT91C_ID_IRQ0,handler,SA_INTERRUPT,”irqO”,NULL);

评论