在线时间10 小时
UID307659
注册时间2011-7-23
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 207
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2011-12-28 11:55:41
|
显示全部楼层
RE:安版主 这是我的CAN程序 麻烦您看一下!!
好像粘贴是有点出错了,再发一次(程序死在了这里while(!CANTFLG);):
/***CAN初始化*******************************************************/
void CAN_Init(void){
CANCTL0_INITRQ = 1; //启动CAN初始化
while(!CANCTL1_INITAK) //等待初始化响应
;
CANCTL1 = 0x80; //CAN工作模式的设置 选择24M总线时钟
CANBTR0_SJW = 3; //同步跳跃脉宽设置 4Tq
CANBTR0_BRP = 2; //预分频数设置为3
CANBTR1_SAMP = 0; //采样数为1
CANBTR1_TSEG_20 = 3;
CANBTR1_TSEG_10 = 10; //相位缓冲段SEG1、SEG2长度设置 4,11个Tq
CANIDAC_IDAM = 1; //选择消息的接受模式
CANIDAR0 = 0x00;CANIDMR0 = 0x00;
CANIDAR1 = 0x00;CANIDMR1 = 0x00;
CANIDAR2 = 0x00;CANIDMR2 = 0x00;
CANIDAR3 = 0x00;CANIDMR3 = 0x00;
CANIDAR4 = 0x00;CANIDMR4 = 0x00;
CANIDAR5 = 0x00;CANIDMR5 = 0x00;
CANIDAR6 = 0x00;CANIDMR6 = 0x00;
CANIDAR7 = 0x00;CANIDMR7 = 0x00; //接受所有的地址的消息
CANCTL0_INITRQ = 0; //关闭CAN初始化
while(CANCTL1_INITAK) //等待关闭初始化响应
;
//while(!CANCTL0_SYNCH) //等待CAN同步
// ;
CANRFLG_RXF = 1; //清空消息接受缓冲器
CANRIER_RXFIE = 1; //使能接收消息中断
}
/***CAN发送函数*****************************************************/
void CAN_send(mscan_T_msg msg){ //发送8个数
byte Txbuffer,i;
//if(CANCTL0_SYNCH == 1){
Txbuffer = 0;
while(!CANTFLG) //等待发送缓冲器可用
;
CANTBSEL = CANTFLG;
Txbuffer = CANTBSEL; //选择可用的buffer
CANTXIDR0 = (byte) (msg.Tx_ID>>8);
CANTXIDR1 = (byte) msg.Tx_ID;
CANTXDLR = msg.Tx_Length;
CANTXTBPR = msg.Tx_Prio;
for(i=0;i |
|