0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RA6T2的IIC使用DTC讀寫eeprom

我快閉嘴 ? 來源: 瑞薩MCU小百科 ? 作者:瑞薩MCU小百科 ? 2022-09-23 14:21 ? 次閱讀

介紹

客戶在初次使用e2 studio開發(fā)程序的時候不知道如何使用IDE,本文以RA6T2為例子,詳細地介紹了在一個新建的程序中,通過配置實現(xiàn)IIC對eeprom的讀寫。

在e2 studio中新建一個程序,點擊configuration.xml文件打開配置界面。

設置IIC模塊的時鐘源,在IIC通信的時候用來給SCL提供時鐘信號。打開文檔查看PLL時鐘的寄存器配置,PLL一共需要配置三個參數(shù),分別是輸入鎖相環(huán)分頻系數(shù)、時鐘源、PLL倍頻因子。

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

點擊Clocks配置時鐘,這里使用了PLL倍頻時鐘,PLL倍頻時鐘可以選擇主時鐘或者內部高速振蕩器作為時鐘源,這里選用內部高速振蕩器HOCO作為PLL倍頻時鐘源。

HOCO時鐘為20M,PLL Div/2鎖相環(huán)輸入分頻將時鐘降為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,會出現(xiàn)下圖所示的配置驅動代碼的界面,e2 studio會根據(jù)用戶的配置,自動生成相應驅動代碼。點擊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時鐘計數(shù)周期為50(默認值);Slave Address從設備地址為0x50;Address Mode 7-Bit表示設備地址為7位;Timeout Mode IIC通信超時時間設置為短時間模式;Timeout during SCL Low Enable超時的時候SCL時鐘線為低電平;Callback設置回調函數(shù)名;Interrupt Priority Level中斷等級設置為12級;SCL0選擇IIC時鐘引腳;SDA0選擇IIC數(shù)據(jù)引腳。

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

DTC全稱叫Data Transfer Controller(數(shù)據(jù)傳送控制器),功能與DMA類似,點擊Stacks,打開驅動配置界面,在配置好的g_i2c_master0 I2C Master(r_iic_b_master)模塊下有兩個小模塊,分別是Add DTC Driver for Transmission[Optional]增加IIC的發(fā)送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;目的地址固定;源地址遞增;在發(fā)送完成后產生中斷;以IIC的發(fā)送寄存器為空作為DTC的觸發(fā)源。

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

左鍵點擊紅框內的Generate Project Content將配置好的信息生成相應的驅動代碼。

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

下圖是經過屬性配置后自動生成的IIC初始化代碼,這個函數(shù)在工程目錄下的ra->fsp->src->r_iic_b_master-> r_iic_b_master.c文件里面,函數(shù)調用方法如下:

fsp_err_t err;

err = R_IIC_B_MASTER_Open (&g_i2c_master0_ctrl, &g_i2c_master0_cfg);

R_IIC_B_MASTER_Open函數(shù)有一個fsp_err_t類型的返回值,如果函數(shù)調用成功,則會返回FSP_SUCCESS,否則返回其他錯誤提示。

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

函數(shù)里面需要傳入兩個參數(shù),這個兩個參數(shù)是在配置IIC的時候系統(tǒng)自動生成的,參數(shù)在工程目錄下的ra_gen->hal_data.c文件里面。

g_i2c_master0_ctrl是用來記錄IIC的狀態(tài)信息,g_i2c_master0_cfg用來保存IIC的配置信息。

如果配置了DTC功能,在R_IIC_B_MASTER_Open函數(shù)里面會根據(jù)配置信息,選擇以DTC的模式來通信。

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

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

在初始化IIC完成后,就可以使用IIC主設備與其他的IIC從設備進行通信。例如下圖使用RA6T2的IIC主模式往eeprom里面寫入數(shù)據(jù)。

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

代碼向eeprom里面寫入64字節(jié)的數(shù)據(jù),IIC一共要發(fā)送67字節(jié)的數(shù)據(jù),其中第一個字節(jié)是發(fā)送eeprom的設備地址,在R_IIC_B_MASTER_Write函數(shù)中已經寫入IIC的設備地址了(配置IIC的時候填入的),所以還要再發(fā)送66個字節(jié)的數(shù)據(jù);第二個和第三個數(shù)據(jù)是eeprom的存儲地址;第4到第67是需要發(fā)送的數(shù)據(jù),一共是64字節(jié),代碼上發(fā)送的是0~63的uint8_t類型的數(shù)據(jù)。

R_IIC_B_MASTER_Write是IIC主設備向從設備發(fā)送數(shù)據(jù)的函數(shù),其中g_i2c_master0_ctrl是用來記錄IIC的狀態(tài)信息,在ra_gen->hal_data.c文件里面有聲明;write_buffer是要發(fā)送的eeprom存儲地址和數(shù)據(jù);write_buffer_count表示要發(fā)送66字節(jié)的數(shù)據(jù)(不算設備地址);false表示發(fā)送完成后結束通信。最后要注意的是,要等待IIC發(fā)送數(shù)據(jù)完成、給一個延遲(eeprom寫入數(shù)據(jù)完成后通常需要一個短暫的延遲后才能進行下一步操作)。

另外,使用RA6T2的IIC主模式往eeprom里面讀取數(shù)據(jù)的操作如下圖所示。

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

代碼向eeprom里面讀取64字節(jié)的數(shù)據(jù)。read_buffer_ID是為2個字節(jié),這兩個字節(jié)對應的是需要讀取的eeprom數(shù)據(jù)的存儲位置;read_buffer 是一個uint8_t類型的數(shù)組,用來存儲從eeprom讀取出來的64字節(jié)的數(shù)據(jù);read_buffer_count表示要從eeprom里面讀取64個字節(jié)的數(shù)據(jù)。

