<br />#include "config.h"<br /><br /><br />#define BPS_1000K (0<<23)|(1<<20)|(7<<16)|(0<<14)|0 /*定义CAN的通信波特率*/<br />#define CAN1 0 <br /><br /><br /><br /><br /><br />void PinSet (UINT8 CanNum)<br />{<br />PCONP |= ((UINT32)0x01 << (13+CanNum));<br />switch(CanNum)<br />{<br /> case CAN1:<br /> PINSEL1&=~((UINT32)0x03<<18);<br /> PINSEL1|=((UINT32)0x01<<18);<br /> break;<br /> default:<br /> break;<br /> }<br />}<br /><br /><br />void SetBuad(UINT8 CanNum)<br />{<br /> switch(CanNum)<br />{<br /> case CAN1:<br /> CAN1BTR=BPS_1000K;<br /> break;<br /> default:<br /> break;<br />}<br />}<br /><br /><br />void SetWarmVal(UINT8 CanNum)<br />{<br />switch(CanNum)<br />{<br /> case CAN1:<br /> CAN1EWL=0x60;<br /> break;<br /> default:<br /> break;<br />}<br />}<br /><br /><br />void SetInterrupt(UINT8 CanNum)<br />{<br />switch(CanNum)<br />{<br /> case CAN1:<br /> CAN1IER=0x01;<br /> break;<br /> default:<br /> break;<br />}<br />}<br /><br /><br />void InitCAN(UINT8 CanNum)<br />{<br /> PinSet(CanNum);<br /> switch(CanNum)<br />{<br /> case CAN1: <br /> CAN1MOD=CAN1MOD|0x01;<br /> SetWarmVal(CAN1);<br /> SetBuad(CAN1);<br /> SetInterrupt(CAN1);<br /> CAN1MOD=CAN1MOD|0x4;<br /> CAN1MOD=CAN1MOD&0xFE; //CAN的工作模式选择 <br /> break;<br />default:<br /> break;<br /> }<br /> <br />}<br /><br />void __irq CAN1INT(void)<br />{<br />UINT32 temp;<br />temp=CAN1ICR; //清除中断方式<br /><br />CAN1CMR=0x04; //释放接收缓冲<br />VICVectAddr=0x00; //通知中断结束<br />}<br /><br />int main (void)<br />{<br /> <br /> VICIntSelect = 0; // 设置所有中断分配为IRQ中断<br /><br /> // CAN1 中断入口设定,非向量中断<br /> VICDefVectAddr = (UINT32)CAN1INT;<br /> <br /> // 打开相应的VIC中断允许<br /> VICIntEnable = (0x01L << 19);<br /> VICIntEnable = ((0x01L << 20) | (0x01L << 26));<br /> <br /> CANAFMR=0x02; //旁路模式<br /><br /> InitCAN(CAN1);<br /> <br /> <br /> <br /> CAN1TFI1=0<<31|0<<30|8<<16|0x00; /*帧信息:标准数据帧,8位数据*/<br /> CAN1TID1=0xAA; /*帧ID:0xAA*/<br /> CAN1TDA1=0x44332211; /*前4字节数据*/<br /> CAN1TDB1=0x88776655; /*后4字节数据*/<br /> <br /> CAN1CMR=0x30; /*选择第一缓冲并启动发送*/<br /> <br /> while(1); /*等待中断*/<br /> return 0;<br />}<br /><br />这是我改的一个自发自收的CAN程序,但是不能够发送出去,进不了中断,请高手们帮看下是哪个地方有问题,谢谢!!<br />我买的是SMART2200的扳子,CPU用的是2292,我把CAN收发器的H与L端已经用电阻短接了<br /><br /> |
|