介紹
客戶(hù)在初次使用e2 studio開(kāi)發(fā)程序的時(shí)候不知道如何使用IDE,本文以RA6T2為例子,詳細(xì)地介紹了在一個(gè)新建的程序中,通過(guò)配置實(shí)現(xiàn)IIC對(duì)eeprom的讀寫(xiě)。
在e2 studio中新建一個(gè)程序,點(diǎn)擊configuration.xml文件打開(kāi)配置界面。
設(shè)置IIC模塊的時(shí)鐘源,在IIC通信的時(shí)候用來(lái)給SCL提供時(shí)鐘信號(hào)。打開(kāi)文檔查看PLL時(shí)鐘的寄存器配置,PLL一共需要配置三個(gè)參數(shù),分別是輸入鎖相環(huán)分頻系數(shù)、時(shí)鐘源、PLL倍頻因子。
點(diǎn)擊Clocks配置時(shí)鐘,這里使用了PLL倍頻時(shí)鐘,PLL倍頻時(shí)鐘可以選擇主時(shí)鐘或者內(nèi)部高速振蕩器作為時(shí)鐘源,這里選用內(nèi)部高速振蕩器HOCO作為PLL倍頻時(shí)鐘源。
HOCO時(shí)鐘為20M,PLL Div/2鎖相環(huán)輸入分頻將時(shí)鐘降為10M,PLL Mul x24.0倍頻因子將時(shí)鐘倍頻為240M。配置IIC時(shí)鐘源IICCLK Src,選擇PLL作為時(shí)鐘源,IICCLK Div/2輸入分頻將時(shí)鐘降為120MHZ,IIC的時(shí)鐘源則為120MHz。(要注意的是RA6T2的IIC時(shí)鐘源要配置到60MHz以上)
點(diǎn)擊pins,配置IIC的pin引腳,RA6T2有兩路IIC,分別是IIC0和IIC1,在Connectivity:IIC中可以配置相應(yīng)的IIC引腳,這里選擇的是IIC0配置。
RA6T2的IIC0一共可以選擇5組IIC引腳(A~E),下圖Pin Group Selection選擇的是_B only,將操作模式Operation Mode設(shè)置為Enabled,使能B組IIC的引腳配置,這時(shí)候IIC對(duì)應(yīng)的SCL0對(duì)應(yīng)的引腳為PC10,SDA0對(duì)應(yīng)的引腳為PC11。每一組IIC的引腳都是固定的,引腳編號(hào)也不一樣,如果選擇_A only,SCL0對(duì)應(yīng)的引腳為PB06,SDA0對(duì)應(yīng)的引腳為PB07。
點(diǎn)擊右邊的設(shè)置按鈕,并點(diǎn)擊FSP Visualization 可以打開(kāi)芯片的圖形界面,在點(diǎn)擊IIC0,在芯片的圖形界面上就會(huì)顯示出IIC0的B組引腳PC10和PC11在芯片中的位置。也可以點(diǎn)擊芯片圖形界面上的引腳配置相應(yīng)的引腳功能。
點(diǎn)擊Stacks,會(huì)出現(xiàn)下圖所示的配置驅(qū)動(dòng)代碼的界面,e2 studio會(huì)根據(jù)用戶(hù)的配置,自動(dòng)生成相應(yīng)驅(qū)動(dòng)代碼。點(diǎn)擊New Stack新建一個(gè)Stack,在New Stack里面選擇Connectivity配置通信類(lèi)的驅(qū)動(dòng)代碼,在Connectivity的下一級(jí)目錄中點(diǎn)擊I2C Master(r_iic_b_master),生成IIC Master的驅(qū)動(dòng),在RA6T2中一個(gè)共有5種IIC類(lèi)型可以選,這里使用IIC作為主機(jī)模式使用所以選擇r_iic_b_master,r_iic_b_slave是將IIC設(shè)置成從機(jī)模式,r_sci_b_master是將通用串行接口SCI設(shè)置成簡(jiǎn)易IIC主機(jī)模式,其他兩個(gè)是作為從機(jī)模式使用。
點(diǎn)擊圖片上右上角紅框框出來(lái)的設(shè)置和g_i2c_master0 I2C Master(r_iic_b_master),再點(diǎn)擊屬性界面,就可以調(diào)出IIC的配置界面。
Name是設(shè)置IIC模塊的名稱(chēng);Channel選IIC的0通道;Rate IIC的傳輸速度設(shè)置為標(biāo)準(zhǔn)模式;Rise Time上升沿時(shí)間為120ns(默認(rèn)值);Fall time下降沿時(shí)間為120ns(默認(rèn)值);Duty Cycle時(shí)鐘計(jì)數(shù)周期為50(默認(rèn)值);Slave Address從設(shè)備地址為0x50;Address Mode 7-Bit表示設(shè)備地址為7位;Timeout Mode IIC通信超時(shí)時(shí)間設(shè)置為短時(shí)間模式;Timeout during SCL Low Enable超時(shí)的時(shí)候SCL時(shí)鐘線為低電平;Callback設(shè)置回調(diào)函數(shù)名;Interrupt Priority Level中斷等級(jí)設(shè)置為12級(jí);SCL0選擇IIC時(shí)鐘引腳;SDA0選擇IIC數(shù)據(jù)引腳。
DTC全稱(chēng)叫Data Transfer Controller(數(shù)據(jù)傳送控制器),功能與DMA類(lèi)似,點(diǎn)擊Stacks,打開(kāi)驅(qū)動(dòng)配置界面,在配置好的g_i2c_master0 I2C Master(r_iic_b_master)模塊下有兩個(gè)小模塊,分別是Add DTC Driver for Transmission[Optional]增加IIC的發(fā)送DTC功能,Add DTC Driver for Reception[Optional]增加IIC的接收DTC功能。左鍵點(diǎn)擊Add DTC Driver for Transmission[Optional],彈出new->Transfer(r_dtc),左鍵點(diǎn)擊Transfer(r_dtc)生成DTC配置文件。
在IIC的屬性配置中,將DTC on Transmission and Reception設(shè)置成Enabled。
點(diǎn)擊下圖紅框框出來(lái)的地方,可以查看和設(shè)置配置信息。g_transfer0是DTC模塊名稱(chēng);Normal表示使用正常模式;傳輸大小為1 Byte;目的地址固定;源地址遞增;在發(fā)送完成后產(chǎn)生中斷;以IIC的發(fā)送寄存器為空作為DTC的觸發(fā)源。
左鍵點(diǎn)擊紅框內(nèi)的Generate Project Content將配置好的信息生成相應(yīng)的驅(qū)動(dòng)代碼。
下圖是經(jīng)過(guò)屬性配置后自動(dòng)生成的IIC初始化代碼,這個(gè)函數(shù)在工程目錄下的ra->fsp->src->r_iic_b_master-> r_iic_b_master.c文件里面,函數(shù)調(diào)用方法如下:
fsp_err_t err;
err = R_IIC_B_MASTER_Open (&g_i2c_master0_ctrl, &g_i2c_master0_cfg);
R_IIC_B_MASTER_Open函數(shù)有一個(gè)fsp_err_t類(lèi)型的返回值,如果函數(shù)調(diào)用成功,則會(huì)返回FSP_SUCCESS,否則返回其他錯(cuò)誤提示。
函數(shù)里面需要傳入兩個(gè)參數(shù),這個(gè)兩個(gè)參數(shù)是在配置IIC的時(shí)候系統(tǒng)自動(dòng)生成的,參數(shù)在工程目錄下的ra_gen->hal_data.c文件里面。
g_i2c_master0_ctrl是用來(lái)記錄IIC的狀態(tài)信息,g_i2c_master0_cfg用來(lái)保存IIC的配置信息。
如果配置了DTC功能,在R_IIC_B_MASTER_Open函數(shù)里面會(huì)根據(jù)配置信息,選擇以DTC的模式來(lái)通信。
在初始化IIC完成后,就可以使用IIC主設(shè)備與其他的IIC從設(shè)備進(jìn)行通信。例如下圖使用RA6T2的IIC主模式往eeprom里面寫(xiě)入數(shù)據(jù)。
代碼向eeprom里面寫(xiě)入64字節(jié)的數(shù)據(jù),IIC一共要發(fā)送67字節(jié)的數(shù)據(jù),其中第一個(gè)字節(jié)是發(fā)送eeprom的設(shè)備地址,在R_IIC_B_MASTER_Write函數(shù)中已經(jīng)寫(xiě)入IIC的設(shè)備地址了(配置IIC的時(shí)候填入的),所以還要再發(fā)送66個(gè)字節(jié)的數(shù)據(jù);第二個(gè)和第三個(gè)數(shù)據(jù)是eeprom的存儲(chǔ)地址;第4到第67是需要發(fā)送的數(shù)據(jù),一共是64字節(jié),代碼上發(fā)送的是0~63的uint8_t類(lèi)型的數(shù)據(jù)。
R_IIC_B_MASTER_Write是IIC主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù)的函數(shù),其中g(shù)_i2c_master0_ctrl是用來(lái)記錄IIC的狀態(tài)信息,在ra_gen->hal_data.c文件里面有聲明;write_buffer是要發(fā)送的eeprom存儲(chǔ)地址和數(shù)據(jù);write_buffer_count表示要發(fā)送66字節(jié)的數(shù)據(jù)(不算設(shè)備地址);false表示發(fā)送完成后結(jié)束通信。最后要注意的是,要等待IIC發(fā)送數(shù)據(jù)完成、給一個(gè)延遲(eeprom寫(xiě)入數(shù)據(jù)完成后通常需要一個(gè)短暫的延遲后才能進(jìn)行下一步操作)。
另外,使用RA6T2的IIC主模式往eeprom里面讀取數(shù)據(jù)的操作如下圖所示。
代碼向eeprom里面讀取64字節(jié)的數(shù)據(jù)。read_buffer_ID是為2個(gè)字節(jié),這兩個(gè)字節(jié)對(duì)應(yīng)的是需要讀取的eeprom數(shù)據(jù)的存儲(chǔ)位置;read_buffer 是一個(gè)uint8_t類(lèi)型的數(shù)組,用來(lái)存儲(chǔ)從eeprom讀取出來(lái)的64字節(jié)的數(shù)據(jù);read_buffer_count表示要從eeprom里面讀取64個(gè)字節(jié)的數(shù)據(jù)。
想要讀取eeprom里面的數(shù)據(jù),要先通過(guò)IIC發(fā)送設(shè)備地址,以及需要讀取的eeprom存儲(chǔ)地址,下圖代碼通過(guò)R_IIC_B_MASTER_Write函數(shù)向IIC發(fā)送了設(shè)備地址和read_buffer_ID(2個(gè)字節(jié)的eeprom存儲(chǔ)地址),這時(shí)候通信還沒(méi)有結(jié)束,所以R_IIC_B_MASTER_Write函數(shù)的最后一個(gè)參數(shù)填的是ture,繼續(xù)進(jìn)行通信,validate_i2c_event函數(shù)是等待eeprom應(yīng)答,當(dāng)eeprom應(yīng)答后,再通過(guò)R_IIC_B_MASTER_Read函數(shù)讀取數(shù)據(jù),從R_IIC_B_MASTER_Write函數(shù)寫(xiě)入的地址開(kāi)始計(jì)算,遞增讀取eeprom里面的數(shù)據(jù),一個(gè)64字節(jié)的數(shù)據(jù)。
結(jié)論
通過(guò)上面的設(shè)置實(shí)現(xiàn)了RA6T2的IIC使用DTC讀寫(xiě)eeprom。
審核編輯:湯梓紅
-
EEPROM
+關(guān)注
關(guān)注
9文章
1010瀏覽量
81404 -
IIC
+關(guān)注
關(guān)注
11文章
300瀏覽量
38274
原文標(biāo)題:RA6T2的IIC使用DTC讀寫(xiě)eeprom
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論