3.2 Linux中CAN驱动程序实现针对MCP2515控制器,在Linux kernel设计中采用字符设备驱动开发的形式。驱动初始化函数staticint_init MCP2515_init(),首先通过ioremap()函数将S5PV210的SPI寄存器的物理地址映射到内核空间,这样才可以在驱动程序中访问和配置S5PV210的SPI寄存器。在正确配置S5PV210的SPI寄存器后,通过register_chrdev()函数为MCP2515注册设备驱动,分配主设备号,这样在设备文件目录中创建对应的设备文件后,就可以用Linux的系统函数操作MCP2515了。而分配内存部分放在probe()函数中完成,分配空间包括为设备数据结构以及其内部的接收发送缓冲区动态分配空间。同时在probe()还需要完成申请中断工作,并初始化中断处理队列,在中断处理队列中读取CANINTF寄存器,判断是接收/发送中断的哪一个缓冲器,或者说是错误中断最后通过enable_irq()函数使能S5PV210相应的中断引脚。
(1)MCP2515初始化。在实现了SPI的加载和声明后,就可以利用SPI写命令对MCP2515进行初始化。MCP2515的初始化过程为:首先将CAN控制寄存器CANCTRL的REQOP2:0>位设置为‘100’进入配置模式,所有错误计数器被清零,进入配置模式后设置波特率,禁止所有中断,设置滤波器,清除发送接收缓存,打开中断,完成MCP2515的初始化。MCP2515初始化过程如图5所示。本文引用地址:http://www.eepw.com.cn/article/148042.htm