0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RA6T2的IIC使用DTC读写eeprom

我快闭嘴 来源: 瑞萨MCU小百科 作者:瑞萨MCU小百科 2022-09-23 14:21 次阅读

介绍

客户在初次使用e2 studio开发程序的时候不知道如何使用IDE,本文以RA6T2为例子,详细地介绍了在一个新建的程序中,通过配置实现IIC对eeprom的读写。

在e2 studio中新建一个程序,点击configuration.xml文件打开配置界面。

设置IIC模块的时钟源,在IIC通信的时候用来给SCL提供时钟信号。打开文档查看PLL时钟的寄存器配置,PLL一共需要配置三个参数,分别是输入锁相环分频系数、时钟源、PLL倍频因子。

78b0bb64-3af6-11ed-9e49-dac502259ad0.png

点击Clocks配置时钟,这里使用了PLL倍频时钟,PLL倍频时钟可以选择主时钟或者内部高速振荡器作为时钟源,这里选用内部高速振荡器HOCO作为PLL倍频时钟源。

HOCO时钟为20M,PLL Div/2锁相环输入分频将时钟降为10M,PLL Mul x24.0倍频因子将时钟倍频为240M。配置IIC时钟源IICCLK Src,选择PLL作为时钟源,IICCLK Div/2输入分频将时钟降为120MHZ,IIC的时钟源则为120MHz。(要注意的是RA6T2的IIC时钟源要配置到60MHz以上)

791c7520-3af6-11ed-9e49-dac502259ad0.png

点击pins,配置IIC的pin引脚,RA6T2有两路IIC,分别是IIC0和IIC1,在Connectivity:IIC中可以配置相应的IIC引脚,这里选择的是IIC0配置。

RA6T2的IIC0一共可以选择5组IIC引脚(A~E),下图Pin Group Selection选择的是_B only,将操作模式Operation Mode设置为Enabled,使能B组IIC的引脚配置,这时候IIC对应的SCL0对应的引脚为PC10,SDA0对应的引脚为PC11。每一组IIC的引脚都是固定的,引脚编号也不一样,如果选择_A only,SCL0对应的引脚为PB06,SDA0对应的引脚为PB07。

7947d620-3af6-11ed-9e49-dac502259ad0.png

点击右边的设置按钮,并点击FSP Visualization 可以打开芯片的图形界面,在点击IIC0,在芯片的图形界面上就会显示出IIC0的B组引脚PC10和PC11在芯片中的位置。也可以点击芯片图形界面上的引脚配置相应的引脚功能。

79a1ee8a-3af6-11ed-9e49-dac502259ad0.png

点击Stacks,会出现下图所示的配置驱动代码的界面,e2 studio会根据用户的配置,自动生成相应驱动代码。点击New Stack新建一个Stack,在New Stack里面选择Connectivity配置通信类的驱动代码,在Connectivity的下一级目录中点击I2C Master(r_iic_b_master),生成IIC Master的驱动,在RA6T2中一个共有5种IIC类型可以选,这里使用IIC作为主机模式使用所以选择r_iic_b_master,r_iic_b_slave是将IIC设置成从机模式,r_sci_b_master是将通用串行接口SCI设置成简易IIC主机模式,其他两个是作为从机模式使用。

79f47646-3af6-11ed-9e49-dac502259ad0.png

点击图片上右上角红框框出来的设置和g_i2c_master0 I2C Master(r_iic_b_master),再点击属性界面,就可以调出IIC的配置界面。

Name是设置IIC模块的名称;Channel选IIC的0通道;Rate IIC的传输速度设置为标准模式;Rise Time上升沿时间为120ns(默认值);Fall time下降沿时间为120ns(默认值);Duty Cycle时钟计数周期为50(默认值);Slave Address从设备地址为0x50;Address Mode 7-Bit表示设备地址为7位;Timeout Mode IIC通信超时时间设置为短时间模式;Timeout during SCL Low Enable超时的时候SCL时钟线为低电平;Callback设置回调函数名;Interrupt Priority Level中断等级设置为12级;SCL0选择IIC时钟引脚;SDA0选择IIC数据引脚。

