老古开发网首页
导航:老古开发网首页文章索引文章分类嵌入式系统→[C8051F040中CAN控制器的应用]
| -文章搜索 - 最新文章 - |

C8051F040中CAN控制器的应用

发布时间:2004年8月3日 点击次数:1005
来源:单片机与嵌入式系统应用   作者:湖北工业大学 蔡华锋 廖冬初 潘健 张杰 陈小薇
 

摘要 介绍C8051F040单片机内部CAN控制器的应用。详细叙述此控制器的构成及其访问方式,指出在使用时是如何配置控制器的相关控制寄存器,并且给出CAN控制器在应用中的物理层硬件电路和应用层软件设计。

关键词 CAN控制器 寄存器 报文对象 C8051F040

  单片机与CAN总线连接的传统方式是将CPU与总线控制器和总线收发器相连后再接入总线网络,这样使CPU外围电路复杂化,整个系统受外部影响较大。为了解决这一问题,很多单片机厂商纷纷将CAN控制器集成在单片机芯片上。目前,单片机内部集成的CAN控制器有Motorola公司的MC68HC912DG128A、Philips公司的P87C591、Atmel公司的AT89C51CC01和AT89C51CC02、Intel公司的TN87C196CA和 TN87C196CB以及Cygnal公司的C8051F040等。

  不同单片机内部CAN控制器的使用方法有所不同,但存在着很多相似之处。这里以C8051F040为列详细介绍其内部CAN控制器的使用方法,希望通过这篇文章能给初学者带来方便,并能和广大的单片机爱好者就这一问题做进一步的讨论。

1  C8051F040 CAN控制器构成及访问方式

  C8051F040单片机是由美国Cygnal公司生产的完全集成的混合信号系统级芯SoC(System on Chip),具有与8051指令集完全兼容的CIP-51内核。它在一块芯片上集成了构成一个单片机数据采样或控制系统所需要的几乎所有模拟和数字外设及其它功能部件。它具有64KB Flash 、4352B RAM、CAN控制器2.0、2个串行接口、5个16位定时器、12位A/D转换器、8 位A/D转换器及12位D/A转换器等,它内部还带有JTAG接口,使调试变得非常方便。

  C8051F040内部集成的CAN控制器为Bosch CAN控制器。此CAN控制器有以下几部分构成:CAN内核、报文RAM(与C8051 RAM相互独立)、报文处理状态机制和CAN控制寄存器。其结构框图如图1所示。

  在CAN控制器里只有三个寄存器可通过CIP-51中的特殊功能寄存器直接访问,其它的寄存器只能通过CAN0ADR、CAN0DATH和CAN0DATL寄存器以地址索引的方式间接访问。在使用CAN控制器时,重点和难点是对CAN控制器的寄存器的使用,其内部寄存器的分类及其主要功能如下。
          
(1)  CAN控制器协议寄存器

  该协议寄存器是用来配置CAN控制器,处理各种中断,监控总线状态以及置控制器为测试模式。CAN控制器协议寄存器可使用C8051 MCU特殊功能寄存器通过索引方式间接访问,其中有些还可以很方便的通过C8051内部特殊功能寄存器直接寻址来访问。这部分的寄存器有:CAN控制寄存器(CAN0CN)、CAN状态寄存器(CAN0STA)、CAN测试寄存器(CANTST)、错误计数寄存器、位定时寄存器和波特率预比列因子扩展寄存器。其中,CAN0CN、CAN0STA和CANTST可通过C8051 MCU特殊功能寄存器直接访问,其它的只能通过间接访问。

(2)  报文对象接口寄存器

  CAN控制器中有两组报文对象接口寄存器,它们用来配置报文RAM中32个报文对象是用来向CAN总线发送数据,还是从CAN总线接收数据。当其中的一组被设置为向报文RAM中写数据,另一组则从报文RAM中读取数据。利用此接口寄存器可以避免CPU访问报文RAM与CAN报文接收和发送缓冲转移之间的冲突。所有的报文对象都存储在报文RAM里面,通过报文对象寄存器对其进行访问和配置,这些寄存器要通过C8051的CAN0ADR和CAN0DAT寄存器,使用间接索引地址方式来访问。这部分寄存器有:IFX命令请求寄存器、IFX命令屏蔽寄存器、IFX屏蔽寄存器1、IFX屏蔽寄存器2、IFX仲裁寄存器1、IFX仲裁寄存器2、IFX报文控制寄存器、IFX数据寄存器A1、IFX数据寄存器A2、IFX数据寄存器B1和IFX数据寄存器B2。


图1  C8051F04X内部CAN控制器结构框图

