《瑞薩RA產(chǎn)品家族初學(xué)者指南》系列文章已收錄成合集!
10. 使用“靈活配置軟件包”通過
本章目錄
使用FSP配置器設(shè)置USB端口
創(chuàng)建代碼
在主機(jī)端設(shè)置接收器
10.2 創(chuàng)建代碼
現(xiàn)在,添加初始化USB端口和執(zhí)行端口寫入所需的代碼。由于本練習(xí)需要輸入大量的內(nèi)容,建議您通過瑞薩網(wǎng)站從本手冊對應(yīng)的網(wǎng)頁下載該實驗的解決方案,這樣只需按照說明進(jìn)行操作,而無需手動輸入代碼。
https://www.renesas.cn/cn/zh/document/gde/1520091
如果決定自行編寫所有內(nèi)容,首先在“Project Explorer”(項目資源管理器)中通過雙擊打開hal_entry.c文件。為了確保程序正常運行,需要定義多個全局變量。首先,在hal_entry()函數(shù)的頭部之前聲明USB驅(qū)動程序狀態(tài)的枚舉。其類型應(yīng)該是usb_status_t,可以將其命名為usb_event。接下來,添加一個usb_setup_t類型的結(jié)構(gòu)(在r_usb_basic_api.h中進(jìn)行聲明),并將其命名為usb_setup。我們稍后將在解碼某些USB事件時使用該變量,該變量將在USB事件循環(huán)內(nèi)進(jìn)行初始化。
接下來,我們需要一個變量來保存USB模塊的編號。將其設(shè)置為uint8_t類型,命名為g_usb_module_number,并為其賦值“0x00”。最后,聲明類型為usb_class_t的USB類類型的結(jié)構(gòu),將其命名為g_usb_class_type,并為其賦值“0x00”。如果要了解我們使用的各種類型的詳細(xì)信息,請參見《Renesas靈活配置軟件包 (FSP) 用戶手冊》,該手冊可以從FSP的GitHub網(wǎng)站下載。
添加這些內(nèi)容后,此部分代碼現(xiàn)在應(yīng)如下所示:
我們自己的代碼也依賴于一些靜態(tài)全局變量。請?zhí)砑拥経SB全局變量下方:
命名為send_str的字符數(shù)組用于保存我們要通過USB發(fā)送的文本。將其初始化為“LED on ”,因為將LED2切換到“ON”后,將首次使用該變量。下一個變量為s1_pressed,其類型為uint8_t,并需要聲明為volatile,因為其值在用戶按鈕S1的回調(diào)例程中將更改為true。默認(rèn)情況下,其值為false,將由IRQ10中斷的回調(diào)例程設(shè)置為true,表示已按下該按鈕,因此通知主程序該事件已發(fā)生。
如果沒有將該變量聲明為volatile,C編譯器的優(yōu)化程序可能不會在每次使用該變量時重新讀取其值,因此hal_entry()內(nèi)部的循環(huán)可能無法識別到更改。
第三個變量用于保存LED2的電平,在啟動時應(yīng)該初始化為BSP_IO_LEVEL_HIGH。每次激活S1時,切換該變量的值。
至此,我們已經(jīng)聲明了所有的全局變量,可以繼續(xù)編寫hal_entry()函數(shù)內(nèi)的代碼。首先,我們需要一個靜態(tài)變量,用于保存虛擬UART通信端口的設(shè)置,如比特率、停止位和數(shù)據(jù)位的數(shù)量以及奇偶校驗類型。該變量的類型應(yīng)該是usb_pcdc_linecoding_t,建議將其命名為g_line_coding。將“在此添加您自己的代碼”占位符替換為聲明。稍后將在USB事件處理程序循環(huán)中初始化該變量。
接下來,編寫代碼以打開并啟用外部IRQ10,將其連接到評估板的S1。與第9章一樣,使用IRQ FSP驅(qū)動程序的相應(yīng)函數(shù):
啟用中斷后,需要打開USB并獲取類類型和模塊編號。為此,使用r_usb_basic上的g_basic0USB驅(qū)動程序模塊的相關(guān)函數(shù),并將控制結(jié)構(gòu)傳遞給這些函數(shù),將引用傳遞給配置結(jié)構(gòu)(適用于Open() 函數(shù))和相關(guān)的變量。溫馨提示,e2 studio中的代碼補全功能和開發(fā)人員幫助可幫助您編寫這些代碼行。
中斷和USB端口的初始化現(xiàn)已完成。接下來編寫的所有代碼都應(yīng)該放置在while(1)循環(huán)內(nèi),因為這部分程序?qū)⒀h(huán)執(zhí)行。首先,我們編寫用于獲取和處理端口的USB相關(guān)事件的代碼。USB驅(qū)動程序關(guān)聯(lián)多個事件,但為了簡潔起見,僅處理USB_STATUS_REQUEST事件。如果要全面了解事件處理程序,請參見《靈活配置軟件包 (FSP) 用戶手冊》中的USB外設(shè)通信設(shè)備類(r_usb_pcdc)文檔。在此,可以找到此類處理程序的代碼示例以及流程圖。
現(xiàn)在,您的第一個任務(wù)是通過調(diào)用R_USB_EventGet()函數(shù)來初始化usb_event變量,然后編寫處理程序,只有發(fā)生USB_STATUS_REQUEST事件時才能執(zhí)行該處理程序。在if – then – else結(jié)構(gòu)中,首先設(shè)置USB端口,然后確定是否請求線路設(shè)置。如果是,通過傳遞g_line_coding變量來配置虛擬UART設(shè)置。
如果否,則查詢主機(jī)是否要接收UART設(shè)置。如果是,請將其發(fā)送給主機(jī)。最后,如果發(fā)生事件,在此不進(jìn)行處理,直接確認(rèn)。
下面是我們的處理程序版本的完整代碼:
可以看到,在處理程序中LINE_CODING_LENGTH出現(xiàn)兩次。由于我們還沒有定義INE_CODING_LENGTH的值,請返回到文件的頂部,并將其定義為無符號值0x07。
返回到while(1)循環(huán)中,添加在激活S1后更改LED2電平的代碼,以s1_pressed的true值表示。類似于第9章中寫入的內(nèi)容,但此時需要將要通過USB發(fā)送的字符串復(fù)制到send_str變量,并將s1_pressed變量設(shè)置為false:
最后要添加的代碼是用于外部IRQ10的回調(diào)函數(shù)的代碼。將其放置在hal_entry ()函數(shù)的括號后面。通過復(fù)習(xí)第9章,了解回調(diào)函數(shù)的一些詳細(xì)信息。首先,需要導(dǎo)入g_bsp_leds結(jié)構(gòu),并用其初始化我們的本地Leds變量。然后將s1_pressed設(shè)置為true,表示事件已發(fā)生,接下來將新值寫入引腳寄存器。最后,利用r_usb_basic模塊的R_USB_Write() API,通過USB端口發(fā)送該字符串。
還記得USB描述符g_usb_descriptor嗎?現(xiàn)在該描述符將發(fā)揮作用。USB需要有關(guān)器件、其配置和供應(yīng)商信息的準(zhǔn)確描述。該文件十分復(fù)雜,具有長達(dá)484行代碼。有關(guān)該描述符的說明,請參閱《FSP用戶手冊》的r_usb_basic部分,有關(guān)如何構(gòu)建該描述符的詳細(xì)說明,請參見通用串行總線規(guī)范2.0版(復(fù)制下方網(wǎng)址到瀏覽器中打開查看):
http://www.usb.org/developers/docs/
但這里有兩個捷徑:一個是在本手冊的網(wǎng)站上下載本手冊練習(xí)的源文件
https://www.renesas.cn/cn/zh/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ra-book
另一個是使用FSP配置器放置在項目ra目錄下的模板。其名稱為r_usb_pcdc_descriptor.c.template,可以在“項目資源管理”中轉(zhuǎn)到ra → fsp → src → r_usb_pcdc文件夾進(jìn)行訪問(參見圖10-10)。將該文件復(fù)制到hal_entry.c所在的src文件夾中,并將其重命名為r_usb_descriptor.c。修改供應(yīng)商ID和產(chǎn)品ID,以便與您自己的產(chǎn)品ID相匹配。如果尚未獲得這些數(shù)據(jù),暫時使用值0x045BU和0x5310U。到這一步已經(jīng)完成了要進(jìn)行的設(shè)置和要編寫的代碼。
圖10-10:FSP配置器自動創(chuàng)建USB描述符的模板
最后還需要編譯項目。第一次執(zhí)行此操作需要較長時間,因為需要對項目中包含的所有FSP模塊的代碼進(jìn)行編譯。在項目編譯完成后,如果沒有任何錯誤和警告,即可連接EK-RA6M4評估板并啟動調(diào)試會話。打開“Debug”(調(diào)試)透視圖,雙擊“Resume”(恢復(fù))以啟動程序。作為快速測試手段,按一次S1,以查看LED2是否切換。
10.3 在主機(jī)端設(shè)置接收器
在程序運行的情況下,將第二根USB type A轉(zhuǎn)Micro-B電纜連接到評估板的系統(tǒng)控制和生態(tài)系統(tǒng)訪問區(qū)域左下方標(biāo)有J11的USB端口。將另一端插入Windows工作站,稍等片刻,直到Windows識別該電路板,對其進(jìn)行枚舉并安裝驅(qū)動程序。
啟動終端仿真器程序。在本練習(xí)的開發(fā)過程中,用到了Tera Term,它是一款非常實用的工具。
復(fù)制以下網(wǎng)址在瀏覽器中打開查看:
在Tera Term中,可以看到列出的CDC串行端口。在圖10-11中顯示為COM3,但在其他PC上可能有所不同。如果不確定,使用Windows的“Device Manager”(設(shè)備管理器)來查找電路板所連接的端口。
圖10-11:如果Windows正確識別該電路板,它將在Tera Term中列為串行連接
如果沒有列出該電路板,或者“Device Manager”(設(shè)備管理器)指示錯誤,則驅(qū)動程序可能有問題。請復(fù)制以下網(wǎng)址到瀏覽器中打開,參見瑞薩知識庫中有關(guān)此主題的最新支持條目以解決此問題:
https://en-support.renesas.com/knowledgeBase/18959077
在已建立連接并運行Tera Term的情況下,多次按下S1,應(yīng)該可以看到綠色LED2切換,其輸出到終端的狀態(tài)如圖10-12所示。
圖10-12:在傳輸運行的情況下,每次按下S1時,終端程序都會顯示LED2的狀態(tài)
您已成功完成本練習(xí)!
本章要點:
使用FSP配置器和USB中間件便于增加對USB端口的支持。
要進(jìn)行USB傳輸,必須具有USB描述符文件。
-
mcu
+關(guān)注
關(guān)注
146文章
17002瀏覽量
350335 -
usb
+關(guān)注
關(guān)注
60文章
7900瀏覽量
264016 -
瑞薩
+關(guān)注
關(guān)注
35文章
22293瀏覽量
86089 -
USB端口
+關(guān)注
關(guān)注
0文章
35瀏覽量
12838 -
FSP
+關(guān)注
關(guān)注
0文章
34瀏覽量
7109
原文標(biāo)題:瑞薩RA產(chǎn)品家族初學(xué)者指南-第10章(2)
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論