[CAN-bus/DeviceNet] 2节点收发问题

[复制链接]
2517|1
 楼主| fatRonaldo 发表于 2007-7-13 11:36 | 显示全部楼层 |阅读模式
2个节点都通过了单节点测试,2个节点收发时不能通讯,示波器测2个节点的中断脚都没有中断信号!这是怎么回事?<br /><br />//--------------------------------------------------------------<br />void&nbsp;SJA_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_CONTROL,&nbsp;0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;SJA_Read(REG_CONTROL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!(temp&nbsp;&&nbsp;0x01));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_BTR0,&nbsp;0x05);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_BTR1,&nbsp;0xff);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_ACR,&nbsp;0xaa);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_AMR,&nbsp;0x00);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_CDR,&nbsp;0xaa);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_OCR,&nbsp;0x48);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_CONTROL,&nbsp;0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;SJA_Read(REG_CONTROL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!(temp&nbsp;&&nbsp;0x06));&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />//--------------------------------------------------------------<br />void&nbsp;SJA_SendBuf(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;TxBufB;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TxBufB&nbsp;=&nbsp;REG_TxBuffer1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((SJA_Read(REG_STATUS)&nbsp;&&nbsp;0x04)&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;等待发送缓冲区释放<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt10;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(TxBufB++,&nbsp;TxData);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_COMMAND,&nbsp;0x01);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;SJA_Read(REG_STATUS);<br />&nbsp;&nbsp;&nbsp;&nbsp;PC_send(temp);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />//--------------------------------------------------------------<br />void&nbsp;SJA_ReceiveBuf(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;RxBufB;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RxBufB&nbsp;=&nbsp;REG_RxBuffer1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((SJA_Read(REG_STATUS)&nbsp;&&nbsp;0x01)&nbsp;==&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt10;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RxData&nbsp;=&nbsp;SJA_Read(RxBufB++);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_COMMAND,&nbsp;0x04);<br />}<br /><br /><br />//--------------------------------------------------------------<br />void&nbsp;SJA_INT(void)&nbsp;interrupt&nbsp;0&nbsp;using&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;status;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EX0&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;=&nbsp;SJA_Read(REG_INTERRUPT);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;status&nbsp;&&nbsp;0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(temp&nbsp;==&nbsp;0x02)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;status&nbsp;&&nbsp;0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(temp&nbsp;==&nbsp;0x01)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_RxFlag&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EX0&nbsp;=&nbsp;1;<br /><br />}<br />//节点1主程序<br />void&nbsp;main(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MCU_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;PC_send(0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;PC_send(0x02);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ANOLD&nbsp;=&nbsp;AN;<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(AN&nbsp;==&nbsp;ANOLD);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AN&nbsp;=&nbsp;ANOLD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_SendBuf();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(CAN_RxFlag&nbsp;==&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_RxFlag&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_ReceiveBuf();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//节点2主程序<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MCU_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(CAN_RxFlag&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_RxFlag&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_ReceiveBuf();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_SendBuf();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEEP&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />
桂电飞天鼠 发表于 2007-7-14 15:35 | 显示全部楼层

rt

问题:<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_CONTROL,&nbsp;0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;SJA_Read(REG_CONTROL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!(temp&nbsp;&&nbsp;0x06));<br />--------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;初始化中,这个是用来做什么的?写的命令寄存器吗?如果不是,那以下这个初始化中的语句不是用来进入复位模式吗?如是为了进入复位模式,那上面的这个写的值(0x06)又是什么意思?进入自测试模式又进入仅听模式?<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJA_Write(REG_CONTROL,&nbsp;0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;SJA_Read(REG_CONTROL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!(temp&nbsp;&&nbsp;0x01));<br /><br />其它的粗略看了一下,感觉主程序的风格不是很好的说~~~还有接收与处理也比较粗糙了些,可能有误。可以参考一下周工网站的例程或其他网友的程序~~<br /><br />SJA的初始化很重要,波特率要算好,如果是Peli模式,屏蔽与验收均有四个要设置(好像你只设了一个)。SJA寄存器中断使能你有打开了没?(在这没发现)建议参考别人的看看,熟悉总体的流程之后再尝试按自己的风格去写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部