(3)  报文处理寄存器

  所有的报文处理寄存器都是只读寄存器。通过读取它们的值可以实时地判断相应报文对象的状态,从而使CAN控制器能正确运行。它们的标识位由CAN0ADR、CAN0DATH和CAN0DATL通过索引方式间接来访问。报文处理寄存器提供中断、错误、发送/接收请求和新数据信息。这部分的寄存器包括:中断寄存器、发送请求寄存器、新数据寄存器、中断队列寄存器和报文有效寄存器。

  那么,通过CAN0ADR、CAN0DATH和CAN0DATL寄存器以索引方式间接访问CAN控制器中寄存器的过程会怎样呢? 因为每个CAN控制器寄存器都有一个索引号,如果要访问某一CAN控制寄存器,只需将此寄存器的索引号写入CAN0ADR寄存器,而数据读/写操作通过CAN0DATH和CAN0DATL来完成。例如:如果需要对位定时寄存器重新配置时,只需向CAN0ADR寄存器中写入0X03,将新配置的数据的低字节写入CAN0DATL中,高字节写入CAN0DATH中。

2  CAN控制器应用时寄存器配置

  下面就CAN控制器在应用时,根据所要完成功能的不同而需要做的不同配置做具体描述。这包括报文对象初始化处理、发送对象配置、接收对象配置、中断处理配置;另外,还有发送对象的更新、位定时寄存器等配置。

2.1  报文对象初始化处理

  报文RAM中的报文对象(除MsgVal、NewDat 、IntPnd和TxRqst)配置不受芯片复位的影响。所有的报文对象在使用前必须由CPU来初始化为零或者被设置为无效。报文对象的配置是通过相应的接口寄存器来设置其屏蔽码、仲裁场、控制场和数据场值,而这一设置过程由相应的IFX命令请求寄存器来完成。

  当CAN控制寄存器中的Init位置零,CAN内核中的CAN协议控制器状态机制和报文处理状态机制将控制C_CAN的内部数据流。接收到的报文通过接收滤波后都存放在报文RAM中,而得到传输请求的报文都要移入CAN内核的移位寄存器中并通过CAN总线传出。

2.2  发送对象的配置

  当报文对象作为发送对象时,仲裁寄存器(ID28-0和Xtd位)将被应用,它们定义了即将发送的报文识别符和类型,如果使用11位识别符(标准帧),那么使用的是ID28~ID18,而ID17~ID0将被忽视。如果TxIE位被置位,则IntPnd位在此报文对象被成功发送后被置位;如果RmtEn位被置位,在接收到匹配的远程帧将引起TxRqst位被置位。若数据寄存器(DLC3-0,Data0-7)将被使用,TxRqst和RmtEn在数据有效前不会被置位。屏蔽寄存器(Msk28-0、Umask、Mxtd和MDir位)可以用来(UMask=‘1’)允许相同识别符的远程帧组将TxRqst位置位。

2.3  接收对象的配置

  当报文对象作为接收对象时,仲裁寄存器(ID28-0和Xtd位)将被应用,它们定义了即将发送的报文的识别符和类型,如果使用11位识别符(标准帧),那么使用的是ID28~ID18,而ID17~ID0将被忽视。当带有11位标识符的数据帧被接收到,ID17~ID0将被设置位‘1’。如果RxIE位被置位,当一个接收到的数据帧被接收并存储在报文对象中时,IntPnd位将被置位。数据寄存器(DLC3-0)将被使用,当报文处理存储一个数据帧到报文对象时,它将存储接收到的数据长度代码和8字节数据。如果数据长度代码少于8,剩下的报文对象字节将是不确定值。屏蔽寄存器(Msk28-0、UMask、MXtd和MDir位)可以用来(UMask=‘1’)允许相同识别符的数据帧组被接收。

2.4  中断处理

  在所有中断中,状态中断具有最高优先级,报文对象的中断优先级随着报文编号的增大而减小。如果有几个中断产生,那么CAN中断寄存器将指向优先级最高的中断,而不是按中断先后顺序排列。

  状态中断通过读取状态寄存器来清除,报文中断通过清除报文对象的IntPnd位来清除。处于中断寄存器中的中断识别符Intld能表明中断的原因,如果这个寄存器的值为0,没有中断发生;否则,有中断发生。

  CPU控制着状态寄存器的改变是否可以引起中断(CAN控制寄存器中的EIE和SIE位);当中断寄存器的值不为0(CAN控制寄存器中的IE位)时中断队列是否有效。CPU有两种方式判断报文中断源,第一种是判断中断寄存器中的Intld位;另一种是顺序扫描中断发生寄存器。

