这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» 请教RENESAS工程师 CAN-BUS的问题

共13条 1/2 1 2 跳转至

请教RENESAS工程师 CAN-BUS的问题

菜鸟
2008-02-19 15:35:03 打赏

参照renesas官方网站rcj05b0026_cm16canap.pdf资料中CAN应用说明。现有一处不明白的地方。
CAN消息的接受和发送分为3个步骤其中CAN的配置给出了源程序,程序如下:
void config_can0(void);
void config_can0(){
c0ctlr_addr.b.reset=1; /*进入配置模式*/

c0ctlr_addr.b.sleep=0; /*解除CAN睡眠模式*/

while(!c0str_addr.b.state_reset){} /*确认复位状态*/

c0ctlr_addr.b.porten=1; /*CAN断口允许*/

c0ctlr_addr.b.loopback=0;

c0ctlr_addr.b.msgorder=1;

c0ctlr_addr.b.basiccan=1;

c0ctlr_addr.b.buserren=0;

c0ctlr_addr.b.tsprescale=0;

set_bitrate_can0(); /*波特率的设定*/

set_mask_can0(); /*屏蔽寄存器设定*/

c0ctlr_addr.b.reset=0; /*进入工作模式*/

while(c0str_addr.b.state_reset){} /*工作模式确认*/
}

不明白之处是:set_mask_can0();/*屏蔽寄存器设定*/
不知道具体是怎么设置的。找遍该资料,也没发现有这个子程序。硬件手册介绍的不是很详细。请RENESAS工程师给予帮助。谢谢!本人邮箱zebond_08@163.com




关键词: 请教 RENESAS 工程师 CAN-BUS 问题

菜鸟
2008-02-20 11:44:29 打赏
2楼
rcj05b0026_cm16canap.pdf这份资料并不完整.今天又发现了一些问题.请RENESAS工程师给份完整CAN应用资料,或给予解答.请尽快回复.急!!!

菜鸟
2008-02-22 09:51:50 打赏
3楼
   麻烦大家给点意见,不要让我在这里唱独角戏.

菜鸟
2008-02-23 10:10:14 打赏
4楼
瑞萨产品的再次开发可行性如何,值得我们深思........

菜鸟
2008-02-25 16:37:51 打赏
5楼

为什么我使用瑞萨的产品却得不到相关的技术支持.WHY???
在CAN-BUS的编程过程中,遇到了很多的麻烦.首先是编译器E8老是出现莫名其妙的错误.要不就是不支持中文注释,要不就是老冒出变量为定义.这不是无中生有吗.搞的我编程一点都不顺.以下程序还是摘自rcj05b0026_cm16canap.pdf资料.
  其中就有不少错误.


/* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
/* 数据帧发送模式*/
/*;(1)发送流程*/
/* 如将槽设定为数据帧发送模式,可发送槽中设定的数据帧。*/
/* 当同时将两个以上的槽设定为数据帧发送模式时,由序号小的槽开始顺序发送。*/


#include "sfr_r823.h"

typedef struct {
unsigned short id; //标准ID
unsigned char dlc; //数据长度码
unsigned char data[8];

}can_std_data_def;


void set_trm_std_dataframe_can0(unsigned short,can_std_data_def*);

void set_trm_std_dataframe_can0(unsigned short in_slot,can_std_data_def*in_trm_data)
{ unsigned char lp_dlc; //数据存储的循环变量

while(c0mctl[in_slot].transmit.trmactive){}
//确认发送许可状态

while(c0mctl[in_slot].byte!=0x00)
{
//确认CAN0消息控制寄存器

c0mctl[in_slot].byte=0x00; //CAN0消息控制寄存器清零
}

c0icr_addr.word&=~(0x0001<//设定CAN0中断控制寄存器
//允许in_slot槽中断

c0idr_addr.word&=~(0x0001<//设定CAN0扩展ID寄存器
//设定in_slot槽为扩展ID

c0slot[in_slot].ba.sidh=((in_trm_data->id)>>6)&0x1f;

c0slot[in_slot].ba.dlc=in_trm_data->dlc;
//设定DLC

for(lp_dlc=0;lp_dlc<(in_trm_data->dlc)&&(lp_dlc<8);lp_dlc++)
{ //设定DATA
c0slot[in_slot].ba.data[lp_dlc]=in_trm_data->data[lp_dlc]; (该行编译出错->未定义 其实在sfr_r823.h中已经定义好了
}

c0mctl[in_slot].byte=0x80; //设定数据帧发送模式
//设定in_slot为发送槽

} 
  希望瑞萨工程师给个答复.要不然我只有换CPU了............


助工
2008-02-26 11:24:42 打赏
6楼

关于一楼的问题回答如下:
set_mask_can0(); /*屏蔽寄存器设定*/

该函数中实际上是对 C0GMR,C0LMAR,C0LMBR三个掩码寄存器赋值。其中C0GMR由邮箱0-13共用,C0LMAR对应邮箱14,COLMBR对应邮箱15。设定掩码主要是在接收时过滤对本节点无用的数据包。以减少CPU的数据处理量。


助工
2008-02-26 12:38:22 打赏
7楼

1. E8 是调试接口,NC30是编译器。

2. 使用中文注释要进行如下修改。首先关闭所有Workspace:

1) 在HEW的系统菜单的“Tool”选项下选择“Administration”

2)选择“Toolchains”下面的“Renesas M16C Stardard Toolchain 5.40.00”

3)选择“Environment”选项卡下的“NCKIN”和“NCKOUT”,然后点击“Modify”

4)将“NCKIN”和“NCKOUT”的值改为EUC。完成如上设置后,单击“OK”返回,这样HEW就支持使用中文注释了

3. 该问题是因为使用了中文注释而未进行如上修改。另外代码最好不要从文档中直接拷贝粘贴,其中可能有文本编辑器看不到的编码,会影响编译。


菜鸟
2008-02-27 10:07:49 打赏
8楼
谢谢瑞萨工程师的帮助,在你的帮助下,这些问题都顺利的解决了.我在这给你们提点建议,当我们使用瑞萨产品遇到问题时,你们能尽快帮我们解决问题,不要让我们等太长时间,一遇到问题就要拖个星期才能解决,我们这个项目耗不起.或是你们留个可以直接联系工程师的电话,邮箱都可以.

助工
2008-02-27 14:10:34 打赏
9楼

您好,已经把联系方式发到您的邮箱里,有问题请直接联系。


菜鸟
2008-02-28 14:06:35 打赏
10楼
谢谢!邮件我已经收到,有问题在向你请教.

共13条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]