OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5060|回复: 2

分享瑞萨RL78单片机的ERROM

[复制链接]

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2021-6-3 22:26:58 | 显示全部楼层 |阅读模式
本帖最后由 jiangyy 于 2021-6-3 23:06 编辑

  分享最近调试ERROM的IIC时序及代码:
  1.配置图
   1.png
   2.png

  2.代码

  1. #include "bsp_errom.h"
  2. #include "bsp_delay.h"
  3. #include "r_cg_serial.h"
  4. #include "stdlib.h"
  5. #include "string.h"

  6. void FM24CL64MultiByteRead(uint8_t *pBuffer,uint8_t ReadAddr, uint16_t NumToRead)
  7. {
  8.     R_IICA0_Master_Send(ERROM_ADDR, &ReadAddr, 1, 200);
  9.         delay_ms(1);
  10.     R_IICA0_Master_Receive(ERROM_ADDR, pBuffer, NumToRead, 200);
  11.         delay_ms(1);
  12. }

  13. void FM24CL64MultiByteWrite(uint8_t *pBuffer, uint8_t WriteAddr, uint16_t NumToWrite)
  14. {
  15.     uint16_t i,j;
  16.     uint8_t *array = (uint8_t*)malloc(NumToWrite+1);
  17.     memset(array, 0, NumToWrite+1);
  18.     *array = WriteAddr;
  19.     for(i=0;i<NumToWrite;i++)
  20.     {
  21.        array[i+1]= pBuffer[i];
  22.     }
  23.     R_IICA0_Master_Send(ERROM_ADDR, array, NumToWrite+1, 200);
  24.     delay_ms(1);
  25.     free(array);
  26. }

  27. uint8_t iic_txbuf[10] = {0,};
  28. uint8_t iic_rxbuf[10] = {0,};
  29. void errom_test(void)
  30. {
  31.         uint8_t i = 0;
  32.         for(;i<10;i++)
  33.                 iic_txbuf[i] = 0x55;
  34.         FM24CL64MultiByteWrite(iic_txbuf,0x55,10);
  35.         delay_ms(2);
  36.         FM24CL64MultiByteRead(iic_rxbuf,0x55,10);
  37.         
  38.         R_UART0_Send(iic_rxbuf, 10);
  39. }
复制代码
3.调试结果   3.png


  为了避免malloc()和free()造成内存碎片,可以使用下面代码

  1. #include "bsp_errom.h"
  2. #include "bsp_delay.h"
  3. #include "r_cg_serial.h"
  4. #include "string.h"

  5. void FM24CL64MultiByteRead(uint8_t *pBuffer,uint8_t ReadAddr, uint16_t NumToRead)
  6. {
  7.     R_IICA0_Master_Send(ERROM_ADDR, &ReadAddr, 1, 200);
  8.         delay_ms(1);
  9.     R_IICA0_Master_Receive(ERROM_ADDR, pBuffer, NumToRead, 200);
  10.         delay_ms(1);
  11. }

  12. uint8_t FM24CL64MultiByteWrite(uint8_t *pBuffer, uint8_t WriteAddr, uint16_t NumToWrite)
  13. {
  14.     uint16_t i,j;
  15.     uint8_t buf[20];
  16.        
  17.         if(NumToWrite > 20)
  18.                 return 1;
  19.     memset(buf, 0, 20);
  20.        
  21.     *buf = WriteAddr;
  22.     for(i=0;i<NumToWrite;i++)
  23.     {
  24.        buf[i+1]= pBuffer[i];
  25.     }
  26.     R_IICA0_Master_Send(ERROM_ADDR, buf, NumToWrite+1, 200);
  27.     delay_ms(1);
  28.     return 0;
  29. }

  30. uint8_t iic_txbuf[10] = {0,};
  31. uint8_t iic_rxbuf[10] = {0,};
  32. void errom_test(void)
  33. {
  34.         uint8_t i = 0;
  35.         for(;i<10;i++)
  36.                 iic_txbuf[i] = 0x55;
  37.         FM24CL64MultiByteWrite(iic_txbuf,0x55,10);
  38.         delay_ms(2);
  39.         FM24CL64MultiByteRead(iic_rxbuf,0x55,10);
  40.        
  41.         R_UART0_Send(iic_rxbuf, 10);
  42. }
复制代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2021-6-3 23:07:43 | 显示全部楼层
有没有对内存管理有很好的算法,分享一下呢?主要是想移植到瑞萨单片机里面。
回复 支持 反对

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2021-6-4 15:41:30 | 显示全部楼层
有没有对瑞萨单片机熟悉的朋友。我想实现一个printf函数,但是调试发现无法打印数据,代码贴上:
  1. void printStr(char const * ch)
  2. {               
  3.         R_UART0_Send(ch, strlen(ch));
  4.         while(g_uart0_tx_count);
  5. }

  6. void u1_printf(char* fmt,...)  
  7. {  
  8.         uint16_t i,j;
  9.         va_list ap;
  10.         va_start(ap,fmt);
  11.         vsprintf((char*)usart1_tx_buf,fmt,ap);
  12.         va_end(ap);
  13.         i=strlen((const char*)usart1_tx_buf);
  14.         for(j=0;j<i;j++)
  15.         {
  16.                  R_UART0_Send(&usart1_tx_buf[j], 1);
  17.         }
  18. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表