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