[CAN-bus/DeviceNet] 周立功技术支持请进,LPC2219or2292的CAN应用高手请进

[复制链接]
3000|0
 楼主| smallfish6 发表于 2007-1-30 12:16 | 显示全部楼层 |阅读模式
<br />#include&nbsp;&quot;config.h&quot;<br /><br /><br />#define&nbsp;BPS_1000K&nbsp;&nbsp;&nbsp;(0&lt&lt23)|(1&lt&lt20)|(7&lt&lt16)|(0&lt&lt14)|0&nbsp;/*定义CAN的通信波特率*/<br />#define&nbsp;CAN1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;<br /><br /><br /><br /><br /><br />void&nbsp;PinSet&nbsp;(UINT8&nbsp;&nbsp;CanNum)<br />{<br />PCONP&nbsp;|=&nbsp;((UINT32)0x01&nbsp;&lt&lt&nbsp;(13+CanNum));<br />switch(CanNum)<br />{<br />&nbsp;&nbsp;&nbsp;case&nbsp;CAN1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&=~((UINT32)0x03&lt&lt18);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1|=((UINT32)0x01&lt&lt18);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;SetBuad(UINT8&nbsp;&nbsp;CanNum)<br />{<br />&nbsp;&nbsp;switch(CanNum)<br />{<br />&nbsp;&nbsp;case&nbsp;CAN1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN1BTR=BPS_1000K;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />}<br />}<br /><br /><br />void&nbsp;SetWarmVal(UINT8&nbsp;&nbsp;CanNum)<br />{<br />switch(CanNum)<br />{<br />&nbsp;&nbsp;case&nbsp;CAN1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN1EWL=0x60;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />}<br />}<br /><br /><br />void&nbsp;SetInterrupt(UINT8&nbsp;&nbsp;CanNum)<br />{<br />switch(CanNum)<br />{<br />&nbsp;&nbsp;case&nbsp;CAN1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN1IER=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />}<br />}<br /><br /><br />void&nbsp;InitCAN(UINT8&nbsp;&nbsp;CanNum)<br />{<br />&nbsp;&nbsp;PinSet(CanNum);<br />&nbsp;&nbsp;switch(CanNum)<br />{<br />&nbsp;&nbsp;case&nbsp;CAN1:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN1MOD=CAN1MOD|0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetWarmVal(CAN1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetBuad(CAN1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetInterrupt(CAN1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN1MOD=CAN1MOD|0x4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN1MOD=CAN1MOD&0xFE;&nbsp;&nbsp;&nbsp;//CAN的工作模式选择&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;__irq&nbsp;CAN1INT(void)<br />{<br />UINT32&nbsp;temp;<br />temp=CAN1ICR;&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 /><br />CAN1CMR=0x04;&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 />VICVectAddr=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//通知中断结束<br />}<br /><br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置所有中断分配为IRQ中断<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CAN1&nbsp;中断入口设定,非向量中断<br />&nbsp;&nbsp;&nbsp;&nbsp;VICDefVectAddr&nbsp;=&nbsp;(UINT32)CAN1INT;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;打开相应的VIC中断允许<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;(0x01L&nbsp;&lt&lt&nbsp;19);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;((0x01L&nbsp;&lt&lt&nbsp;20)&nbsp;|&nbsp;(0x01L&nbsp;&lt&lt&nbsp;26));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CANAFMR=0x02;&nbsp;&nbsp;//旁路模式<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitCAN(CAN1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN1TFI1=0&lt&lt31|0&lt&lt30|8&lt&lt16|0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*帧信息:标准数据帧,8位数据*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN1TID1=0xAA;&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;/*帧ID:0xAA*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN1TDA1=0x44332211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*前4字节数据*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN1TDB1=0x88776655;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*后4字节数据*/<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN1CMR=0x30;&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;while(1);&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;&nbsp;/*等待中断*/<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />这是我改的一个自发自收的CAN程序,但是不能够发送出去,进不了中断,请高手们帮看下是哪个地方有问题,谢谢!!<br />我买的是SMART2200的扳子,CPU用的是2292,我把CAN收发器的H与L端已经用电阻短接了<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

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