日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 內(nèi)容摘要:USB(Universal Serial Bus)是目前應(yīng)用非常廣泛的一種總線(xiàn)形式。其即插即用、熱插拔、接口體積小巧等優(yōu)點(diǎn)給計(jì)算機(jī)外設(shè)連接技術(shù)帶來(lái)重大變革。μCOS-II 是一個(gè)源碼公開(kāi)、完整的、可移植、可

內(nèi)容摘要:USB(Universal Serial Bus)是目前應(yīng)用非常廣泛的一種總線(xiàn)形式。其即插即用、熱插拔、接口體積小巧等優(yōu)點(diǎn)給計(jì)算機(jī)外設(shè)連接技術(shù)帶來(lái)重大變革。μCOS-II 是一個(gè)源碼公開(kāi)、完整的、可移植、可固化、可裁剪的嵌入式實(shí)時(shí)操作系統(tǒng),可以方便地移植到多種微處理器上。以在新太科技實(shí)際工作中的LPC2378讀卡器為例,詳細(xì)介紹μCOS-II 中USB 主機(jī)系統(tǒng)的設(shè)計(jì)。

μC/OS-II 是美國(guó)學(xué)者Lacrosse 設(shè)計(jì)的一個(gè)優(yōu)秀的嵌入式實(shí)時(shí)操作系統(tǒng),其代碼絕大部分用ANSIC語(yǔ)言編寫(xiě),可用于8 位、16 位、32 位、甚至64 位微處理器、微控制器、數(shù)字信號(hào)處理器等,具有操作系統(tǒng)最基本最核心的功能,非常適于在小型系統(tǒng)和片上系統(tǒng)(SOC)中使用。USB 為個(gè)人電腦與嵌入式設(shè)備之間的連接提供了一種標(biāo)準(zhǔn)化、單一化的接口,其高效性和可靠性使得它已經(jīng)成為嵌入式系統(tǒng)的首選接口。此LPC2378 讀卡器具有卡票檢測(cè)、消費(fèi)扣錢(qián)、系統(tǒng)升級(jí)、下發(fā)黑名單、在線(xiàn)充值、余額查詢(xún)等功能,但這些功能的實(shí)現(xiàn)都依賴(lài)于上位機(jī)的請(qǐng)求,業(yè)務(wù)應(yīng)用模塊只有在獲得相應(yīng)的請(qǐng)求后才能進(jìn)行相應(yīng)的處理并將處理結(jié)果返回給上位機(jī)。而USB 主機(jī)系統(tǒng)就是起銜接上位機(jī)和業(yè)務(wù)應(yīng)用模塊的功能,接收上位機(jī)請(qǐng)求以及將業(yè)務(wù)應(yīng)用模塊的結(jié)果返回給上位機(jī)。

1 構(gòu)建μC/OS-II系統(tǒng)環(huán)境

1.1 移植μC/OS-II 到LPC2378 開(kāi)發(fā)板

嵌入式操作系統(tǒng)作為大多數(shù)嵌入式應(yīng)用系統(tǒng)的軟件平臺(tái),它管理著系統(tǒng)的資源,為應(yīng)用軟件提供各種必要的服務(wù)。在嵌入式應(yīng)用系統(tǒng)中使用嵌入式系統(tǒng),可以提升嵌入式應(yīng)用系統(tǒng)的開(kāi)發(fā)效率,但是在得到嵌入式操作系統(tǒng)提供服務(wù)之前,關(guān)鍵是要將嵌入式操作系統(tǒng)移植到目標(biāo)板上。

移植條件:

移植μC/OS-II 之前需要注意,目標(biāo)處理器必須滿(mǎn)足以下五點(diǎn)要求:

1. 處理器的C 編譯器能產(chǎn)生可重入型代碼;2. 處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常為10-100Hz);3. 用C 語(yǔ)言可以開(kāi)/關(guān)中斷;4. 處理器能支持一定數(shù)量的數(shù)據(jù)存儲(chǔ)硬件堆棧(可能是幾KB);5. 處理器有將堆棧指針以及其他CPU 寄存器的內(nèi)容讀出并保存到堆?;騼?nèi)存中去的指令。

