这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » wangku001wei的开发进程

共61条 3/7 1 2 3 4 5 6 ›| 跳转至
高工
2012-08-28 20:51:53     打赏
21楼

利用例子中自带的 FDL 库 实现 内部Flash Data的读写
首先是库的配置问题 可参考 fdl_info.txt 文件 
除了想相关文件添加到工程中,还有设置文件包含路径


其次,编译的时候如果出现link错误 是因为配置文件的问题
参考
adapt the *.xcl file due to your requirements
   --> at least segments FAL_CODE and FAL_CNST should be defined
我是直接用例子中的 lnkr5f100le.xcl 直接替换了默认的文件


还有就是如果在IAR中调试的话 我不是很明白为啥我设置中断的时候 读取到的数字不对 而如果把中断全部取消 全速运行的话 就没有问题

主要函数
void  main(void)
{
 /* Start user code. Do not edit comment generated here */
 
 // 使用fdl库的时候 一次性写入4个字节
 // 写入几个字符试试
 g_Data_W8[0] = 0x31;
 g_Data_W8[1] = 0x32;
 g_Data_W8[2] = 0x33;
 g_Data_W8[3] = 0x34;
 g_Data_W32 = (g_Data_W8[0]<<8) | g_Data_W8[1];
 g_Data_W32 <<= 16;
 g_Data_W32 |= (g_Data_W8[2]<<8) | g_Data_W8[3];
 // 注意参数是索引,而不是实际地址
 // 首先擦除block 1 的 1024个字节 
 EraseDataFlash(0x0001);  // 注意参数是索引 不是实际地址
 // 写入数据
 g_Data_Flash_indexW = 0x0100; // data flash block 1 // 0x0100 = 0d256 * 4byte = 1024 byte as a block
 WriteDataFlash(g_Data_W32, g_Data_Flash_indexW);
 g_Data_Flash_indexW = 0x0101;
 WriteDataFlash(0x36373839, g_Data_Flash_indexW);
 // 先填充串口的必要数据
 // 中间有空格 末尾有回车换行 一次共发送 4+1+4+2 = 11 个数据
 TxBuff[4] = ' ';
 TxBuff[9] = '\r';
 TxBuff[10] = '\n';
 UART2_Start();
 TAU0_Channel0_Start();
 while (1U)
 {
  // 每隔一段时间读取flash 并串口发送出去;
    if(timerFlag)
  {
     // 读取flash内容
     g_Data_Flash_indexR = 0x0100;
   g_Data_R32 = ReadDataFlash(g_Data_Flash_indexR);
//   g_Data_R8[0] = (g_Data_R32 & 0xFF000000) >> 24;
//   g_Data_R8[1] = (g_Data_R32 & 0x00FF0000) >> 16;
//   g_Data_R8[2] = (g_Data_R32 & 0x0000FF00) >> 8;
//   g_Data_R8[3] = g_Data_R32 & 0x000000FF;
   
   // 填充串口数据
   TxBuff[0] = (g_Data_R32 & 0xFF000000) >> 24;
   TxBuff[1] = (g_Data_R32 & 0x00FF0000) >> 16;
   TxBuff[2] = (g_Data_R32 & 0x0000FF00) >> 8;
   TxBuff[3] = g_Data_R32 & 0x000000FF;
   
   g_Data_Flash_indexR = 0x0101;
   g_Data_R32 = ReadDataFlash(g_Data_Flash_indexR);
   TxBuff[5] = (g_Data_R32 & 0xFF000000) >> 24;
   TxBuff[6] = (g_Data_R32 & 0x00FF0000) >> 16;
   TxBuff[7] = (g_Data_R32 & 0x0000FF00) >> 8;
   TxBuff[8] = g_Data_R32 & 0x000000FF;
   
   // 发送串口数据
   UART2_SendData(TxBuff, 11);
   
   timerFlag = 0;
  }
  else
  {
     NOP();
  }
 }
 /* End user code. Do not edit comment generated here */
}

代码:myComFlash.rar
给一个在IAR中截图


最后说一下我对库函数的理解和困惑 
说的不对的欢迎指正

1 库函数每次读写是按一个双字(4个字节)的方式,有没有办法一次读取2个或者1个字节呢

2 库函数提供的参数不是实际的地址,而是地址索引。 在读写数据的时候,自动将0x0000映射到数据的实际地址0xF1000,将0x0001映射到0xF1004 ,而在擦除block的时候,参数直接是block的索引,将0x0000映射到block 0开始位置0xF1000,将0x0001映射到bolck 1开始位置0xF1400

3 我们的片子内部数据Flash大小为4K字节,共有4个block

4 谁有关于瑞萨的内部数据flash自编程的资料啊 共享下 我只在 RL78G14中文说明书.pdf 中看到 “有关自编程功能和 RL78/G14  自编程库的更多信息,请参阅  RL78  微控制器自编程库 01  类用户手册(R01AN0350E)  ”我连这个文件都找不到


院士
2012-08-28 21:18:09     打赏
22楼
我表示压力很大

高工
2012-08-28 22:35:42     打赏
23楼
恩? 不明白王总的意思

高工
2012-08-28 23:59:43     打赏
24楼
我也做过类似的串口转接头

高工
2012-08-29 00:40:22     打赏
25楼

高工
2012-08-29 10:59:54     打赏
26楼

使用按键中断控制蜂鸣器 利用Buzzer 的 PCLBUZ0
参考 andery  的帖子

Applilet3 的设置




主要代码

