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

共39条 2/4 1 2 3 4 跳转至
高工
2012-08-28 01:16:04     打赏
11楼
实现定时器每隔0.5s 跑马灯
利用了P2口 代码如下

int RunDirect = 0; // 移动方向

main函数

void  main(void)
{
 /* Start user code. Do not edit comment generated here */
   UCHAR LEDS = 0xFE;  // 先点亮一个灯
 TAU0_Channel0_Start();
 while (1U)
 {
  if(timerflag)
  {
     P2 = LEDS;
   if(RunDirect)
   {
     LEDS >>= 1;
     LEDS |= 0x80;
     if(LEDS == 0xFF) // 0b11111111
    {
     LEDS = 0xFD; // 0b11111101
     RunDirect = 0;
    }
   }
   else
   {
      LEDS <<= 1;
    LEDS |= 0x01;
    if(LEDS == 0xFF) // 0b11111111
    {
     LEDS = 0xBF; // 0b10111111
     RunDirect = 1;
    }    
   }
   
   timerflag = 0;
  }
  else
  {
     NOP();
  }
 }
 /* End user code. Do not edit comment generated here */
}

代码: myRunLEDs.rar

图片等我找个相机
先传一个调试的截图


补充一句 
在初始化P2口之后 
要记得在main函数中加入一句话 
 // very important !!
 ADPC = _01_ADPC_DI_ON;
否则输出电平有问题
之前没有实际调试 没发现这个这问题
传张照片


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

高工
2012-08-28 20:51:53     打赏
12楼

利用例子中自带的 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 22:35:42     打赏
13楼
恩? 不明白王总的意思

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

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

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

使用按键中断控制蜂鸣器 利用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     打赏
17楼

使用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-30 01:09:38     打赏
18楼

实现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:18:34     打赏
19楼

PFDL库 是什么从哪得到 还有使用方法 呢? 谢谢!


高工
2012-08-31 01:38:20     打赏
20楼

仿照 GUI Demo Source Code 实现了低功耗的 HALT 和 STOP 模式
在进入STOP 模式后 开启了外部中断 在用户手册上有说明

这样在串口RX 引脚上有数据的时候 恢复到正常模式 
但这样话容易引发串口接收数据错误 
对这个bug的处理我做的不好 只是勉强实现了功能 
同时发现 在调试的时候 如果全速运行 哪怕我没有设置断点 也会自动进入下面的中断


不知道原因是什么

实际测试
正常模式 电流约为6.4mA


正常模式下 串口发送 '2'  进入HALT 模式  电流约为2.4 mA


正常模式下 串口发送 '1'  进入STOP模式  电流约为1.8 mA


貌似我这个结果比数据表中的大啊 求高人指点


代码 myHALT.rar

PS: 悲催啊 后来发现是我的mA表量程调的太大了 而且 没有设置外部晶振


共39条 2/4 1 2 3 4 跳转至

回复

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