LPC2378 系列ARM7 微控制器可以滿(mǎn)第2、4 和5 點(diǎn)要求,使用ADS 的C 編譯器可以滿(mǎn)足1 和3 點(diǎn)要求。

移植步驟:

OS_CPU.H 的移植:

在OS_CPU.H 文件中定義與處理器相關(guān)的數(shù)據(jù)類(lèi)型,例如BOOLEAN,INT8U 和INT8S 等。根據(jù)ADS1.2編譯器的特性定義。在OS_CPU.H 文件中定義與處理器相關(guān)的宏, 主要是進(jìn)出臨界區(qū)代碼OS_ENTRER_CRITICAL()、OS_EXIT_CRITICAL()。

將OS_ENTRER_CRITICAL()和OS_EXIT_CRITICAL()定義為軟件中斷函數(shù),所以還要編寫(xiě)相應(yīng)的軟件中斷處理代碼(可以在OS_CPU_C.C 文件中編寫(xiě))實(shí)現(xiàn)開(kāi)/關(guān)中斷。同樣定義OS_TASK_SW()為軟件中斷函數(shù),并編寫(xiě)相應(yīng)的軟件中斷處理代碼(調(diào)用OS_INTCtxSw 函數(shù))實(shí)現(xiàn)任務(wù)切換。

OS_CPU_C.C 的移植:

在OS_CPU_C.C 中需要編寫(xiě)10 個(gè)相關(guān)的函數(shù),為:OSTaskStkInit();OSTaskDellHook();OSTaskIdleHook ();OSTaskTickHook()等函數(shù)。其中9 個(gè)系統(tǒng)Hook函數(shù)可以為空函數(shù),也可以根據(jù)用戶(hù)自己的需要編寫(xiě)相應(yīng)的操作代碼。任務(wù)棧結(jié)構(gòu)初始化函數(shù)OSTaskStkInit()必須根據(jù)移植時(shí)統(tǒng)一定義的任務(wù)堆棧結(jié)構(gòu)進(jìn)行初始化。

OS_CUP_A.ASM 的移植。

μC/OS-II 移植要求編寫(xiě)的匯編語(yǔ)言函數(shù)為:

OSStartHightRdy();OSCtxSw();OSIntCtxSw();OS_TickISR()。當(dāng)然這些程序不一定非得用匯編,也可以用嵌入式C 語(yǔ)言來(lái)完成。

至此,完成μC/OS-II 在ARM7 處理器LPC2378上代碼的移植,其大部分代碼與μC/OS-II 在其他ARM7 處理器上的移植是通用的。

1.2 USB 驅(qū)動(dòng)程序設(shè)計(jì)

μC/OS-II 提供了多任務(wù)實(shí)時(shí)操作系統(tǒng)的內(nèi)核。在應(yīng)用這個(gè)操作系統(tǒng)時(shí)候,用戶(hù)通常需要自己編寫(xiě)基于μC/OS-II 的外圍器件驅(qū)動(dòng)程序,以使外圍器件能在操作系統(tǒng)的協(xié)調(diào)下更好的為用戶(hù)服務(wù)。為了使軟件可移植性強(qiáng),易維護(hù),采用分層的方法編寫(xiě)USB 的驅(qū)動(dòng)程序。綜合考慮USB 協(xié)議、USB 硬件接線(xiàn)、μC/OS-II的結(jié)構(gòu)來(lái)進(jìn)行分層,下表所列為USB 驅(qū)動(dòng)程序分層結(jié)構(gòu)。

1.2.1 USB 硬件抽象層。

USB 硬件抽象層的主要任務(wù)是對(duì)USB 模塊的相關(guān)硬件進(jìn)行配置,是USB 驅(qū)動(dòng)程序的最底層與具體硬件相關(guān)的一層。主要完成的任務(wù):初始化USB 設(shè)備控制器為系統(tǒng)配置USB 時(shí)鐘控制器,選擇信號(hào)映射端口(在LPC 系列中只有LPC2378 有此功能),配置電源;配置USB 設(shè)備控制器中斷,此系統(tǒng)禁止了同步傳輸幀中斷,使端點(diǎn)處于低優(yōu)先級(jí)中斷;以及配置軟件控制接連、斷開(kāi)和重新連接USB 功能的相關(guān)寄存器。

