这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 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<<in_slot); 
            //设定CAN0中断控制寄存器
            //允许in_slot槽中断
    

  c0idr_addr.word&=~(0x0001<<in_slot); 
            //设定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 跳转至

回复

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