总线增加百度收录

增加百度收录  时间:2021-01-18  阅读:()

-1-嵌入式Linux下CAN总线驱动程序设计宋扩东,卢珞先武汉理工大学信息工程学院通信与信息系统,武汉(430070)E-mail:song_0011@sohu.
com摘要:以基于ARM9核心的S3C2410微处理器与CAN总线控制器MCP2515为例,讨论了嵌入式Linux操作系统下的设备驱动程序开发.
在构建好硬件系统的基础上,详细介绍了基于嵌入式Linux2.
6内核下的CAN总线驱动程序的开发过程,并结合CAN总线分析测试仪,给出分析测试结果.
关键词:CAN;驱动;嵌入式Linux;ARM9;中图分类号:TP3681.
系统硬件结构介绍系统中CAN总线主要用来完成S3C2410开发板和CAN总线分析仪的数据传输.
在S3C2410开发平台上,MCP2515芯片用作CAN控制器,MCP2551芯片用作CAN收发器,S3C2410微处理器用作节点控制器.
如图1所示.
1.
1S3C2410的SPI接口简介SPI(SerialPeripheralInterface)[1]是一个同步串行外围接口,允许MCU与各种外围设备以串行方式进行通信.
S3C2410微处理器包括两路SPI,每一路分别有两个8位转移寄存器,用来发送和接收数据.
在SPI进行传输时,数据同时发送和接收[2].
如果只想发送数据,接收到的数据将是无效的;如果只想接收数据,应当发送全是1的数据.
1.
2MCP2551功能简介MCP2551是CAN协议控制器和物理总线之间的接口.
这个器件向总线提供了差动的发送能力,向CAN控制器提供了差动的接收能力.
1.
3MCP2515功能简介MCP2515是一款独立CAN控制器,是为简化连接CAN总线的应用而开发的.
图2简要显示了MCP2515的结构框图[3].
该器件主要由三个部分组成[4]:S3C2410MCP2515MCP2551CAN总线分析SPI总线图1CAN总线图1系统硬件结构www.
linuxidc.
comLinux公社(LinuxIDC.
com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站.
-2-(1)CAN协议引擎(处理所有总线上的报文发送和接收);(2)用来为器件及其运行进行配置的控制逻辑和SRAM寄存器;(3)SPI协议模块,用来实现SPI通信模式.
2.
驱动程序设计2.
1Linux设备驱动程序简介Linux设备驱动程序是内核的一部分,它工作在内核态,设备驱动程序必须向Linux核心或者其他所在的子系统提供一个标准的接口[5].
大多数设备驱动程序可以在需要的时候以核心模块方式加载,在不需要的时候卸载,同时Linux设备驱动程序有几个固定的功能模块,诸如Linux内核注册设备时的初始化模块,用于系统卸载模块时删除设备驱动程序的模块等.
2.
2嵌入式Linux2.
6内核新增特点实时可靠性是嵌入式应用较为普遍的要求,相比Linux2.
4内核,Linux2.
6已经在内核主体中加入了提高中断性能和调度响应时间的改进,其中有三个最显著的改进[6]:采用可抢占内核、更加有效的调度算法以及同步性的提高.
同时,Linux2.
6内核的移植更加方便,新增了对许多新的体系结构和处理器类型的支持,而且可以支持大容量内存模型、微控制器,还改善了I/O子系统,增添了更多的多媒体应用功能等.
2.
3CAN总线驱动程序设计1.
驱动初始化函数staticint__initMCP2515_init()模块初始化初始化函数中首先通过ioremap()函数将S3C2410的SPI寄存器的物理地址映射到内核空间[7],这样才可以在驱动程序中访问和配置S3C2410的SPI寄存器.
在正确的配置S3C2410的SPI寄存器后,通过register_chrdev()函数为MCP2515注册设备驱动,分配主设备号,这样通过在文件系统的设备文件目录中创建对应的设备文件后,就可以用Linux的系统函数来操作MCP2515了.
最后通过enable_irq()函数使能S3C2410相应的中断引脚,通过set_irq_type()函数初始化MCP2515的中断触发方式等.
2.
中断注册函数request_irq()由于CAN总线接收数据时必须与系统以中断方式交换数据,所以必须注册中断.
下面是具体代码request_irq(IRQ_EINT0,mcp2515_int,SA_INTERRUPT,device_name,NULL);其中函数request_irq()的第1个参数是设备申请的中断号,第2个参数是中断处理函数指针,CAN协议引擎SRAM寄存器SPI接口模块配置控制逻辑TXCANRXCAN图2MCP2515的结构框图www.
linuxidc.
comLinux公社(LinuxIDC.
com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站.
-3-第3个参数是与中断管理有关的位掩码选项,,SA_INTERRUPT表示中断处理程序是一个快速中断处理程序,第4个参数是设备名称,第5个参数是申请时告诉系统的设备标志.
该函数返回值为0表示申请成功,返回负数表示失败,这样当中断发生时,在中断处理函数mcp2515_int()中读取CAN状态寄存器CANSTAT,判断RXB0是否装入报文,如果是则把报文通过SPI接收数据寄存器读取到buffer中,等待系统函数read()读取.
3.
文件结构file_operations这个结构存在于中,文件结构中定义了很多操作,这些操作主要是实现系统调用.
内核可以通过文件结构来访问驱动程序的函数.
staticstructfile_operationsmcp2515_fops={//mcp2515_fops所属的设备模块.
owner=THIS_MODULE,//打开设备.
open=MCP2515_open,//释放设备.
release=MCP2515_release,//向总线发送数据.
write=MCP2515_write,//总线读取数据.
read=MCP2515_read,};读写CAN总线的功能可以由Linux系统函数read()和write()实现,通过传递不同的参数给驱动程序中的MCP2515_read()和MCP2515_write(),我们可以读取和写入相应的数据.
驱动中的CAN总线读函数MCP2515_read()是程序设计的难点,其中采用了Linux内核阻塞机制,核心代码如下:staticssize_tMCP2515_read(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){uchari;ucharreceive_data[11];//使读进程阻塞于此,等待中断发生时唤醒.
interruptible_sleep_on(&my_wait);//打印调试信息printk("sleepover\n");//读取CAN数据帧的标识符高位receive_data[0]=spi_read_2510(RXB0SIDH);//读取CAN数据帧的标识符低位receive_data[1]=spi_read_2510(RXB0SIDL);//读取CAN数据帧的数据长度receive_data[2]=spi_read_2510(RXB0DLC);//片选信号拉低s3c2410_gpio_setpin(S3C2410_GPB0,0);//延时1s确保片选完成mdelay(1000);www.
linuxidc.
comLinux公社(LinuxIDC.
com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站.
-4-//发读命令字spi_tx(cmd_read);//发接收缓冲器地址spi_tx(RXB0D0);for(i=0;i软件>操作系统>Linux目录下.
Linux公社(LinuxIDC.
com)设置了有一定影响力的Linux专题栏目.
包括:Ubuntu专题Fedora专题RedHat专题SUSE专题红旗Linux专题Android专题Linux公社简介-广告服务-网站地图-帮助信息-联系我们本站(LinuxIDC)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议.

盘点AoYoZhuJi傲游主机商8个数据中心常见方案及八折优惠

傲游主机商我们可能很多人并不陌生,实际上这个商家早年也就是个人主机商,传说是有几个个人投资创办的,不过能坚持到现在也算不错,毕竟有早年的用户积累正常情况上还是能延续的。如果是新服务商这几年确实不是特别容易,问到几个老牌的个人服务商很多都是早年的用户积累客户群。傲游主机目前有提供XEN和KVM架构的云服务器,不少还是亚洲CN2优化节点,目前数据中心包括中国香港、韩国、德国、荷兰和美国等多个地区的CN...

NameCheap黑色星期五和网络礼拜一

如果我们较早关注NameCheap商家的朋友应该记得前几年商家黑色星期五和网络星期一的时候大促采用的闪购活动,每一个小时轮番变化一次促销活动而且限量的。那时候会导致拥挤官网打不开迟缓的问题。从去年开始,包括今年,NameCheap商家比较直接的告诉你黑色星期五和网络星期一为期6天的活动。没有给你限量的活动,只有限时六天,这个是到11月29日。如果我们有需要新注册、转入域名的可以参加,优惠力度还是比...

ReadyDedis:VPS全场5折,1G内存套餐月付2美元起,8个机房可选_服务器安装svn

ReadyDedis是一家2018年成立的国外VPS商家,由印度人开设,主要提供VPS和独立服务器租用等,可选数据中心包括美国洛杉矶、西雅图、亚特兰大、纽约、拉斯维加斯、杰克逊维尔、印度和德国等。目前,商家针对全部VPS主机提供新年5折优惠码,优惠后最低套餐1GB内存每月仅需2美元起,所有VPS均为1Gbps端口不限流量方式。下面列出几款主机配置信息。CPU:1core内存:1GB硬盘:25GB ...

增加百度收录为你推荐
虚拟主机价格个人虚拟主机选择多大的价格多少的合适?独立ip空间怎么知道自己的空间是不是独立IP呢?电信主机租用请问放个服务器在电信机房一般要什么配置?租金多少?网站域名域名和网址有什么区别?ip代理地址ip代理有什么用?有图片..me域名.me域名和com的价值对比,懂的告诉我呀香港虚拟空间香港虚拟主机空间哪家最好免备案虚拟空间备案退两次了。哪里有免备案空间虚拟主机用?网站空间租用公司网站租用什么样的网站空间合适重庆网站空间重庆建网站的公司 我司准备建一个好点的网站,求推荐
域名投资 星星海 themeforest 搬瓦工官网 新站长网 国外免费空间 网盘申请 最好看的qq空间 699美元 1g内存 美国免费空间 linux使用教程 常州联通宽带 国外视频网站有哪些 环聊 登陆空间 西安服务器托管 新加坡空间 lamp兄弟连 宿迁服务器 更多