3  CAN控制器的应用

  CAN总线一般用在工业检测和控制现场,它将各功能模块连接在一起组成一个现场级通信网络。在本应用中,CAN总线完成下位机各部分之间的通信以及各下位机与上位机之间的通信。下位机以单片机C8051F040为核心,上位机由PC机构成。下位机的CAN通信物理层的电路在下面将做详细说明,为了完成上位机与下位机的通信,需要外加一块PC-CAN通信卡。

3.1 CAN 控制器外围硬件电路实现

  由于Cygnal内部的CAN控制器只是个协议控制器,不能提供物理层驱动,所以在使用时还需外加CAN总线收发器,常用的CAN总线收发器有Philips公司的PCA82C250收发器、高速TJA1050收发器等。这里使用的是PCA82C250收发器,它可提高总线的差动发送和接收能力。它与ISO11898标准完全兼容,有三种不同的工作方式,即高速、斜率控制和待机,可根据实际情况选择。此通信物理层电路图如图2所示。


图2  C8051F040 CAN控制器物理层电路

  为了进一步提高系统的抗干扰能力,在CAN控制器引脚CANTX、CANRX和收发器PCA82C250之间并不是直接相连,而是通过由高速光耦6N137构成的隔离电路后再与PCA82C250相连,这样就可以很好的实现总线上各节点的电气隔离。这部分增加了节点的复杂性,但它却提高了节点的稳定性和安全性。

  在PCA80C250与CAN总线接口部分也采用了一些安全和抗干扰措施。PCA82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线相连,电阻可起到一定的限流作用,从而保护PCA82C250免受过流的冲击。在CANH和CANL与地之间各自接一个30pF的小电容,可以起到滤除总线上的高频干扰和防电磁辐射的能力。另外,在CANH和CANL之间并联一个15V的瞬态电压抑制二极管(TVS),可以保护PCA80C250在瞬间高电压情况下而不受损坏。PCA82C250的RS脚上接有一个下拉电阻,电阻的大小可根据总线速率适当的调整,其值一般在16kΩ~140kΩ之间,图2中选用47kΩ。

  C8051F040供电电源为2.7V~3.6V,其所有I/O口允许5V(极限值为5.8V)输入,但是I/O输出电平为VDD。而PCA82C250为5V系统,为了能够驱动其工作,在CANTX引脚上接一上拉电阻,其值为4.7kΩ。

3.2  CAN通信软件实现

  此下位机CAN通信部分主要完成的任务是:将现场检测到的数据传送给上位机或其它的下位机节点;同时,上位机可以对下位机的相关参数进行设置,即下位机还须接收一定量的数据。

  由上可知,此节点的CAN通信主要包括系统初始化程序、发送程序、接收程序等。软件部分设计的好坏将直接决定系统能否正常工作,对于初次接触CAN总线系统的设计人员来说是一个难点,也是一个重点。在本例中,系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。

3.2.1  系统初始化

  初始化程序主要完成对所有的报文对象进行初始化(一般将所有值置零),对CAN控制寄存器(CAN0CN)、位定时寄存器(BITREG)进行设置,还要对发送报文对象和接收报文对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里我们使用外部晶振为8MHz,CAN通信速率为500k/s,得到BITREG的初始值为0x2301。主程序中现完成对象初始化、发送和接收初始化,最后才启动CAN处理机制(对BITREG和CAN0CN初始化),下面为CAN启动程序:

void start_CAN (void) {
  SFRPAGE = CAN0_PAGE; /*指向CAN0页面*/
  CAN0CN = 0x41; /*将CCE和Init置“1”开始初始化*/
  CAN0ADR = BITREG; /*指向位定时寄存器进行配置*/
  CAN0DAT = 0x2301; /*位率为500k/s*/
  CAN0CN = 0x06; /*允许全局中断, IE和SIE置位*/
  CAN0CN &= ~0x41; /*清楚CCE和INIT位,启动CAN状态机制*/
}

3.2.2  发送程序

  CAN报文发送是由CAN控制器自动完成的,用户只需根据接收到的远程帧的识别符,将对应的数据转移到发送缓冲寄存器,然后将此报文对象的编码写入命令请求寄存器启动发送即可,而发送由硬件来完成。这里,我们使用定时更新发送报文对象中的数据,数据的发送有控制器自动完成,当其收到一个远程帧时,就将具有相同识别符的数据帧发送出去。其发送程序结构如下:

void transmit_message (char MsgNum){
  SFRPAGE = CAN0_PAGE; /*指向CAN0页面*/
  CAN0ADR = IF1CMDMSK;/*向IF1命令屏蔽寄存器写入命令*/
  CAN0DAT = 0X0083;
  CAN0ADR = IF1ARB2; /*指向IF1仲裁寄存器2*/
  CAN0DATH = 0x80;
  CAN0ADR = IF1DATA1; /*指向数据场的第一个字节*/
  for(i=0;i<4;i++){
  CAN0DAT = can_temp[i]; /*将4字节数据写入发送缓冲器*/
  }
  CAN0ADR = IF1CMDRQST;
  CAN0DATL = MsgNum; /*将报文对象编号写入,则数据发送到对应的报文对象中*/
}

