




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、培訓內(nèi)容MQX RTOS I/O 驅(qū)動MQX如何管理I/O驅(qū)動I/O驅(qū)動相關的文件目錄結(jié)構使用MQX提供的I/O驅(qū)動創(chuàng)建一個新的驅(qū)動如何從定義調(diào)試串口MQX 中斷MQX如何處理中斷MQX BSP 移植什么情況下需要一個新的BSP與電路板相關的目錄BSP移植中的重要文件BSP移植的關鍵步驟使用腳本文件加速BSP移植演示Demo1: 使用MQX自帶的驅(qū)動Demo2: 創(chuàng)建一個新的驅(qū)動并且進行測試第1頁,共39頁。MQX如何管理I/O驅(qū)動軟件采用分層設計屏蔽驅(qū)動細節(jié)易用的API第2頁,共39頁。I/O 子系統(tǒng) APIPOSIX 標準 I/O 接口What does the I/O subsystem
2、 API look like?第3頁,共39頁。I/O驅(qū)動相關的文件目錄結(jié)構這里,我們關心右邊紅色方框內(nèi)的目錄:config有user_config.h文件 以及編譯BSP, PSP, MFS, RTCS, SHELL, USB的工程文件lib輸出文件.lib and .hmqxbsp, 包含BSP驅(qū)動代碼 (重要目錄,我們需要根據(jù)新的目標板對此進行修改)bat, 包含.bat文件,在編譯后把 .lib和.h文件拷貝到輸出目錄 其他文件夾,比如 mfs, rtcs,shell,usb 是對應協(xié)議棧的內(nèi)容第4頁,共39頁。MQX 驅(qū)動MQX 提供了片上模塊的驅(qū)動:TTYI2CSPIGPIOADC
3、RTCFlashSD cardand much more!第5頁,共39頁。如何使用MQX的I/O驅(qū)動在user_config.h 使能對應的模塊#define BSPCFG_ENABLE_I2C0 1#define BSPCFG_ENABLE_II2C0 0#define BSPCFG_ENABLE_I2C1 0#define BSPCFG_ENABLE_II2C1 0#define BSPCFG_ENABLE_SPI0 0#define BSPCFG_ENABLE_ISPI0 0重編譯 MQX 庫fopenfreadfwriteioctlfclose第6頁,共39頁。使用MQX的I/O驅(qū)動
4、第7頁,共39頁。使用MQX的I/O驅(qū)動要點: 學習如何使用MQX的I2C驅(qū)動來訪問板上的MMA8451 I2C接口加速度傳感器步驟步驟 1: 使能 I2C0 驅(qū)動在 configtwrk60n512user_config.h 文件里#define BSPCFG_ENABLE_I2C0 1步驟2: 重新編譯BSP第8頁,共39頁。使用MQX的I/O驅(qū)動步驟3: 在應用中使用API訪問 MMA8451void init_i2c(void) f_i2c = fopen (i2c0:, NULL); if (f_i2c = NULL) printf (Failed to open the I2C d
5、river!n); _mqx_exit (1L); ioctl (f_i2c, IO_IOCTL_I2C_SET_MASTER_MODE, NULL);第9頁,共39頁。使用MQX的I/O驅(qū)動步驟4: 使用API訪問MMA8451u8 mma8451_read_reg(u8 addr) uint_32 param; u8 mem1; / set dest address for this access param = I2C_ADDR_MMA8451; ioctl (f_i2c, IO_IOCTL_I2C_SET_DESTINATION_ADDRESS, ¶m); / 1.start,
6、 send dst address fwrite(mem, 1, 0, f_i2c); ioctl (f_i2c, IO_IOCTL_FLUSH_OUTPUT, ¶m); / 2.send reg address mem0 = addr; fwrite(mem, 1, 1, f_i2c); fflush(f_i2c); / 3.repeat and device address ioctl(f_i2c, IO_IOCTL_I2C_REPEATED_START, NULL); param = 1; ioctl(f_i2c, IO_IOCTL_I2C_SET_RX_REQUEST, &pa
7、ram); / 4.read fread (mem, 1, 1, f_i2c); / 5.stop ioctl (f_i2c, IO_IOCTL_I2C_STOP, NULL); return mem0;第10頁,共39頁。使用MQX的I/O驅(qū)動步驟5: 讀取MMA8451數(shù)據(jù)void hw_mma8451_get_data(s16 *x, s16 *y, s16 *z) u8 v; v = mma8451_read_reg(0); if(v&1) *x = (s16)(mma8451_read_reg(0 x01)4; if(v&2) *y = (s16)(mma8451_read_reg(
8、0 x03)4; if(v&4) *z = (s16)(mma8451_read_reg(0 x05)4;第11頁,共39頁。使用MQX的I/O驅(qū)動優(yōu)點: 不用關心MCU的寄存器內(nèi)容,以及其它細節(jié),使開發(fā)更加方便!參考資料:Freescale MQX TM I/O Drivers Users Guide第12頁,共39頁。創(chuàng)建新的驅(qū)動第13頁,共39頁。創(chuàng)建新的驅(qū)動啟動流程:main()_mqx()_bsp_enable_card() / we need to modify the code in this functionscheduleruser task第14頁,共39頁。創(chuàng)建新的驅(qū)動開
9、發(fā)風格和linux是類似的步驟1: 準備以下5個函數(shù)_mqx_int _io_mma8451_open (MQX_FILE_PTR, char_ptr, char_ptr);_mqx_int _io_mma8451_close(MQX_FILE_PTR);_mqx_int _io_mma8451_read (MQX_FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_mma8451_write(MQX_FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_mma8451_ioctl(MQX_FILE_PTR, _mqx_uint
10、, pointer);第15頁,共39頁。創(chuàng)建新的驅(qū)動步驟1: 準備以下5個函數(shù)(續(xù))_mqx_int _io_mma8451_open () fd = fopen (i2c0:, NULL); if (fd = NULL) return MQX_INVALID_POINTER; ioctl (fd, IO_IOCTL_I2C_SET_MASTER_MODE, NULL); init_mma8451(); return MQX_OK;第16頁,共39頁。創(chuàng)建新的驅(qū)動步驟1: 準備以下5個函數(shù)(續(xù))_mqx_int _io_mma_close() fclose(fd); return MQX_O
11、K;第17頁,共39頁。創(chuàng)建新的驅(qū)動步驟2: 實現(xiàn)install函數(shù)_mqx_uint _io_mma8451_install(char_ptr identifier) return _io_dev_install(identifier, _io_mma8451_open, _io_mma8451_close, _io_mma8451_read, _io_mma8451_write, _io_mma8451_ioctl, NULL); _io_dev_install() will register the driver in I/O subsystem.第18頁,共39頁。創(chuàng)建新的驅(qū)動步驟3:
12、 在user_config.h中添加#define BSPCFG_ENABLE_MMA 0步驟: 在 init_bsp.c的_bsp_enable_card()函數(shù)中添加#if BSPCFG_ENABLE_MMA8451 _io_mma8451_install(mma8451:);#endif步驟: 編譯BSP工程第19頁,共39頁。測試新驅(qū)動void mma8451_test_new(void) fd = fopen (mma8451:, NULL); if (fd = NULL) printf (Failed to open mma8451!n); _mqx_exit (1L); whil
13、e (TRUE) fread (acc, 1, 6, fd); printf(x,y,z: %d,%d,%d n, acc0,acc1,acc2); _time_delay(300); 第20頁,共39頁。驅(qū)動開發(fā)注意事項需要考慮這一份驅(qū)動可能有多個運行實例每個實例都需要有獨立的變量保存自己的信息,而這些信息應存儲在在fopen時通過malloc分配的針對本實例的存儲區(qū)域此時不推薦使用全局變量第21頁,共39頁。如何重定義打印串口在user_config.h中#define BSP_DEFAULT_IO_CHANNEL ttyd:#define BSP_DEFAULT_IO_CHANNEL_D
14、EFINED#define BSPCFG_SCI3_BAUD_RATE 115200“ttyd”的管腳分配在哪里定義?In mqxsourcebsptwrk60n512init_gpio.c, _bsp_serial_io_init(): switch (dev_num) case 0: pctl = (PORT_MemMapPtr)PORTD_BASE_PTR; if (flags & IO_PERIPHERAL_PIN_MUX_ENABLE) /* PTD6 as RX function (Alt.3) + drive strength */ pctl-PCR6 = 0 | PORT_PC
15、R_MUX(3) | PORT_PCR_DSE_MASK; 第22頁,共39頁。MQX 中斷第23頁,共39頁。MQX 中斷中斷里的常見操作:Post a semaphoreSend a messageSet an event注意:中斷不是任務記住:中斷盡量短,并且不能調(diào)用阻塞函數(shù)第24頁,共39頁。MQX 中斷MQX 內(nèi)核中斷管理應用層中斷回調(diào)函數(shù)MQX內(nèi)核中斷需要做:當前任務的上下文保存切換到中斷任務stack調(diào)用用戶ISR恢復下一個待執(zhí)行任務的上下文使用 _int_install_isr() 安裝中斷回調(diào)函數(shù)第25頁,共39頁。內(nèi)核中斷有一些應用需要對時延有較高要求,需要直接安裝用戶中斷
16、到向量表這樣,內(nèi)核中斷服務程序就會被替代實現(xiàn): _int_install_kernel_isr()用戶需要考慮:保持上下文不能調(diào)用任何MQX API第26頁,共39頁。MQX 板級支持包 (BSP)第27頁,共39頁。板級支持包板級支持包提供針對指定硬件平臺的驅(qū)動,實現(xiàn)了對底層硬件的隔離第28頁,共39頁。什么時候需要創(chuàng)建新的BSP硬件發(fā)生改變同一硬件平臺,但是需要做不同的配置第29頁,共39頁。BSP 移植時的重要文件mqxsourcebsptwrk60n512 init_bsp.c IO drivers 初始化uint_32 _bsp_enable_card(void)#if BSPCFG
17、_ENABLE_MMA _io_mma_install(mma:);#endif第30頁,共39頁。BSP 移植時的重要文件(續(xù))mqxsourcebsptwrk60n512 init_hw.c FlexBus 初始化static void _bsp_flexbus_setup (void) pctl-PCR10 = PORT_PCR_MUX(ALT5); /* FB_AD19 */ pctl-PCR11 = PORT_PCR_MUX(ALT5); /* FB_AD18 */ pctl-PCR16 = PORT_PCR_MUX(ALT5); /* FB_AD17 */ pctl-PCR17 =
18、 PORT_PCR_MUX(ALT5); /* FB_AD16 */ pctl-PCR18 = PORT_PCR_MUX(ALT5); /* FB_AD15 */ pctl-PCR19 = PORT_PCR_MUX(ALT5); /* FB_OE_b */ pctl-PCR20 = PORT_PCR_MUX(ALT5); /* FB_AD31 */ pctl-PCR21 = PORT_PCR_MUX(ALT5); /* FB_AD30 */ pctl-PCR22 = PORT_PCR_MUX(ALT5); /* FB_AD29 */ pctl-PCR23 = PORT_PCR_MUX(ALT5
19、); /* FB_AD28 */第31頁,共39頁。BSP 移植時的重要文件(續(xù))mqxsourcebsptwrk60n512 init_gpio.c IO pin 初始化_mqx_int _bsp_i2c_io_init( uint_32 dev_num) switch (dev_num) case 0: pctl = (PORT_MemMapPtr)PORTD_BASE_PTR; pctl-PCR8 = PORT_PCR_MUX(ALT2) | PORT_PCR_ODE_MASK; pctl-PCR9 = PORT_PCR_MUX(ALT2) | PORT_PCR_ODE_MASK; br
20、eak; 第32頁,共39頁。BSP 移植時的重要文件(續(xù))mqxsourcebsptwrk60n512Init_.cconst KI2C_INIT_STRUCT _bsp_i2c0_init = 0, /* I2C channel */ BSP_I2C0_MODE, /* I2C mode */ BSP_I2C0_ADDRESS, /* I2C address */ BSP_I2C0_BAUD_RATE, /* I2C baud rate */ BSP_I2C0_INT_LEVEL, /* I2C int level */ 0, /* I2C int sublevel not availab
21、le */ BSP_I2C0_TX_BUFFER_SIZE,/* I2C int tx buf */ BSP_I2C0_RX_BUFFER_SIZE /* I2C int rx buf */;第33頁,共39頁。BSP移植的關鍵步驟1. 選擇最接近新的硬件覺得原始BSP2. 拷貝原始BSP,PSP工程文件,配置和源碼3. 更改BSP相關的配置4. 根據(jù)新的目標板更改相關的代碼5 .創(chuàng)建新的驅(qū)動參考資料:AN4287, MQX Board Support Package Porting Guide第34頁,共39頁。使用腳本文件加速BSP移植觀察一下AN4287的內(nèi)容,會發(fā)現(xiàn)有大量的以下操作:創(chuàng)建新文件夾拷貝文件夾以及其子文件夾內(nèi)容到另一文件夾重命名文件夾和文件修改一些文件內(nèi)的文本內(nèi)容這些操作都是可以通過執(zhí)行腳本程序來完成的 文本替換可以使用 GNU sed(stream editor) 工具實現(xiàn)第35頁,共39頁。GNU sed(stream editor)獲取sed信息 /software/sed/, /Unix/Sed.html and /packages/sed.htm. Sed工具在文本替換方面功能很強大第36頁,共39頁。命令介紹Create a new BSPTo create
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年生物可降解塑料項目建議書
- 二零二五年度借調(diào)人員職業(yè)發(fā)展與離職交接協(xié)議
- 信息技術助力農(nóng)村發(fā)展合作合同書
- 某業(yè)務模塊操作指南
- 三農(nóng)科技示范推廣項目實施方案
- 小鴨子游泳故事解讀
- 2025年磷酸氧鈦鉀晶體(KTP)合作協(xié)議書
- 中學生課外閱讀經(jīng)驗交流征文
- 小公主童話故事解讀征文
- 文化藝術品保護及版權授權合同
- 國有企業(yè)保密管理制度
- 幼兒園師德師風培訓課件
- Unit2大單元整體教學設計-小學英語四年級上冊(Joinin外研劍橋英語)
- 人美版(2024)七年級上冊美術第二單元 色彩魅力第1課《自然的色彩》教學設計
- 2024年水利安全員(B證)考試題庫-下(多選、判斷題)
- 酒店室內(nèi)裝修工程施工組織設計
- 神經(jīng)病學專業(yè)英語詞匯
- 2024年高級纖維檢驗員職業(yè)鑒定理論考試題庫(含答案)
- 心肺復蘇科普課件
- 員工食堂就餐統(tǒng)計表
- 2024至2030年中國醫(yī)療保險行業(yè)市場深度分析及投資戰(zhàn)略規(guī)劃報告
評論
0/150
提交評論