当前位置:首页 > 嵌入式 > 嵌入式硬件

介绍了uc 操作系统的内核结构以及设备驱动编程的基本原理,并对CAN 总线的嵌入式系统进行了硬件设计及软件驱动编程,提出CAN 总线技术应用于嵌入式系统的一种方案。

1 引言

早期应用于八位软件设计的嵌入式系统主要为前后台系统(或超循环系统),程序大约在几千行以内,由两部分组成,即其应用程序是一个无限的循环,循环中调用函数完成相应的操作,属于后台行为;其中断服务程序处理异步事件,属于前台行为.随着嵌入式系统功能越来越庞杂,如友好的人机界面、网络化、远程监控等.各种任务的优先级不同,传统的设计方法无法完成,程序长达数万行,程序员必须同繁琐的底层硬件打交道,这样效率低下.电子技术的发展为嵌入式微处理器提供了更多的外设,通用的如串口、并口、以太网口、现场总线、USB口等.基于免费自由软件发展而来的嵌入式系统uc,是一种免费的嵌入式操作系统.uc系统具有内核小、效率高、源码开放、性能稳定、大量的开发工具、良好的开发环境等特点,并且各种应用程序丰富,是进行嵌入式系统开发的最优秀工具之一.

2 uclinux操作系统简介

uclinux 系统主要由用户进程、系统调用接口、uclinux 内核、硬件控制器等四部分组成.用户进程是用户根据自己的设计和功能要求开发的应用程序,通过调用系统的功能函数来实现系统功能;系统调用接口通过系统调用实现用户与系统内核的接口,这些调用和服务也可以看成是系统内核的一部分;uclinux 内核是操作系统的灵魂,它抽象了许多硬件细节,将所有的硬件抽象成统一的虚拟接口,使程序可以以一种统一的方式进行数据处理,它主要包括基于优先级的进程调度、内存管理、文件系统、网络接口、进程间通讯等五部分;硬件控制器则包含了系统需要的所有可能的物理设备.以上四个部分之间的每个子系统都只能跟邻近的系统进行通信。

uclinux 的设备管理系统是嵌入式操作系统的重要组成部分,它可以分为:下层、与设备相关的,即所谓的设备驱动程序,直接与相应的设备打交道,并向上提供一组访问接口;以及上层、与设备无关,根据输入输出请求,通过特定设备驱动提供的接口,与设备进行通信.如通用的串口、网卡等驱动程序在uclinux 中都可以找到.

3 uclinux驱动编程原理

uclinux嵌入式系统不能象一样动态加载驱动程序模块,而只能同内核一起编译,与应用程序、驱动程序一起固化到可擦写的上,驱动程序长驻内存,是静态驱动程序.uclinux系统根据设备性质的不同,将设备分为四种类型:字符设备()、块设备()、网络接口(net)和设备驱动程序模块.在下载的uclinux源代码包中,可以在uclinux/linux/drivers目录下面看到通用设备如,,net, , , 等.系统对于每个设备都对应一个主设备号和一个次设备号,不同的设备可以对应相同的主设备号,应用程序访问设备通过不同的次设备号来识别和区别设备.在系统/dev目录下通过输入ls -l命令可以查到系统已注册的设备,因此编写新的驱动程序时必须向系统注册

该设备.在uclinux系统中,通过register_chrdev函数实现注册.

uclinux系统将所有硬件抽象成虚拟的文件系统,所有的字符设备、块设备都支持文件操作接口,因此可以对这种虚拟的设备文件系统进行文件操作.通常对设备文件进行的操作有、、write、等,即打开、读、写、释放文件.每一个设备驱动程序实质上是用来完成特定任务的一组函数集. 驱动程序拥有一个称为fileoperation 的数据结构,其中包含指向驱动程序内部大多数函数的指针.引导系统时,内核调用每一个驱动程序的初始化函数,将驱动程序的主设备号以及程序内部的函数地址结构的指针传输给内核.这样,内核就能通过设备驱动程序的主设备号索引访问驱动程序内部的子程序,完成打开、读、写等操作.程序员经常面临的一项工作就是为系统的新设备编写驱动程序.

在控制系统中,为了便于数据通讯,在底层常采用现场总线,目前CAN总线广泛应用于过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及等领域,下面介绍CAN总线应用于嵌入式系统的驱动编程.

4 CAN 总线的性能特点

