总线增加百度收录

增加百度收录  时间: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)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议.

香港服务器多少钱一个月?香港云服务器最便宜价格

香港服务器多少钱一个月?香港服务器租用配置价格一个月多少,现在很多中小型企业在建站时都会租用香港服务器,租用香港服务器可以使网站访问更流畅、稳定性更好,安全性会更高等等。香港服务器的租用和其他地区的服务器租用配置元素都是一样的,那么为什么香港服务器那么受欢迎呢,香港云服务器最便宜价格多少钱一个月呢?阿里云轻量应用服务器最便宜的是1核1G峰值带宽30Mbps,24元/月,288元/年。不过我们一般选...

ZJI:香港物理服务器,2*E5-2630L/32G/480G SSD/30Mbps/2IP/香港BGP,月付520元

zji怎么样?zji是一家老牌国人主机商家,公司开办在香港,这个平台主要销售独立服务器业务,和hostkvm是同一样,两个平台销售的产品类别不一平,商家的技术非常不错,机器非常稳定。昨天收到商家的优惠推送,目前针对香港邦联四型推出了65折优惠BGP线路服务器,性价比非常不错,有需要香港独立服务器的朋友可以入手,非常适合做站。zji优惠码:月付/年付优惠码:zji 物理服务器/VDS/虚拟主机空间订...

BuyVM($5/月),1Gbps不限流量流媒体VPS主机

BuyVM针对中国客户推出了China Special - STREAM RYZEN VPS主机,带Streaming Optimized IP,帮你解锁多平台流媒体,适用于对于海外流媒体有需求的客户,主机开设在拉斯维加斯机房,AMD Ryzen+NVMe磁盘,支持Linux或者Windows操作系统,IPv4+IPv6,1Gbps不限流量,最低月付5加元起,比美元更低一些,现在汇率1加元=0.7...

增加百度收录为你推荐
美国vps主机我用的美国VPS主机429元/月,感觉好贵,请问有比较便宜点的吗?国内ip代理找一个好用的国内电信IP代理?php虚拟空间我已经有一套网站php代码和模板,并且有自己的虚拟空间和域名,怎么才能把我的代码加入到网站上.虚拟主机控制面板如何利用虚拟主机控制面板对网站进行管理1g虚拟主机打算买个1G的虚拟主机,用来做什么好?免费域名免费域名是什么动态域名解析请问什么叫动态域名解析??急急急!!!免费域名注册有没有免费的域名申请的啊?域名城域名城里面的账号怎么才能有回帖和发帖的权限啊?域名管理我想问一下我申请了一个域名 怎么管理啊
cybermonday pw域名 有益网络 流量计费 美国网站服务器 四核服务器 多线空间 web服务器搭建 跟踪路由命令 1元域名 路由跟踪 东莞服务器托管 广州虚拟主机 qq金券 工信部icp备案查询 群英网络 789电视剧网 数据湾 脚本大全 亿库 更多