在线时间0 小时
UID253413
注册时间2010-12-11
NXP金币0
该用户从未签到
新手上路

- 积分
- 186
- 最后登录
- 1970-1-1
|
/* 来自孙同景 老师教材
使用说明:
本例演示了如何利用MSCAN的接收中断接收总线上的数据,基本原理如下:
================================================================
CAN4发送数据,CAN0接收数据。
================================================================
1、在各模块初始化时,把CAN0的接收中断打开,以便接收数据时产生中断;/
2、编写相应的中断服务程序并设置好中断向量;
3、在中断服务程序中根据客户需要决定是否存储当前的数据。
*/
#include /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#pragma LINK_INFO DERIVATIVE "MC9S12XEP100"
void delay()
{
//long j=240000; //1s
//long j=120000; //0.5s
long j=60000; //0.25s
while(j--);
}
void CAN_init() {
/*进入初始化模式*/
CAN0CTL0_INITRQ=1; //初始化模式请求位 1=初始化模式;0=正常模式
CAN4CTL0_INITRQ=1;
while((CAN0CTL1_INITAK==0)&&(CAN4CTL1_INITAK==0)); //初始化模式确认 1=确认进入初始化模式;0=未进入初始化模式
/*等待应答信号*/
CAN0IDAC=0x20;
CAN0IDMR0=0xff;
CAN0IDMR1=0xff;
CAN0IDMR2=0xff;
CAN0IDMR3=0xff;
CAN0IDMR4=0xff;
CAN0IDMR5=0xff;
CAN0IDMR6=0xff;
CAN0IDMR7=0xff;
CAN0BTR0=0x47; //设置波特率 总线:16M 波特率:250K
CAN0BTR1=0x14;
CAN0CTL1=0x80;
CAN0CTL0_INITRQ=0;
CAN4IDAC=0x20;
CAN4IDMR0=0xff;
CAN4IDMR1=0xff;
CAN4IDMR2=0xff;
CAN4IDMR3=0xff;
CAN4IDMR4=0xff;
CAN4IDMR5=0xff;
CAN4IDMR6=0xff;
CAN4IDMR7=0xff;
CAN4BTR0=0x47;
CAN4BTR1=0x14;
CAN4CTL1=0x80;
CAN4CTL0_INITRQ=0;
while((CAN0CTL1_INITAK==1)&&(CAN4CTL1_INITAK==1));
/*等待应答信号*/
CAN0RIER_RXFIE=1;
}
void CAN4_TX() {
uchar i;
i=CAN4TFLG;/*选择缓冲区*/
CAN4TBSEL=i;
i=CAN4TBSEL;
//========CAN ID 号 ==================
CAN4TXIDR0=0xC7;
CAN4TXIDR1=0xFA;
CAN4TXIDR2=0x06;
CAN4TXIDR3=0x94;
//========CAN 数据DATA寄存器 ============
CAN4TXDSR0=0x01;
CAN4TXDSR1=0x02;
CAN4TXDSR2=0x03;
CAN4TXDSR3=0x04;
CAN4TXDSR4=0x05;
CAN4TXDSR5=0x06;
CAN4TXDSR6=0x07;
CAN4TXDSR7=0x08;
CAN4TFLG=i;
}
void main(void) {
/* put your own code here */
EnableInterrupts;
DDRB=0xFF;
CAN_init();
for(;;) {
CAN4_TX();
delay();
}
}
#pragma CODE_SEG NON_BANKED
void interrupt 38 CAN0_RX(void) {
CAN0CTL0_RXFRM=1; /*清除接收标志*/
PORTB=CAN0RXIDR0;
PORTB=CAN0RXIDR1;
PORTB=CAN0RXIDR2;
PORTB=CAN0RXIDR3;
PORTB=CAN0RXDSR0;
delay();
PORTB=CAN0RXDSR1;
delay();
PORTB=CAN0RXDSR2;
delay();
PORTB=CAN0RXDSR3;
delay();
PORTB=CAN0RXDSR4;
delay();
PORTB=CAN0RXDSR5;
delay();
PORTB=CAN0RXDSR6;
delay();
PORTB=CAN0RXDSR7;
CAN0RFLG=0x01;/*清除CAN0接收中断标志位*/
}
挖宝活动:
|
|