首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
飞思卡尔™半导体(Freescale Semiconductor)
» [求助]关于MOTO芯片的CAN通讯问题
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
[求助]关于MOTO芯片的CAN通讯问题
发短消息
加为好友
strongchen
当前离线
版主
UID
104380
帖子
7531
精华
0
积分
14828
阅读权限
90
在线时间
17 小时
注册时间
2005-2-28
最后登录
2012-5-17
论坛元老
UID
104380
性别
男
1
#
strongchen
发表于 2005-3-3 14:46
|
只看该作者
现在把我编写的一段程序贴出来。CAN12共有三个发送缓冲区,我们通常这样做:先测试哪个为空,为空就用它发,所有的TBPR寄存器都设成一样的。这样就不会有问题,该程序经过测试,能正常使用。如果TBPR设得不一样,会发生一些奇怪的问题,比如会产生一些ERROR FRAME等,这些我们都测试过。
/************************CAN Transmission************************/
void CANTrans(void)
{
unsigned char BufferEmpty=0;
BufferEmpty=CTFLG;
if(BufferEmpty&1)
{
TB0IDR0=0x61;
TB0IDR1=0x60; //ECU1_CC ID.
TB0DLR=8; //data length=8.
TB0DSR0=ADResult[0];
TB0DSR1=ADResult[1];
TB0DSR2=ADResult[2];
TB0DSR3=ADResult[3];
TB0DSR4=ADResult[4];
TB0DSR5=ADResult[5];
TB0DSR6=0;
TB0DSR7=0; //confirm data segment.
TB0TBPR=1; //confirm data buffer priority.
CTFLG=0x01; //buffer0 starts transmission.
}
else if(BufferEmpty&2)
{
TB1IDR0=0x61;
TB1IDR1=0x60; //ECU1_CC ID.
TB1DLR=8; //data length=8.
TB1DSR0=ADResult[0];
TB1DSR1=ADResult[1];
TB1DSR2=ADResult[2];
TB1DSR3=ADResult[3];
TB1DSR4=ADResult[4];
TB1DSR5=ADResult[5];
TB1DSR6=0;
TB1DSR7=0; //confirm data segment.
TB1TBPR=1; //confirm data buffer priority.
CTFLG=0x02; //buffer0 starts transmission.
}
else if(BufferEmpty&4)
{
TB2IDR0=0x61;
TB2IDR1=0x60; //ECU1_CC ID.
TB2DLR=8; //data length=8.
TB2DSR0=ADResult[0];
TB2DSR1=ADResult[1];
TB2DSR2=ADResult[2];
TB2DSR3=ADResult[3];
TB2DSR4=ADResult[4];
TB2DSR5=ADResult[5];
TB2DSR6=0;
TB2DSR7=0; //confirm data segment.
TB2TBPR=1; //confirm data buffer priority.
CTFLG=0x04; //buffer0 starts transmission.
}
}
海纳百川 有容乃大
回复
引用
TOP
发短消息
加为好友
jsbychm
当前离线
UID
104724
帖子
26
精华
0
积分
161
阅读权限
20
在线时间
0 小时
注册时间
2005-3-3
最后登录
2007-3-22
注册会员
UID
104724
性别
男
2
#
jsbychm
发表于 2005-3-4 12:22
|
只看该作者
非常感谢strongchen的回复
那就是Datasheet说明中有问题了.
我这就用你的方法测试一下.有什么问题还请你多赐教!
无限风光在险峰
这个世界上没有什么事情不能发生
我的信箱:topchm@163.com
我的QQ :83317238
回复
引用
TOP
发短消息
加为好友
jackenxv
当前离线
UID
105933
帖子
18
精华
0
积分
161
阅读权限
20
在线时间
0 小时
注册时间
2005-3-14
最后登录
2005-4-2
注册会员
UID
105933
性别
男
3
#
jackenxv
发表于 2005-3-16 17:10
|
只看该作者
embedded everywhere,intelligence everywhere!
embedded=intelligence
回复
引用
TOP
发短消息
加为好友
hlzhangxt
当前离线
UID
104462
帖子
98
精华
0
积分
375
阅读权限
30
在线时间
0 小时
注册时间
2005-3-1
最后登录
2006-2-3
中级会员
UID
104462
性别
男
4
#
hlzhangxt
发表于 2005-3-16 17:24
|
只看该作者
不太明白
我不懂什么CAN, 但我可看懂你的程序。
CTFLG一定是某标志寄存器。
BufferEmpty=CTFLG;
if(BufferEmpty&1) 如果成立,说明 CTFLG = 0x01, 可为什么在条件成立的后,又要赋值 CTFLG = 0x01, 是否多次一举?
[em07][em07][em07][em07]
一名专业的嵌入式软件开发工作者
回复
引用
TOP