第四章-CAN总线和基于CAN的控制网络---副本.pptVIP

第四章-CAN总线和基于CAN的控制网络---副本.ppt

  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文档。上传文档
查看更多
dsPIC30F4011的CAN通信设计 电路设计 程序设计 主要模块 初始化 发送 接收 dsPIC30F4011 的CAN 模块基本上是一个完全CAN 控制器件,用硬件实现了大部分CAN 协议, 包括接收过滤和报文管理。在实现三缓冲报文发送时, 初始状态可将三个发送缓冲器装载不同的报文, 同时排队等待发送。 当节点赢得总线仲裁时, 优先级高的报文先发送, 剩下的两个缓冲器继续排队等待。当第一个缓冲器发送完成后, 第二个缓冲器开始发送, 第三个缓冲器继续等待, 同时, 第一个缓冲器中断CPU , CPU 向其装载新的报文, 并置位TXREQ 启动发送排队等待, 这个过程直至设定的报文发送完毕, 节点释放总线。 当下一次赢得总线仲裁时, 重复上述过程。 即:程序设计的内容为设置控制寄存器、将需要传送的数据放入缓冲器;或看看接收缓存器有没有数据,有则取之, 如此而已。 CAN 模块初始化流程图 PIC_CAN_INIT: / / CAN 模块初始化 MOVLB 0X0F MOVLW B. / / 将CAN 模块设置为配置模式 MOVWF CANCON PIC_CAN_CONFIG: MOVF CANSTAT, 0 ANDLW B. MOVLB 0X01 MOVWF SET_MODE_TEMP MOVLW B. CPFSEQ SET_MODE_TEMP GOTO PIC_CAN_CONFIG SET_BAUD_RATE: / / 设置波特率 ,, SET_BUFFER0_MASK: / / 设置缓冲区1 的屏蔽码 ,, SET_BUFFER0_FILTER: / / 设置缓冲区1 的滤波码 ,, SET_BUFFER1_MASK: / / 设置缓冲区2 的屏蔽码 ,, SET_BUFFER1_FILTER: / / 设置缓冲区2 的滤波码 ,, MOVLW B. / / 将CAN 模块设置为标准通信模式 MOVWF CANCON PIC_CAN_NORMAL: //将CAN 模块设置为普通模式 MOVF CANSTAT, 0 ANDLW B. MOVLB 0X01 MOVWF SET_MODE_TEMP MOVLW B. CPFSEQ SET_MODE_TEMP GOTO PIC_CAN_NORMAL RETURN CAN 模块初始化 信息的发送由CAN 控制器根据CAN 协议自动完成, 用户需将发送信息按特定格式存入相应寄存器, 并置位命令寄存器TXBxCON 的/ 发送请求0标志TXREQ。 发送处理可通过中断处理或查询状态标志进行控制。 本子程序采用查询方式进行发送。当PIC30F4011 发送数据时, 发送缓冲区对写操作锁定。这样, CPU 必须检查相应TXBxCON 的/ 发送状态0标志TXREQ, 以确定是否可将新信息放入发送缓冲区。 CAN数据发送编程 CAN_SEND: MOVLB 0X0F BTFSS TXB0CON, TXREQ / / 判断发送缓冲区1 是否空 GOTO SEND0 BTFSC TXB1CON, TXREQ / / 判断发送缓冲区2 是否空 GOTO SEND1 BTFSC TXB2CON, TXREQ / / 判断发送缓冲区3 是否空 GOTO SEND2 GOTO CAN_RECEIVE_END SEND0: MOVLB 0X0F BSF TXB0CON, 0 / / 将发送缓冲区1 设为高优先级 BSF TXB0CON, 1 ,, / / 将ID 标识符及数据长度等信息写入相应寄存器 TXB0SIDH、TXB0SIDL、TXB0DLC SEND0_LOOP: / / 将要发送的数据写入发送寄存器TXB0D0~ TXBOD7 ,, SEND1: //写TXB1D0~ TXB1D7 ,, SEND1_LOOP: ,, SEND2: //写TXB2D0~ TXB2D7 ,, SEND2_LOOP: ,, BSF TXB2CON,TXREQ / / 置位/ 发送请求0标志 GOTO CAN_SEND_END CAN_SEND_END: RETURN 接收子程序负责节点报文的接收和其他情况的处理。接收子程序比发送子程序复杂, 因为在处理接收报文过程中, 同时要对诸如总线脱离、错误报警、接收溢出等情况进行处理。接收处理可通过中断处理或查询状态标志进行控制, 本子程序采用查询方式进行接收。CPU 必须检查相应寄存器RXBxCON 的/ 接收状态0标志RXFUL, 以确定接收缓冲区是否有新信息。 CAN数据接收编程 CAN_RECEIVE: MOVLB 0X0F BTF

文档评论(0)

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

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

1亿VIP精品文档

相关文档