3.2.3  接收程序

  CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致,只是接收程序采用中断方式。在此应用中,接收程序主要接收上位机对下位机的参数设置数据,只有当修改时才需要接收数据,所以采用中断方式处理比较合适。接收程序结构如下:

void receive_data(void){
  SFRPAGE = CAN0_PAGE; /*指向CAN0页面*/
  CAN0ADR = IF2CMDMSK; /*向IF2命令屏蔽寄存器写命令*/
  CAN0DAT = 0x003F;
  CAN0ADR = IF2CMDRQST;/*将报文对象编号写入命令请求寄存器,对应地接收*/
  CAN0DATL = MsgNum; /* 得到数据就从报文RAM中移到数据缓冲器中*/
  CAN0ADR = IF2DATA1; /*指向数据场的第一个字节*/
  for(i=0;i<4;i++) { /*读取4个字节数据*/
  CAN_RX[i]= CAN0DAT;
}

结语

  本文是笔者在实际应用中得到的一点应用经验,期望对使用C8051F040中CAN控制器以及研究CAN总线的同行提供一些借鉴和帮助。文中的CAN控制器物理层电路完全能够使用,而且抗干扰能力较强。CAN总线以其稳定的特性、低廉的价格将会被更多用户所使用,而集成于微控制器内部的CAN控制器更是在设计过程中的首选。

  有关CAN通信部分源程序详见本刊网站www.dpj.com.cn。

参考文献

1  C8051F040/1/2/3 DataSheet. http://www.xhl.com.cn/sjsc/sjscdetail.asp?sid=25
2  Bosch CAN User’s Guide. http://www.xhl.com.cn/sjsc/sjscdetail.asp?sid=25

蔡华锋  研究生,主要研究方向为计算机控制和嵌入式系统应用。
廖冬初  教授,主要研究方向为控制工程,电力电子与电气传动等。


欢迎进入老古论坛进行讨论
[嵌入式系统] 相关文章:
伴随网络法在电子检测技术中的应用
简介:
摘 要: 本文着重讨论伴随网络法灵敏度分析在军事高科技中,即电子检测中的应用。对电子检测技术中最坏(好)情况预报,检测范围的估计,以及检测电路(网络)输出容差对检测元件的要求等作了具体分析。 关键词: 伴随网络;网络灵敏度;等效电路 引言 在现代军事高科技中常需把各种非电物理量转换成电量进行检测。这无疑需要利用各种传感器网络。但在实际工程中所遇到的网络输出参数U0是很复杂的,它不仅是I i和r1,r2,... rm的函数,而且是各种受控系数G1m,m1m,h1m的函数,根椐多元函数微分原理知,用传统的方法来计算电网络灵敏度时工作量太大。而采用伴随网络法则是很方便的。 本文着重从三个方面......

TI将TMS320C6711 DSP浮点性能提升至1500MFLOPS
瑞萨科技发布具有片上闪存存储器的M32192产品组微控制器
TASKING的新工具包支持R8C/Tiny全系列芯片及瑞萨E7仿真器
ACTEL提供针对太空应用而优化的耐辐射、高密度 FPGA器件
基于DSP芯片的指纹鉴定系统的设计实现
基于ADS7846动态签名认证的数据采集和预处理
TDC-GP1高精度时间间隔测量芯片及其应用
uC/OS和uClinux的比较
可以迅速装配使用的正弦波发生器
 
下一个:[新闻热点]GE高新材料为移动电话市场推出新的解决方案
简介:
GE高新材料宣布索尼爱立信、西门子、宁波波导萨基姆和UT斯达康的新的移动电话模型的外壳是LEXAN EXL系列树脂的最新的成功应用的例子。这些聚碳酸酯/硅氧烷树脂,是新的X GEN产品系列的一部分,被选用是因为他们的较高的冲击强度、弹性和卓越的抗极端温度能力。 根据移动电话制造商的观点,使用LEXAN EXL树脂制造收集部件,并采用合适的设计和加工可以来很好地延长产品的寿命。因为它减少了手机跌落所造成的损失,使用该材料同时可以抵御高热和高湿的条件,还可抵御对于某些部件的高度使用,比如折叠翻盖手机。 此外,因为该材料的高单位重量强度特性,LEXAN EXL可实现超薄的设计,从而可以减少重量和降......
 

上一个:[经验总结]51单片机操作系统开发中的问题与技巧

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