1.2.2 USB 命令接口層。

USB 命令接口層是在USB 硬件的角度來(lái)描述USB 的具體功能是獨(dú)立于操作系統(tǒng)之外的,也是協(xié)議層和驅(qū)動(dòng)層實(shí)現(xiàn)的基礎(chǔ)。USB 命令接口層函數(shù)基本是和具體的USB 寄存器相關(guān)的,通過(guò)操作寄存器完成相應(yīng)的功能。

1.2.3 USB 協(xié)議層。

USB 協(xié)議層主要由 Descriptor.c 和Chap_9.c 文件組成。在Descriptor.c 定義了各描述符,是在USB 硬件的基礎(chǔ)上描述此讀卡器的USB 模塊,分別為:設(shè)備描述符、配置描述符、接口描述符和端點(diǎn)描述符。這些描述符也是上位機(jī)枚舉、識(shí)別讀卡器USB 模塊的媒介。而Chap_9.c 就是上位機(jī)枚舉讀卡器USB 模塊時(shí)USB 模塊回饋上位機(jī)的具體實(shí)現(xiàn),其中大部分函數(shù)都是依賴(lài)于USB 命令接口層。

1.2.4 USB 驅(qū)動(dòng)層。

USB 驅(qū)動(dòng)層是屬于USB 驅(qū)動(dòng)程序中最上層的是與μC/OS-II 系統(tǒng)聯(lián)系最緊密的一層。在其他各層的基礎(chǔ)上從系統(tǒng)的角度描述了USB 通信功能,是與操作系統(tǒng)和應(yīng)用程序直接聯(lián)系的一層。包括系統(tǒng)啟動(dòng)時(shí)初始化USB 硬件的接口以及等待接收主機(jī)枚舉過(guò)程發(fā)送的SETUP 包等函數(shù)的接口。其中USB 端點(diǎn)的讀寫(xiě)函數(shù)USB_ReadPort(INT8U endp, INT32U eppsize,INT8U buffnums,CTRL_USB *pUsb, INT32U len,INT8U *recbuff, INT16U timeout) 和USB_WritePort(INT8U endp, INT32U eppsize, INT8Ubuffnums, CTRL_USB *pUsb, INT8U *sendbuff,INT32U len, INT16U timeout)實(shí)現(xiàn)了接收上位機(jī)的請(qǐng)求和將處理結(jié)果返回給上位機(jī)。

以讀函數(shù)為例描述USB 接收上位機(jī)請(qǐng)求的過(guò)程,由函數(shù)原型的最后一個(gè)參數(shù)timeout 可知,讀過(guò)程是一種阻塞性的操作,在此系統(tǒng)中是以信號(hào)量的方式來(lái)實(shí)現(xiàn)阻塞型的讀操作的。在參數(shù)檢測(cè)無(wú)誤時(shí)調(diào)用USB_WaitEpReady(pUsb, timeout)以獲取該端點(diǎn)對(duì)應(yīng)信號(hào)量,若獲取失敗則此端點(diǎn)無(wú)數(shù)據(jù)可讀。當(dāng)上位機(jī)發(fā)送數(shù)據(jù)到相應(yīng)的端點(diǎn)時(shí)會(huì)產(chǎn)生中斷,中斷處理程序會(huì)判斷哪個(gè)端點(diǎn)產(chǎn)生了中斷,然后發(fā)送此端點(diǎn)所對(duì)應(yīng)的信號(hào)量,這樣USB_WaitEpReady(pUsb, timeout)就可以獲得信號(hào)量完成讀操作,否則程序會(huì)等待timeout時(shí)間,如果在timeout 時(shí)間內(nèi)依然獲取信號(hào)量失敗那程序就出錯(cuò)返回。若讀取長(zhǎng)度大于端點(diǎn)緩沖區(qū)的長(zhǎng)度的話(huà)則一次只能讀取端點(diǎn)緩沖區(qū)長(zhǎng)度數(shù),分多次讀取,直到讀取規(guī)定長(zhǎng)度為止。寫(xiě)端點(diǎn)函數(shù)發(fā)送過(guò)程和讀端點(diǎn)函數(shù)接收過(guò)程實(shí)現(xiàn)流程大體相似,其中最大的區(qū)別就是中斷產(chǎn)生的時(shí)機(jī)不同,接收過(guò)程是在數(shù)據(jù)到達(dá)相應(yīng)端點(diǎn)緩沖區(qū)時(shí)產(chǎn)生中斷,而發(fā)送過(guò)程是將數(shù)據(jù)寫(xiě)到相應(yīng)端點(diǎn)緩沖區(qū)之后才產(chǎn)生中斷。這樣在將數(shù)據(jù)發(fā)往相應(yīng)緩沖區(qū)后再調(diào)用USB_WaitEpReady(pUsb,timeout),若在此函數(shù)中成功獲得信號(hào)量則說(shuō)明發(fā)生成功。

