介紹
客戶在初次使用e2 studio開發(fā)程序的時候不知道如何使用IDE,本文以RA6T2為例子,詳細地介紹了在一個新建的程序中,通過配置實現(xiàn)IIC對eeprom的讀寫。
在e2 studio中新建一個程序,點擊configuration.xml文件打開配置界面。
設置IIC模塊的時鐘源,在IIC通信的時候用來給SCL提供時鐘信號。打開文檔查看PLL時鐘的寄存器配置,PLL一共需要配置三個參數(shù),分別是輸入鎖相環(huán)分頻系數(shù)、時鐘源、PLL倍頻因子。
點擊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以上)
點擊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。
點擊右邊的設置按鈕,并點擊FSP Visualization 可以打開芯片的圖形界面,在點擊IIC0,在芯片的圖形界面上就會顯示出IIC0的B組引腳PC10和PC11在芯片中的位置。也可以點擊芯片圖形界面上的引腳配置相應的引腳功能。
點擊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主機模式,其他兩個是作為從機模式使用。
點擊圖片上右上角紅框框出來的設置和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ù)引腳。
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配置文件。
在IIC的屬性配置中,將DTC on Transmission and Reception設置成Enabled。
點擊下圖紅框框出來的地方,可以查看和設置配置信息。g_transfer0是DTC模塊名稱;Normal表示使用正常模式;傳輸大小為1 Byte;目的地址固定;源地址遞增;在發(fā)送完成后產生中斷;以IIC的發(fā)送寄存器為空作為DTC的觸發(fā)源。
左鍵點擊紅框內的Generate Project Content將配置好的信息生成相應的驅動代碼。
下圖是經過屬性配置后自動生成的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,否則返回其他錯誤提示。
函數(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的模式來通信。
在初始化IIC完成后,就可以使用IIC主設備與其他的IIC從設備進行通信。例如下圖使用RA6T2的IIC主模式往eeprom里面寫入數(shù)據(jù)。
代碼向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ù)的操作如下圖所示。
代碼向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。
審核編輯:湯梓紅
-
EEPROM
+關注
關注
9文章
1020瀏覽量
81596 -
IIC
+關注
關注
11文章
300瀏覽量
38333
原文標題:RA6T2的IIC使用DTC讀寫eeprom
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論