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

    文章

    1010

    浏览量

    81509
  • IIC
    IIC
    +关注

    关注

    11

    文章

    300

    浏览量

    38300

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

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

收藏 人收藏

    评论

    相关推荐

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

    RA6T2 组用户手册:硬件

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

    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>组用户手册:硬件

    RA6T2的16位模数转换器操作 [4] 配置RA6T2 ADC模块 (1)

    RA6T2的16位模数转换器操作 [4] 配置RA6T2 ADC模块 (1)
    的头像 发表于 03-29 08:05 342次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [4] 配置<b class='flag-5'>RA6T2</b> ADC模块 (1)

    RA6T2的16位模数转换器操作 [5] 配置RA6T2 ADC模块 (2)

    RA6T2的16位模数转换器操作 [5] 配置RA6T2 ADC模块 (2)
    的头像 发表于 04-04 08:05 338次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [5] 配置<b class='flag-5'>RA6T2</b> ADC模块 (<b class='flag-5'>2</b>)

    RA6T2的16位模数转换器操作 [6] 配置RA6T2 ADC模块 (3)

    RA6T2的16位模数转换器操作 [6] 配置RA6T2 ADC模块 (3)
    的头像 发表于 04-12 08:06 286次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [<b class='flag-5'>6</b>] 配置<b class='flag-5'>RA6T2</b> ADC模块 (3)

    RA6T2的16位模数转换器操作 [7] 配置RA6T2 ADC模块 (4)

    RA6T2的16位模数转换器操作 [7] 配置RA6T2 ADC模块 (4)
    的头像 发表于 04-20 08:06 334次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [7] 配置<b class='flag-5'>RA6T2</b> ADC模块 (4)

    RA6T2的16位模数转换器操作 [8] 配置RA6T2 ADC模块 (5)

    RA6T2的16位模数转换器操作 [8] 配置RA6T2 ADC模块 (5)
    的头像 发表于 04-29 08:08 355次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [8] 配置<b class='flag-5'>RA6T2</b> ADC模块 (5)

    RA6T2的16位模数转换器操作 [9] 配置RA6T2 ADC模块 (6)

    RA6T2的16位模数转换器操作 [9] 配置RA6T2 ADC模块 (6)
    的头像 发表于 05-08 08:06 353次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [9] 配置<b class='flag-5'>RA6T2</b> ADC模块 (<b class='flag-5'>6</b>)

    RA6T2的16位模数转换器操作 [10] 配置RA6T2 ADC模块 (7)

    RA6T2的16位模数转换器操作 [10] 配置RA6T2 ADC模块 (7)
    的头像 发表于 05-15 08:06 339次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [10] 配置<b class='flag-5'>RA6T2</b> ADC模块 (7)

    RA6T2的16位模数转换器操作 [11] 配置RA6T2 ADC模块 (8)

    RA6T2的16位模数转换器操作 [11] 配置RA6T2 ADC模块 (8)
    的头像 发表于 05-24 08:06 333次阅读
    <b class='flag-5'>RA6T2</b>的16位模数转换器操作 [11] 配置<b class='flag-5'>RA6T2</b> ADC模块 (8)