7be6e84e-3af6-11ed-9e49-dac502259ad0.png

DTC全称叫Data Transfer Controller(数据传送控制器),功能与DMA类似,点击Stacks,打开驱动配置界面,在配置好的g_i2c_master0 I2C Master(r_iic_b_master)模块下有两个小模块,分别是Add DTC Driver for Transmission[Optional]增加IIC的发送DTC功能,Add DTC Driver for Reception[Optional]增加IIC的接收DTC功能。左键点击Add DTC Driver for Transmission[Optional],弹出new->Transfer(r_dtc),左键点击Transfer(r_dtc)生成DTC配置文件。

7cb95270-3af6-11ed-9e49-dac502259ad0.png

在IIC的属性配置中,将DTC on Transmission and Reception设置成Enabled。

7d40a720-3af6-11ed-9e49-dac502259ad0.png

点击下图红框框出来的地方,可以查看和设置配置信息。g_transfer0是DTC模块名称;Normal表示使用正常模式;传输大小为1 Byte;目的地址固定;源地址递增;在发送完成后产生中断;以IIC的发送寄存器为空作为DTC的触发源。

7e0a25a0-3af6-11ed-9e49-dac502259ad0.png

左键点击红框内的Generate Project Content将配置好的信息生成相应的驱动代码。

7e556344-3af6-11ed-9e49-dac502259ad0.png

下图是经过属性配置后自动生成的IIC初始化代码,这个函数在工程目录下的ra->fsp->src->r_iic_b_master-> r_iic_b_master.c文件里面,函数调用方法如下:

fsp_err_t err;

err = R_IIC_B_MASTER_Open (&g_i2c_master0_ctrl, &g_i2c_master0_cfg);

R_IIC_B_MASTER_Open函数有一个fsp_err_t类型的返回值,如果函数调用成功,则会返回FSP_SUCCESS,否则返回其他错误提示。

7e8bee5a-3af6-11ed-9e49-dac502259ad0.png

函数里面需要传入两个参数,这个两个参数是在配置IIC的时候系统自动生成的,参数在工程目录下的ra_gen->hal_data.c文件里面。

g_i2c_master0_ctrl是用来记录IIC的状态信息,g_i2c_master0_cfg用来保存IIC的配置信息。

如果配置了DTC功能,在R_IIC_B_MASTER_Open函数里面会根据配置信息,选择以DTC的模式来通信。

7ec0c22e-3af6-11ed-9e49-dac502259ad0.png

7ed60f44-3af6-11ed-9e49-dac502259ad0.png

在初始化IIC完成后,就可以使用IIC主设备与其他的IIC从设备进行通信。例如下图使用RA6T2的IIC主模式往eeprom里面写入数据。

7f8707ea-3af6-11ed-9e49-dac502259ad0.png

代码向eeprom里面写入64字节的数据,IIC一共要发送67字节的数据,其中第一个字节是发送eeprom的设备地址,在R_IIC_B_MASTER_Write函数中已经写入IIC的设备地址了(配置IIC的时候填入的),所以还要再发送66个字节的数据;第二个和第三个数据是eeprom的存储地址;第4到第67是需要发送的数据,一共是64字节,代码上发送的是0~63的uint8_t类型的数据。

R_IIC_B_MASTER_Write是IIC主设备向从设备发送数据的函数,其中g_i2c_master0_ctrl是用来记录IIC的状态信息,在ra_gen->hal_data.c文件里面有声明;write_buffer是要发送的eeprom存储地址和数据;write_buffer_count表示要发送66字节的数据(不算设备地址);false表示发送完成后结束通信。最后要注意的是,要等待IIC发送数据完成、给一个延迟(eeprom写入数据完成后通常需要一个短暂的延迟后才能进行下一步操作)。

另外,使用RA6T2的IIC主模式往eeprom里面读取数据的操作如下图所示。

7fb72650-3af6-11ed-9e49-dac502259ad0.png

代码向eeprom里面读取64字节的数据。read_buffer_ID是为2个字节,这两个字节对应的是需要读取的eeprom数据的存储位置;read_buffer 是一个uint8_t类型的数组,用来存储从eeprom读取出来的64字节的数据;read_buffer_count表示要从eeprom里面读取64个字节的数据。