想要讀取eeprom里面的數(shù)據(jù),要先通過IIC發(fā)送設備地址,以及需要讀取的eeprom存儲地址,下圖代碼通過R_IIC_B_MASTER_Write函數(shù)向IIC發(fā)送了設備地址和read_buffer_ID(2個字節(jié)的eeprom存儲地址),這時候通信還沒有結束,所以R_IIC_B_MASTER_Write函數(shù)的最后一個參數(shù)填的是ture,繼續(xù)進行通信,validate_i2c_event函數(shù)是等待eeprom應答,當eeprom應答后,再通過R_IIC_B_MASTER_Read函數(shù)讀取數(shù)據(jù),從R_IIC_B_MASTER_Write函數(shù)寫入的地址開始計算,遞增讀取eeprom里面的數(shù)據(jù),一個64字節(jié)的數(shù)據(jù)。

結論

通過上面的設置實現(xiàn)了RA6T2的IIC使用DTC讀寫eeprom。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • EEPROM
    +關注

    關注

    9

    文章

    1020

    瀏覽量

    81596
  • IIC
    IIC
    +關注

    關注

    11

    文章

    300

    瀏覽量

    38333

原文標題:RA6T2的IIC使用DTC讀寫eeprom

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RA6T2數(shù)據(jù)手冊(英)

    RA6T2數(shù)據(jù)手冊(英)
    發(fā)表于 11-07 19:50 ?1次下載
    <b class='flag-5'>RA6T2</b>數(shù)據(jù)手冊(英)

    RA6T2硬件用戶手冊(英)

    RA6T2硬件用戶手冊(英)
    發(fā)表于 11-07 19:50 ?0次下載
    <b class='flag-5'>RA6T2</b>硬件用戶手冊(英)

    RA6T2數(shù)據(jù)手冊(中英)

    RA6T2數(shù)據(jù)手冊(中英)
    發(fā)表于 11-07 19:50 ?2次下載
    <b class='flag-5'>RA6T2</b>數(shù)據(jù)手冊(中英)

    RA6T2 組數(shù)據(jù)表

    RA6T2 組數(shù)據(jù)表
    發(fā)表于 01-10 19:05 ?0次下載
    <b class='flag-5'>RA6T2</b> 組數(shù)據(jù)表

    RA6T2 組用戶手冊:硬件

    RA6T2 組用戶手冊:硬件
    發(fā)表于 01-10 19:05 ?0次下載
    <b class='flag-5'>RA6T2</b> 組用戶手冊:硬件

    RA6T2組數(shù)據(jù)表

    RA6T2 組數(shù)據(jù)表
    發(fā)表于 06-30 19:51 ?0次下載
    <b class='flag-5'>RA6T2</b>組數(shù)據(jù)表

    RA6T2組用戶手冊:硬件

    RA6T2 組用戶手冊:硬件
    發(fā)表于 06-30 19:51 ?0次下載
    <b class='flag-5'>RA6T2</b>組用戶手冊:硬件

    RA6T2的16位模數(shù)轉換器操作 [4] 配置RA6T2 ADC模塊 (1)

    RA6T2的16位模數(shù)轉換器操作 [4] 配置RA6T2 ADC模塊 (1)
    的頭像 發(fā)表于 03-29 08:05 ?362次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [4] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (1)

    RA6T2的16位模數(shù)轉換器操作 [5] 配置RA6T2 ADC模塊 (2)

    RA6T2的16位模數(shù)轉換器操作 [5] 配置RA6T2 ADC模塊 (2)
    的頭像 發(fā)表于 04-04 08:05 ?354次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [5] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (<b class='flag-5'>2</b>)

    RA6T2的16位模數(shù)轉換器操作 [6] 配置RA6T2 ADC模塊 (3)

    RA6T2的16位模數(shù)轉換器操作 [6] 配置RA6T2 ADC模塊 (3)
    的頭像 發(fā)表于 04-12 08:06 ?304次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [<b class='flag-5'>6</b>] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (3)

    RA6T2的16位模數(shù)轉換器操作 [7] 配置RA6T2 ADC模塊 (4)

    RA6T2的16位模數(shù)轉換器操作 [7] 配置RA6T2 ADC模塊 (4)
    的頭像 發(fā)表于 04-20 08:06 ?354次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [7] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (4)

    RA6T2的16位模數(shù)轉換器操作 [8] 配置RA6T2 ADC模塊 (5)

    RA6T2的16位模數(shù)轉換器操作 [8] 配置RA6T2 ADC模塊 (5)
    的頭像 發(fā)表于 04-29 08:08 ?378次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [8] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (5)

    RA6T2的16位模數(shù)轉換器操作 [9] 配置RA6T2 ADC模塊 (6)

    RA6T2的16位模數(shù)轉換器操作 [9] 配置RA6T2 ADC模塊 (6)
    的頭像 發(fā)表于 05-08 08:06 ?373次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [9] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (<b class='flag-5'>6</b>)

    RA6T2的16位模數(shù)轉換器操作 [10] 配置RA6T2 ADC模塊 (7)

    RA6T2的16位模數(shù)轉換器操作 [10] 配置RA6T2 ADC模塊 (7)
    的頭像 發(fā)表于 05-15 08:06 ?368次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [10] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (7)

    RA6T2的16位模數(shù)轉換器操作 [11] 配置RA6T2 ADC模塊 (8)

    RA6T2的16位模數(shù)轉換器操作 [11] 配置RA6T2 ADC模塊 (8)
    的頭像 發(fā)表于 05-24 08:06 ?362次閱讀
    <b class='flag-5'>RA6T2</b>的16位模數(shù)轉換器操作 [11] 配置<b class='flag-5'>RA6T2</b> ADC模塊 (8)