微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于CAN总线的嵌入式网络控制器

基于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期

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top