打印
[CAN-bus/DeviceNet]

2407 can模块

[复制链接]
1357|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
asianxll|  楼主 | 2012-4-8 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
纯新手学习DSP2407的CAN控制器,以北航出版社出版的刘和平的那本书后面的例程学习。
但是不知道为啥程序运行总是到下面这句就不往下运行了,程序运行到红色标注的那条语句就不往下走了。
求论坛里的各位大神帮忙,小弟不胜感激!!!!
下面是例程代码:
#include "f2407_c.h"
//
引用头部文件

int CAN_FLAG;
//
定义标志寄存器

void system_init();
//
声明在程序中需要用到是函数

void CANMBX_ISR();
void CAN_INIT();
void inline disable()
{

asm(" setc INTM");

}

void inline enable()
{

asm(" clrc INTM");

}


//(1)主程序
main()
{

system_init();
//
系统初始化子程序


CAN_FLAG=0x00;

//
CAN用户标志,CAN_FLAG=0表示收到数据


CAN_INIT();
//CAN
初始化子程序


enable();


for(;;)


{


TCR=0x20;
//MBX3
请求发送


while(TCR&0x2000==0)
//
等待发送应答


continue;


TCR=0x2000;

//
TA3MIF3标志位


while(CAN_FLAG==0)


continue;
//
等待接收数据


CAN_FLAG=0x0000;
//
清接收到标志


MDER=0x0000;
//
邮箱不使能


MCR=0x0140;
//CDR=1,
数据改变请求


MBX3A=MBX2A+1;
//
邮箱3中数据加1用来更新2中的数据


MBX3B=MBX2B+1;


MBX3C=MBX2C+1;


MBX3D=MBX2D+1;




}

}

//(2) 系统初始化子程序

void system_init()
{

asm(" setc
SXM");
//
抑制符号位扩展


asm(" clrc
OVM");
//
累加器中结果正常溢出


asm(" clrc
CNF");
// B0
被配置为数据存储空间


asm(" setc
INTM");
//
禁止所有中断


SCSR1=0x81FE;

// CLKIN=6M
CLKOUT=4CLKIN=24M


WDCR=0x0E8;

//
不使能看门狗,因为SCSR2中的WDOVERRIDE





//
WD复位后的缺省值,故可以用





//
软件禁止看门狗


IMR=0x0010;
//
开中断优先级5



IFR=0x0FFFF;

//
清除全部中断标志,"10"

}


//(3)CAN初始化子程序

void CAN_INIT()


{


MCRB=MCRB|0x0C0;
//
设置IOPC6IOPC7CANRXCANTX


CAN_IFR=0x0FFFF;
//
清所有中断标志


LAM1_H=0x7FFF;
//
设置邮箱32的屏蔽ID寄存器


LAM1_L=0x0FFFF;
//0
ID必须匹配


MCR=0x1040;
//CCR=1
改变配置请求


while(GSR&0x0010==0) continue;
//CCE=1
时即可配置BCR2BCR1寄存器


BCR2=0x01;

//
波特率预分频寄存器


BCR1=0x033;
//
波特率设置为500Kbps


MCR=MCR&0x0EFFF;
//CCR=0
改变配置请求


while(GSR&0x0010!=0) continue;
//
只有当CCE=0,配置BCR2BCR1寄存器成功


MDER=0x040;
//
不使能邮箱2,邮箱2改为接收方式


MCR=0x0143;
//CDR=1,
数据区改变请求


MSGID2H=0x2447;
//
设置邮箱2的控制字及ID


//IDE=0,AME=0,AAM=0


//
标准方式为MSGID2H[12~2]


MSGID2L=0x0FFFF;


MSGCTRL2=0x08;
//
设置控制器


//
数据长度DCL=8,RTR=0数据帧


MBX2A=0x0000;
//
邮箱2信息初始化


MBX2B=0x0000;


MBX2C=0x0000;


MBX2D=0x0000;


MSGID3H=0x2447;
//
设置邮箱3的标识符


MSGID3L=0x0FFFF;


MSGCTRL3=0x08;
//RTR=0,DCL=8


MBX3A=0x2211;
//
邮箱3信息初始化


MBX3B=0x4433;


MBX3C=0x6655;


MBX3D=0x8877;


CAN_IMR=0x0F7FF;


CAN_IFR=0x0FFFF;


MCR=0x04c0;
//DB0=1,AB0=1,STM=1
设置为自测试模式


MDER=0x04C;
//
使能邮箱23,邮箱2为接收方式




}



//(4)中断程序
void interrupt GRIS5()
{

switch(PIVR)


{


case 64:CANMBX_ISR();


break;


}

}

void CANMBX_ISR()
{

RCR=0x040;
//
复位RMP2MIF2


CAN_FLAG=1;
//
置用户接收标志



}


//
直接返回中断服务程序

void interrupt nothing( )
{


return;

}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