2 USB系統(tǒng)軟件設(shè)計(jì)

USB 的系統(tǒng)軟件是與μC/OS-II 操作系統(tǒng)和業(yè)務(wù)應(yīng)用模塊緊密關(guān)聯(lián)的。在μC/OS-Ⅱ?qū)SB 進(jìn)行初始化時(shí),不但要對(duì)USB 硬件接口初始化,還需要對(duì)其相關(guān)軟件進(jìn)行初始化,比如:設(shè)置中斷處理函數(shù),以及單獨(dú)創(chuàng)建一個(gè)TaskSetup 任務(wù)以完成上位機(jī)對(duì)USB 系統(tǒng)主機(jī)的枚舉。中斷處理過(guò)程采用的是非向量中斷的方式,首先由中斷狀態(tài)寄存器的值判斷中斷產(chǎn)生的原因,然后由不同的原因設(shè)置不同的中斷處理函數(shù)。如果是數(shù)據(jù)中斷話(huà)則在相應(yīng)的中斷處理函數(shù)中發(fā)送對(duì)應(yīng)端點(diǎn)的信號(hào)量,這樣USB 驅(qū)動(dòng)程序中讀寫(xiě)接口才能成功被調(diào)用。TaskSetup 是系統(tǒng)的第一個(gè)任務(wù),只有在TaskSetup 任務(wù)中USB 主機(jī)系統(tǒng)被成功枚舉后才能進(jìn)行通信。枚舉過(guò)程主要是通過(guò)0 號(hào)端點(diǎn)的控制傳輸方式進(jìn)行的,在此過(guò)程中USB 主機(jī)系統(tǒng)接收上位機(jī)發(fā)送的Setup 包,然后根據(jù)Setup 包的不同請(qǐng)求進(jìn)行相應(yīng)的處理再通過(guò)控制端點(diǎn)將結(jié)果返回給上位機(jī)。在USB 中0 號(hào)端點(diǎn)為控制端點(diǎn)一共有2 個(gè)分別為輸入和輸出端點(diǎn)。設(shè)備枚舉其實(shí)就是一個(gè)上位機(jī)識(shí)別USB 主機(jī)系統(tǒng)的過(guò)程,標(biāo)準(zhǔn)USB 枚舉過(guò)程如下:獲取設(shè)備描述符、復(fù)位、設(shè)置地址、再次獲取設(shè)備描述符、獲取配置描述符、獲取接口和端點(diǎn)描述符、獲取字符串描述符、選擇設(shè)備配置。枚舉成功之后USB 主機(jī)系統(tǒng)處于就緒狀態(tài)并且配置所有的接口與端點(diǎn)。

在USB 體系結(jié)構(gòu)中數(shù)據(jù)的交互是以端點(diǎn)為基本單位的,端點(diǎn)的集合表現(xiàn)為接口,在U

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在現(xiàn)代電子系統(tǒng)中,電源扮演著核心角色,如同人體的心臟,為整個(gè)系統(tǒng)穩(wěn)定運(yùn)行提供不可或缺的動(dòng)力支持。從日常生活中的智能設(shè)備,到復(fù)雜精密的工業(yè)控制系統(tǒng),再到關(guān)乎國(guó)計(jì)民生的航空航天、醫(yī)療等關(guān)鍵領(lǐng)域,電源的可靠性直接決定了系統(tǒng)的穩(wěn)...

關(guān)鍵字: 電源 設(shè)備 系統(tǒng)

