试验18CAN总线传输.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验18 CAN总线传输 【实验目的】 了解CAN总线工作原理; 学习LPC系列处理器CAN总线模块的使用方法; 【实验要求】 正确配置LPC处理器IO端口并正确初始化CAN总线模块; 编写程序实现CAN总线数据传输。 【实验原理】 一、LPC系列处理器CAN总线模块及CAN总线的原理 参见《ARM与嵌入式系统——基于LPC2470和IAR开发环境》中有关CAN总线的章节,重点掌握CAN总线工作原理及CAN总线模块的寄存器使用、数据传输操作方法等内容。本实验提供程序实现LPC处理器两个CAN总线模块之间的数据传输。程序通过串口把CAN发送数据读入LPC处理器,处理器把数据从CAN模块1发出,数据通过对连线发到CAN模块2;程序把数据从CAN模块2读出进行比较,验证数据传输正确后从串口回显传输数据。本程序使用了两种中断源:串口接收数据中断和CAN模块接收中断。 二、CAN总线收发器TJA1040简介 LPC处理器拥有两个CAN总线通道控制器,所以实验板只要增加CAN总线收发器就可以方便实现CAN总线。LPC处理器两个CAN总线通道各使用一片TJA1040。TJA1040是一款符合CAN 2.0规范,数据率可高达1Mbps的CAN总线收发器。TJA1040器件主要引脚功能说明如表18-1所示。 表16-1 引脚名称 功能说明 TXD 传输数据输入 RXD 接收数据输出 CANL CAN总线低输出 CANH CAN总线高输出 STB 就绪状态控制:高为就绪状态,低为正常状态。 三、实验板CAN总线电路 1.原理图 图16-2 2.说明 TJA1040的STB接地,使器件工作在正常模式下,RXD和TXD分别接CAN总线模块的RD和TD引脚。所以程序在初始化CAN模块时要先初始化I/O模块,正确配置引脚P0.0~1和P0.4~5。 四、程序工程模板说明 实验提供的程序工程模板中,主要有以下几个目录: 1.Common:共有四个源程序文件:cstartup.s79芯片的初始化汇编代码、target.c目标板的初始化C语言代码、irq.c中断实现程序、timer.c定时器程序。 2.Target:存放CAN模块的源程序CAN.c和串口模块源程序UART0.c。 3.User:存放CAN总线测试源程序testcan.c。 五、驱动程序说明 1. CAN.c说明 在本例中使用到的目标板驱动程序为CAN.c,提供函数如下: 1)CAN_Init():对CAN模块进行初始化,设置CAN模块工作模式,并挂载数据接收中断函数CAN_Handler。 2)CAN_Handler():CAN总线接收数据中断服务程序。通过判断CAN状态字调用不同通道的接收函数CAN_ISR_Rx1()或者CAN_ISR_Rx2()。具体CAN状态字意义请查阅教材CAN总线通信部分内容。 3)CAN_ISR_Rx1():CAN总线1通道接收数据。该函数只被中断服务函数调用。 4)CAN1_SendMessage():CAN总线1通道发送数据。 5)Msgconvert():把从CAN总线通道接收到数据转换成字符串格式,以便串口打印输出。 2.CAN.h说明 CAN.h是CAN.c的配套头文件,内容主要有:CAN总线传输时序的宏定义,CAN总线帧格式的结构体以及CAN.c中的几个函数的extern外部函数声明。 3.UART0.c说明 本文件提供串口0的基本读写函数及初始化函数,具体功能与串口实验中各函数功能相同。 4.UART0.h说明 本文件为UART0.c包含头文件,提供串口宏及外部函数说明。 【实验内容与步骤】 一、阅读例程 仔细阅读并理解实验提供的CAN.c和UART0.c源程序。掌握CAN总线读写方法以及用中断实现串口的读写方法。 二、编写用户测试程序 1、在源文件testcan.c中输入以下程序: #include LPC2468.h /* LPC23xx definitions */ #include type.h #include irq.h #include can.h #include timer.h #include uart0.h #include target.h CAN_MSG MsgBuf_TX1, MsgBuf_TX2; // TX and RX Buffers for CAN message CAN_MSG MsgBuf_RX1, MsgBuf_RX2; // TX and RX Buffers for CAN message volatile DWORD CAN1RxDone, CAN2RxDone; extern volatile DWORD UART0Count; extern volatile BYTE UART0Buffer

文档评论(0)

136****3783 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档