基于dsPIC33FJ128MC506的CAN通信.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于dsPIC33FJ128MC506的CAN通信

基于dsPIC33FJ128MC506的CAN通信技术分类: 通信? | 2009-04-14 山东省科学院自动化研究所 张云 李明强 庄汝科  系统硬件  利用TJA1054作为CAN收发器,DSPIC33FJ128MC506 CAN通讯要注意的是,在处理器和收发器之间要加光耦以隔离两者之间的电源。原理图如图1所示。  系统初始化  Microchip公司的dspPIC33FJ128MC506芯片中ECAN通信模块的初始化分为五个部分:系统工作时钟设置、ECAN接收和发射缓冲区的设置、ECAN波特率的设置、接收过滤寄存器和屏蔽寄存器的设置以及ECAN收发器TJA1054的启动。图1 dsPIC33FJ128MC506 CAN通讯原理图  系统工作时钟设置  dsPIC33FJ128MC506可以选择多种外部和内部振荡器作为时钟源,并通过时钟控制寄存器OSCCON进行设置。对时钟的选择要在系统的配置存储区(0x800000-0xFFFFFF)进行,在程序中一般通过几句宏指令语句指定。  以下语句选择时钟并禁能看门狗,其他的功能请参看芯片说明书。  _FOSCSEL(FNOSC_PRIPLL); //选用带PLL的主振荡器  _FOSC(POSCMD_HS); // 主振荡器为HS型晶振  _FWDT(FWDTEN_OFF); // 看门狗禁能  下面的函数对系统时钟进行配置, 外部晶振为8MHz,系统工作时钟为40MHz。  voidoscConfig(void)  {  CLKDIVbits.PLLPRE = 0; //外设时钟2分频为4M  PLLFBDbits.PLLDIV = 18; //20倍频,为80M  CLKDIVbits.PLLPOST = 0; //外设时钟2分频为40M  while(OSCCONbits.LOCK!=1){ }; //等待设置生效  }  ECAN接收和发射缓冲区的设置  DMA(直接存储器访问)方式是外设SFR与RAM间进行数据复制的非常高效的机制,dsPIC33FJ128MC506的ECAN模块支持DMA传输,共有8个DMA通道可供选择。在此我们选用0和2通道分别作为ECAN1的发射和接收。初始化语句如下:  DMA0通道初始化为ECAN1发射:  void dma0init(void)  {  DMACS0=0; //清DMA控制器状态位  DMA0CON=0x2020; //DMA为外设间接寻址模式,支持从DMA读,并写到外设  DMA0PAD=0x0442; //DMA0PAD下载为ECAN1发射寄存器的地址  DMA0CNT=0x0007; //传输计数寄存器为8  DMA0REQ=0x0046; //DMA外设REQ编号选择位  DMA0STA= __builtin_dmaoffset(ecan1msgBuf); //DMA起始地址位  DMA0CONbits.CHEN=1;  }  DMA2通道初始化为ECAN1接收:  void dma2init(void)  {  DMACS0=0; //清DMA控制器状态位  DMA2CON=0x0020; //DM为外设间接寻址模式,支持从DMA写,并读到外设  DMA2PAD=0x0440; //DMA0PAD下载为ECAN1接收寄存器的地址  DMA2CNT=0x0007; //传输计数寄存器为8  DMA2REQ=0x0022; //DMA外设REQ编号选择位  DMA2STA= __builtin_dmaoffset(ecan1msgBuf[2][0]); //DMA起始地址位  DMA2CONbits.CHEN=1;  }  上面程序中的“DMA0STA= __builtin_dmaoffset(ecan1msgBuf);”和“ DMA2STA= __builtin_dmaoffset(ecan1msgBuf[2][0]); ”分别指明了DMA的起始地址位为ecan1msgBuf和(ecan1msgBuf[2][0],ecan1msgBuf是一个两维数组,在相关头文件中定义,其语句为:  ECAN1缓冲器的设置:  #define ECAN1_MSG_BUF_LENGTH 4 //长度为4个字  //缓冲区为二维数据  typedef unsigned int ECAN1MSGBUF [ECAN1_MSG_BUF_LENGTH][8];  //数组位于DMA空间  extern ECAN1MSGBUF ecan1msgBuf __attribute__((space(dma)));?  波特率的设置  正确设置通信波特率必须配置以下几个参数:同步跳转宽度、波特率预分频比、相位段1和相位段2的长度、采样次数及传播时间段的长

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档