#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
void MSCAN3Trans(unsigned char *ID, unsigned char * msgout)
{
CAN3TXIDR0 = *ID; /* 设置ID寄存器,数组ID是用户设置*/
CAN3TXIDR1 = *(ID+1);
CAN3TXIDR2 = *(ID+2);
CAN3TXIDR3 = *(ID+3);
CAN3TXDSR0 = *msgout; /* 设置数据寄存器,数组msgout是用户设置*/
CAN3TXDSR1 = *(msgout+1);
CAN3TXDSR2 = *(msgout+2);
CAN3TXDSR3 = *(msgout+3);
CAN3TXDSR4 = *(msgout+4);
CAN3TXDSR5 = *(msgout+5);
CAN3TXDSR6 = *(msgout+6);
CAN3TXDSR7 = *(msgout+7);
CAN3TXDLR = 8; /*设置数据长度*/
CAN3TXTBPR = 0; /*设置发送缓存优先级*/
CAN3TFLG_TXE0=1; /*清除TxE位,发送CAN消息*/
}
void main(void) {
/* put your own code here */
/*变量定义*/
unsigned char ID[3];
unsigned char msgout[7];
unsigned int i;
/*CAN初始化*/
CAN3CTL0_INITRQ=1; /* 请求进入初始化工作模式 */
while(!CAN3CTL1_INITAK){} /* 等待进入初始化模式 */
CAN3CTL1 = 0x80; /*CAN使能且CAN0CTL1_LISTEN=0*/
CAN3BTR0 = 0xc0; /* 设置SJW=2, 预分频为16*/
CAN3BTR1 = 0xbb; /* 设置波特率为500kbps */
CAN3IDMR0 = 0xFF; /*设置滤波器,全部设为1表示没有滤波*/
CAN3IDMR1 = 0xFF;
CAN3IDMR2 = 0xFF;
CAN3IDMR3 = 0xFF;
CAN3IDMR4 = 0xFF;
CAN3IDMR5 = 0xFF;
CAN3IDMR6 = 0xFF;
CAN3IDMR7 = 0xFF;
CAN3CTL0_INITRQ=0; /* 请求进入正常工作模式 */
while(CAN3CTL1_INITAK) /* 等待退出初始化模式 */
CAN3RIER = 0x01; /* 接受中断使能 */
MSCAN3Trans(ID,msgout);
EnableInterrupts;
for(;;) {
for(i=0;i<65535;i++){
}
MSCAN3Trans(ID,msgout);
} /* wait forever */
} |