基于CAN总线的嵌入式网络控制器
时间:04-08
来源:互联网
点击:
3 系统软件程序设计
3.1CAN控制器的驱动程序设计
CAN控制器的初始化流程图如下图6所示。其过程包括硬件使能、软件复位、内部设置的初始化和启动CAN等。
图6 CAN控制器驱动流程图
驱动程序的源文件共有三个:mcpcan.c,spi_cmd.c和spi.co要把三个源文件合并编译链接成一个.O为后缀的驱动模块。在Makefile中用了如下命令行:
$(EXEC):$(OBJS)
$(LD)$(LDFLAGS)-o$@S(OBJS)
即/usr/local/arm/2.95.3/bin/arm-linux-ld -r candrv.o mcpcan.o spi_cmd.o spi.o
因为对MCP2510这个CAN控制器芯片的操作是靠CPU给它发送SPI (串行外设接口}命令来实现的,所以要用到S3C2410的关于SPI的那螳特殊功能寄存器。
3.2MCP2510控制器应用程序
MCP2510控制器应用程序主要包括了接收和发送两部分。报文发送函数为
void MCP2510_TX (int TxBuf,int IdType,unsigned int id,int DataLen.,char* data)
通过TxBuf参数指定发送到那个缓冲器(TXBUF0,TXBUFl,TXBUF2)。IdType决定发送报文帧的类型,STANDID表示标准数据帧,EXTID表承扩展数据帧。
报文接受函数为:void MCP251O_TX (int TxBuf, IdType,
unsigned int id.,int Data,char * data)通过TxBuf参数指定从哪个缓冲器接收((RXBUFO或RXBUFl)。接收后的报文帧的类型、帧ID、数据长度以数据内容分别保存在IdType,id,DataLen 和data中。
在应用程序中创建了一个线程send专门负责发送数据,再在主线程中接收数据到一个mepcan_data结构体中并打印出来。
ret=pthread_create(&id,NULL(void*) send,&data_send);
if(ret!=o){
printf("Create pthread error! \n");
exit (1);}
printf("Create pthread success. \n");
在send线程中对打开的设备接述符进行write操作,在主线程中对该设备描述符进行read操作。因为在驱动中已经考虑到了互斥,所以线程中没有做并发处理。
4 结论
本文的创新点:本文对嵌入式网关设备发展情况及以太网与CAN总线相互连接与通讯问题进行深入的研究,在对嵌入式系统和网关设备的学习、分析比较的基础上,选用功能强大的、具有很大扩展空闻的Linux操作系统和32位的S3C2410X处理器,作为研究开发平台,针对S3C2410X处理器,完成其外围硬件电路的设计,包含有电源电路、复位电路,为系统提供正常工作的条件;操作系统的完成参考ARM9嵌入式技术及Linux高级实践教程中的建立、安装、配置、移植等工作。完成了对CAN控制器MCP2510和以太网控制器RTL8019AS的硬件驱动。并在Linux下编写了CAN总线和以太网的应用程序。
已经产生经济效益200万元。
作者:张海春,肖亚 来源:《微计算机信息》《嵌入式专SOC)2009年第2-2期
3.1CAN控制器的驱动程序设计
CAN控制器的初始化流程图如下图6所示。其过程包括硬件使能、软件复位、内部设置的初始化和启动CAN等。
图6 CAN控制器驱动流程图
驱动程序的源文件共有三个:mcpcan.c,spi_cmd.c和spi.co要把三个源文件合并编译链接成一个.O为后缀的驱动模块。在Makefile中用了如下命令行:
$(EXEC):$(OBJS)
$(LD)$(LDFLAGS)-o$@S(OBJS)
即/usr/local/arm/2.95.3/bin/arm-linux-ld -r candrv.o mcpcan.o spi_cmd.o spi.o
因为对MCP2510这个CAN控制器芯片的操作是靠CPU给它发送SPI (串行外设接口}命令来实现的,所以要用到S3C2410的关于SPI的那螳特殊功能寄存器。
3.2MCP2510控制器应用程序
MCP2510控制器应用程序主要包括了接收和发送两部分。报文发送函数为
void MCP2510_TX (int TxBuf,int IdType,unsigned int id,int DataLen.,char* data)
通过TxBuf参数指定发送到那个缓冲器(TXBUF0,TXBUFl,TXBUF2)。IdType决定发送报文帧的类型,STANDID表示标准数据帧,EXTID表承扩展数据帧。
报文接受函数为:void MCP251O_TX (int TxBuf, IdType,
unsigned int id.,int Data,char * data)通过TxBuf参数指定从哪个缓冲器接收((RXBUFO或RXBUFl)。接收后的报文帧的类型、帧ID、数据长度以数据内容分别保存在IdType,id,DataLen 和data中。
在应用程序中创建了一个线程send专门负责发送数据,再在主线程中接收数据到一个mepcan_data结构体中并打印出来。
ret=pthread_create(&id,NULL(void*) send,&data_send);
if(ret!=o){
printf("Create pthread error! \n");
exit (1);}
printf("Create pthread success. \n");
在send线程中对打开的设备接述符进行write操作,在主线程中对该设备描述符进行read操作。因为在驱动中已经考虑到了互斥,所以线程中没有做并发处理。
4 结论
本文的创新点:本文对嵌入式网关设备发展情况及以太网与CAN总线相互连接与通讯问题进行深入的研究,在对嵌入式系统和网关设备的学习、分析比较的基础上,选用功能强大的、具有很大扩展空闻的Linux操作系统和32位的S3C2410X处理器,作为研究开发平台,针对S3C2410X处理器,完成其外围硬件电路的设计,包含有电源电路、复位电路,为系统提供正常工作的条件;操作系统的完成参考ARM9嵌入式技术及Linux高级实践教程中的建立、安装、配置、移植等工作。完成了对CAN控制器MCP2510和以太网控制器RTL8019AS的硬件驱动。并在Linux下编写了CAN总线和以太网的应用程序。
已经产生经济效益200万元。
作者:张海春,肖亚 来源:《微计算机信息》《嵌入式专SOC)2009年第2-2期
总线 CAN总线 嵌入式 S3C2410 ARM Linux 电路 稳压电源 电路图 电压 电阻 收发器 相关文章:
- 热插拔和缓冲I2C总线 (04-14)
- PCIe总线何时突破Unix服务器坚冰(02-03)
- TMS320VC5402 HPI接口与PCI总线接口设计(04-12)
- 基于Nios II的I2C总线接口的实现(04-09)
- 双口RAM CY7C026在高速数据采集系统中的应用(04-12)
- 计算机在新型多电机同步系统中的应用(07-08)