想要读取eeprom里面的数据,要先通过IIC发送设备地址,以及需要读取的eeprom存储地址,下图代码通过R_IIC_B_MASTER_Write函数向IIC发送了设备地址和read_buffer_ID(2个字节的eeprom存储地址),这时候通信还没有结束,所以R_IIC_B_MASTER_Write函数的最后一个参数填的是ture,继续进行通信,validate_i2c_event函数是等待eeprom应答,当eeprom应答后,再通过R_IIC_B_MASTER_Read函数读取数据,从R_IIC_B_MASTER_Write函数写入的地址开始计算,递增读取eeprom里面的数据,一个64字节的数据。

结论

通过上面的设置实现了RA6T2的IIC使用DTC读写eeprom。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • EEPROM
    +关注

    关注

    9

    文章

    926

    浏览量

    80306
  • IIC
    IIC
    +关注

    关注

    11

    文章

    285

    浏览量

    37795

原文标题:RA6T2的IIC使用DTC读写eeprom

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32做IIC读写程序,利用HAL库对IIC读写遇到的疑问求解

    最近在做IIC读写程序,用到HAL库,发现利用HAL库 对IIC读写问题,求助一下! 在HA库对IIC
    发表于 04-24 06:27

    stm8s105k4t6模拟IIC读写EEPROM

    stm8s105k4t6模拟IIC读写EEPROM
    发表于 03-13 17:38

    硬件IIC读写EEPROM

    硬件IIC读写EEPROM一. I2C协议简介I2C物理层的特点I2C的协议层1. I
    发表于 08-20 06:26

    IIC读写EEPROM调试出错总结

    一.IIC读写EEPROM调试出错总结1.有些平台IIC的地址,需要左移一位,有些平台IIC的地址不需要左移,这个是什么情况a.这个是因为有
    发表于 01-12 08:28

    linux下使用IIC总线读写EEPROM的实现程序

    1,本文给出了 linux 下使用 IIC 总线读写 EEPROM 的实现程序。 2 本文给出了在编程中遇到的几种非常隐蔽的错误的解决方法。 3,本文的读写程序非常通用
    发表于 01-06 11:05 17次下载

    HL配套C实验例程iic--24c02_EEPROM读写

    HL配套C实验例程iic--24c02EEPROM读写,配合开发板学习效果更好。
    发表于 04-11 17:04 12次下载

    RA6T2数据手册(英)

    RA6T2数据手册(英)
    发表于 11-07 19:50 1次下载
    <b class='flag-5'>RA6T2</b>数据手册(英)

    RA6T2硬件用户手册(英)

    RA6T2硬件用户手册(英)
    发表于 11-07 19:50 0次下载
    <b class='flag-5'>RA6T2</b>硬件用户手册(英)

    RA6T2数据手册(中英)

    RA6T2数据手册(中英)
    发表于 11-07 19:50 2次下载
    <b class='flag-5'>RA6T2</b>数据手册(中英)

    RA6T2硬件用户手册(中英)

    RA6T2硬件用户手册(中英)
    发表于 11-07 19:50 1次下载
    <b class='flag-5'>RA6T2</b>硬件用户手册(中英)

    RA6T2 组数据表

    RA6T2 组数据表
    发表于 01-10 19:05 0次下载
    <b class='flag-5'>RA6T2</b> 组数据表

    RA6T2 组用户手册:硬件

    RA6T2 组用户手册:硬件
    发表于 01-10 19:05 0次下载
    <b class='flag-5'>RA6T2</b> 组用户手册:硬件

    基于51单片机的iic--24c02EEPROM读写程序

    基于51单片机的iic--24c02EEPROM读写例程源代码
    发表于 05-12 16:44 0次下载

    RA6T2组数据表

    RA6T2 组数据表
    发表于 06-30 19:51 0次下载
    <b class='flag-5'>RA6T2</b>组数据表

    RA6T2组用户手册:硬件

    RA6T2 组用户手册:硬件
    发表于 06-30 19:51 0次下载
    <b class='flag-5'>RA6T2</b>组用户手册:硬件