在現(xiàn)代計(jì)算機(jī)中,CPU(中央處理器)是最重要的組成部分之一。它負(fù)責(zé)執(zhí)行程序指令和處理數(shù)據(jù),因此CPU的性能直接影響到計(jì)算機(jī)的整體運(yùn)行效率。然而,許多用戶(hù)在使用計(jì)算機(jī)時(shí)可能會(huì)遇到CPU占用率過(guò)高的問(wèn)題,這不僅會(huì)導(dǎo)致計(jì)算機(jī)運(yùn)...

關(guān)鍵字: CPU 系統(tǒng)

在現(xiàn)代科技和工業(yè)領(lǐng)域,電源的穩(wěn)定性和可靠性是確保設(shè)備正常運(yùn)行和系統(tǒng)穩(wěn)定工作的基石。然而,電源系統(tǒng)的復(fù)雜性使得其可靠性預(yù)測(cè)成為一個(gè)極具挑戰(zhàn)性的任務(wù)。本文將從多個(gè)角度探討電源可靠性如何實(shí)現(xiàn)更精準(zhǔn)的預(yù)測(cè),以期為相關(guān)領(lǐng)域的研究和...

關(guān)鍵字: 電源 可靠性 系統(tǒng)

hmi是Human Machine Interface 的縮寫(xiě),"人機(jī)接口",也叫人機(jī)界面。人機(jī)界面(又稱(chēng)用戶(hù)界面或使用者界面)是系統(tǒng)和用戶(hù)之間進(jìn)行交互和信息交換的媒介, 它實(shí)現(xiàn)信息的內(nèi)部形式與人類(lèi)可以接受形式之間的轉(zhuǎn)換...

關(guān)鍵字: HMI 人機(jī)界面 系統(tǒng)

在復(fù)位電路中,電容的作用是給系統(tǒng)提供恒定的電源電壓,從而保證開(kāi)機(jī)時(shí)系統(tǒng)能夠正確地執(zhí)行初始化和自檢過(guò)程。因此,選擇合適大小的電容對(duì)于系統(tǒng)的穩(wěn)定性和性能至關(guān)重要。

關(guān)鍵字: 復(fù)位電路 電容 系統(tǒng)

工業(yè)自動(dòng)化系統(tǒng)設(shè)計(jì)是一項(xiàng)涉及多個(gè)領(lǐng)域和技術(shù)的綜合性任務(wù)。它旨在通過(guò)自動(dòng)化設(shè)備和系統(tǒng)的集成,提高生產(chǎn)效率、降低能耗、確保產(chǎn)品質(zhì)量和增強(qiáng)企業(yè)競(jìng)爭(zhēng)力。本文將詳細(xì)探討工業(yè)自動(dòng)化系統(tǒng)設(shè)計(jì)的原則、方法和實(shí)踐,以期為相關(guān)從業(yè)人員提供有...

關(guān)鍵字: 工業(yè)自動(dòng)化 設(shè)備 系統(tǒng)

MCS-51單片機(jī)是美國(guó)INTE公司于1980年推出的產(chǎn)品,與MCS-48單片機(jī)相比,它的結(jié)構(gòu)更先進(jìn),功能更強(qiáng),在原來(lái)的基礎(chǔ)上增加了更多的電路單元和指令,指令數(shù)達(dá)111條,MCS-51單片機(jī)可以算是相當(dāng)成功的產(chǎn)品,一直到...

關(guān)鍵字: 單片機(jī) 存儲(chǔ)器 系統(tǒng)

DSP應(yīng)用系統(tǒng)的運(yùn)算量是確定選用處理能力為多大的DSP芯片的基礎(chǔ)。運(yùn)算量小則可以選用處理能力不是很強(qiáng)的DSP芯片,從而可以降低系統(tǒng)成本。相反,運(yùn)算量大的DSP系統(tǒng)則必須選用處理能力強(qiáng)的DSP芯片,如果DSP芯片的處理能力...

關(guān)鍵字: DSP 芯片 系統(tǒng)

三家全球領(lǐng)先公司緊密協(xié)作,以滿(mǎn)足基于臺(tái)積公司先進(jìn)技術(shù)的設(shè)計(jì)在芯片、封裝和系統(tǒng)等方面的挑戰(zhàn)

關(guān)鍵字: 芯片 封裝 系統(tǒng)
關(guān)閉