CAN( Area )即控制器局域网络.CAN 总线目前已形成国际标准 version2.0.该技术规范包括A 和B 两部分.2.0A 给出了CAN 报文标准格式,而2.0B 给了出厂标准和扩展两种格式.CAN 总线是应用最广泛的现场总线之一,CAN为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上节点发送信息,而不分主从,通信方式灵活,且无需站地址等节点信息;CAN 网络上的节点信息分成不同的优先级,可满足不同的实时要求;CAN 采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据;CAN 只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的“调度”,CAN 的直接通信距离最远可达10km(速率5kbps 以下);通信速率最高可达1Mbps(此时通信距离最长为40m).CAN 上的节点数主要取决于总线驱动电路,目前可达110个;采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果;CAN 的通信介质可为双绞线、同轴或光纤等.CAN 总线的数据通信具有突出的可靠性、实时性和灵活性.

5 CAN总线的嵌入式系统硬件设计

本设计选用公司的作为嵌入式系统的微处理器芯片,该处理器是16/32位微处理控制器,内含由ARM公司设计的16/32位 处理器核,适用于价格及功耗敏感的场合.除内核外,该微处理器的片内外围功能模块包括:2个带缓冲描述符的通道;2个通道;2个GDMA通道;2个32位器及可编程I/O口.CAN控制器选用公司的,该芯片与电气兼容,带64字节先进先出()堆栈,兼容协议CAN2.0B,支持11位和29位识别码,位速率可达1Mbps,时钟频率,芯片内含寄存器,可由用户配置CAN总线波特率,设置验收屏蔽标识码,可配置系统为PeliCAN 模式或BasicCAN模式,出错告警等.

该系统采用作为收发器,其硬件连线如图(1)所示.AD0~AD7与的p0~p7连线,/cs接p12,ALE接p13,/RD接p14,/wr接p15,/int接XINTREQ0.

图1 硬件连线

6 驱动软件设计

图2 CAN总线初始化框图

本设计中,CAN总线驱动程序是作为一个模块放在linux/deriver//文件夹里面,软件流程如图(2)所示,其设计详细介绍如下.

模块首先对引用的库函数进行申明,并且定义:

#define IOPMOD (*(volatile unsigned *)0x3ff5000)

#define IOTA (*(volatile unsigned *)0x3ff5008)

#define IOPCON (*(volatile unsigned *)0x3ff5004)

#define EXTDBWTH(*(volatile unsigned *)0x3ff5

#define SYSCFG(*(volatile unsigned *)0x

主要有以下几个模块:

void can_(void)

{

SYSCFG =SYSCFG & 0x0fffffffd;

EXTDBWTH =EXTDBWTH& 0x00ff0ff;

IOPMOD=0xf0ff;

IOTA=0x6000; 寄存器地址0,MOD寄存器

IOTA= IO_PDATA&0xdfff; ALE=0 配置MOD寄存器

IOPDATA= IO_PDATA|0x3f; ; 复位模式、使能

IOPDATA=0x6006; ;寄存器地址6,总线器0寄存器

IOPDATA=IO_PDATA&0xdfff; ALE=0配置寄存器

IOPDATA= IO_PDATA|0x3f; 跳转宽度、波特率设置

……;配置总线器1、验收代码寄存器等

IOPDATA=0x6000; 寄存器地址0,MOD寄存器

IOPDATA=IO_PDATA&0xdfff; ALE=0配置MOD寄存器

IOPDATA= IO_PDATA&0xfe;写复位位,进入工作模式

result = register_chrdev(254,can,&can_fops);申请主设备号

if (result<0) {

printk(KERN_WARNING CAN:can’t getmajor , result);

return result;

}

在该驱动程序中,定义结构变量can_fops为应用程序访问内核的接口:

static struct file_operations can_fops = {

: can_,

write: can_write,

: can_,

: can_,

}; 

static int can_release(struct inode *inode, struct file *file)

{

MOD_DEC_USE_COUNT; ;用户减计数

Return 0;

}

static int can_open(struct inode *inode,struct file *file)

{

Scull_Dev *dev;

Int num = NUM(inode->i_rdev); 设备号

Int type = TYPE(inode->i_rdev); 设备类型

If (num>=scull_nr_devs) return -ENODEV;

dev = &scull_devices[num];

flip->private_data = dev;

MOD_INC_USE_COUNT; 用户数人工计数

IOPCON=0x16; //xIRQ0

disable_irq(INT_can);

if(request_irq(INT_can, &can_rx,

SA_INTERRUPT, can rx isr,can)) {

printk(s3c4510-can: Cant get irq %dn,

INT_sja1000);

return -EAGAIN;

}

printk(can has get irq 0n);

enable_irq(INT_can);

…… ; 配置SJA1000内部中断及屏蔽寄存器

return 0;

}

7 结束语

本文介绍了CAN总线在嵌入式系统中的驱动编程,对CAN总线技术在嵌入式系统中的应用进行了探索.本设计已在通信用远程中应用.

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