void  main(void)
{
 /* Start user code. Do not edit comment generated here */

 KEY_Enable();
 while (1U)
 {
  if(flag == 1)
  {
     
   PORT_ChangeP77Output(0);
   PCLBUZ0_Start();
  }
  else
  {
     PORT_ChangeP77Output(1);
      PCLBUZ0_Stop();
  }
  
 }
 /* End user code. Do not edit comment generated here */
}

运行图像 (注意由于没有合适的蜂鸣器 我是用示波器测试PCLBUZ0 引脚)



代码: myKeyBuzzer.rar


视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_4FF79E86EEC86A44_false_EEA982EE6B20F4D1_1/player.swf

高工
2012-08-29 18:00:11     打赏
27楼

使用RTOS 控制LED D2 P7.7
首先是移植 uCOS-II 
先到 官网上下载配合瑞萨的代码 
http://micrium.com/page/downloads/ports/renesas/renesas_rl78_family
而且这个代码使用的板子的芯片和我们的芯片正好是一样的 
但是附带的pdf文档和代码的版本不太一样
由于例子使用的开发板和我们的不一样,它是控制P6.2 P6.3 的LED灯 
下载完之后需要修改几个函数 
在 bsp.c 文件中 修改
void  BSP_LED_Off (CPU_INT08U led)
void  BSP_LED_On (CPU_INT08U led)
void  BSP_LED_Toggle (CPU_INT08U led)
在app.c的 main 函数 和 static  void  App_TaskStart (void *p_arg) 函数做针对LED的适当修改
最终要的 在  bsp.c 文件中 的 
void  BSP_PostInit (void)函数中 要添加
 // 设置P7.7 输出高电平
 P7 = 0x80U;
 // 设置P7.7 为输出口
 PM7 = 0x7F ;
否则无法点亮D2 估计是没有设置P7.7 口为输出的缘故



其次是移植embOS
这个在IAR的安装目录中其实已经有了 
C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\rl78\examples\Segger\embOS\YRPBRL78G13
只需要做很小的修改
同样的 在 BSP.c 文件中 修改于LED灯端口相关的变量即可
/****** Assign LEDs to Ports ****************************************/
#define LEDPORT_DATA  (P7)
#define LEDPORT_MODE  (PM7)
#define LED0_BIT      (7)

代码 : RTOS.rar


最后是移植FreeRTOS 还没接触 
在官网上下载文件 http://sourceforge.net/projects/freertos/files/
并且有说明 http://www.freertos.org/FreeRTOS-port-and-demo-for-Renesas-RL78-YRPBRL78G13-Promo-Board.html 
可能稍微需要修改下代码的路径
在使用E1 调试的时候 如果找不到板子 需要修改下ID

编译代码后下载到板子上
When executing correctly, the demo application will toggle the user LED every three seconds.  
如果没有错误的话 每隔3s LED 闪一次

代码: FreeRTOS.rar

其实我这次也是第一次尝试移植RTOS 以前都没试过 
我现在也只是知道如何控制LED灯 别的啥都不懂
欢迎指点


院士
2012-08-29 19:49:29     打赏
28楼
是一个非常好的开始~~

楼主 加油~~

高工
2012-08-30 01:09:38     打赏
29楼

实现RTC实时时钟并串口发送显示
参考了 andery88 的对 RTC 的设置
http://forum.eepw.com.cn/thread/220121/1
http://forum.eepw.com.cn/thread/218945/6#54





主要代码 main函数
void  main(void)
{
 /* Start user code. Do not edit comment generated here */
   UART2_Start();
 txBuf[2] = txBuf[5] ='-';
 txBuf[8] =' ';
 txBuf[11] = txBuf[14] = ':';
 txBuf[17] = '\r';
 txBuf[18] = '\n';
 // 设置时间 这个大家可以随便改哈
 SEC = _53_RTC_COUNTER_SEC;
 MIN = _06_RTC_COUNTER_MIN;
 HOUR = _11_RTC_COUNTER_HOUR;
 WEEK = _03_RTC_COUNTER_WEEK;
 DAY = _29_RTC_COUNTER_DAY;
 MONTH = _08_RTC_COUNTER_MONTH;
 YEAR = _12_RTC_COUNTER_YEAR;
 // 启动
 RTC_CounterEnable();
 // 启动中断
 RTC_ConstPeriodInterruptEnable(ONESEC);
 while (1U)
 {
  if(RTCFlag == 1)
  {
     RTCFlag = 0;
   // 闪烁一下LED灯
   P7 = P7PORT;
   P7PORT = (~P7PORT) & 0x80;
   // 得到一次数据
   RTC_CounterGet(&counterValue);
   // 转换到串口中 发送出去 参考例子demo
   BCD_COM(counterValue.Year, 0);
            BCD_COM(counterValue.Month, 1);
            BCD_COM(counterValue.Day, 2);
            BCD_COM(counterValue.Hour, 3);
            BCD_COM(counterValue.Min, 4);
            BCD_COM(counterValue.Sec, 5);
   
   UART2_SendData(txBuf, 19);
  }
  else
  {
     NOP();
  }
 }
 /* End user code. Do not edit comment generated here */
}

// 将值转换为串口发送的数据
void BCD_COM(UCHAR x, UCHAR index)
{
 UCHAR y;
 y = x >> 4;
 // 高位
    txBuf[index*3] = y + '0' ;
 // 低位
    txBuf[index*3 + 1 ] = (x & 0x0F) + '0';
}

运行截图


代码: myComRTC.rar


菜鸟
2012-08-30 09:03:35     打赏
30楼
可以用PFDL库,可以对字节操作,等斑竹再发技术贴

共61条 3/7 1 2 3 4 5 6 ›| 跳转至

回复

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