張玲+晏伯武
摘要:嵌入式處理器和接口編程是嵌入式課程體系的基礎(chǔ)課程,是培養(yǎng)學(xué)生理解并應(yīng)用嵌入式硬件資源的實(shí)踐性課程,因此嵌入式處理器和接口編程實(shí)踐教學(xué)項(xiàng)目的設(shè)置對(duì)學(xué)生理解處理器原理和硬件接口有著重要的意義。本文針對(duì)嵌入式處理器接口及外圍資源編程的實(shí)踐教學(xué),設(shè)置了嵌入式處理器體系結(jié)構(gòu)及編程、GPIO編程、異常和中斷、嵌入式處理器外圍資源編程等教學(xué)內(nèi)容,以階段項(xiàng)目驅(qū)動(dòng)的教學(xué)方法將抽象知識(shí)具體化,以期讓學(xué)生更好地理解硬件原理,學(xué)會(huì)時(shí)序控制硬件的編程,提高實(shí)際操作能力和對(duì)綜合知識(shí)的運(yùn)用能力。
關(guān)鍵詞:驅(qū)動(dòng)編寫(xiě);嵌入式處理器編程;項(xiàng)目驅(qū)動(dòng)
中圖分類(lèi)號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼:A 論文編號(hào):1674-2117(2017)11-0095-03
● 引言
近年來(lái),從工業(yè)控制應(yīng)用到智能家具,再到人工智能都離不開(kāi)嵌入式系統(tǒng)的發(fā)展。為了滿足社會(huì)需求,各大高校相繼開(kāi)設(shè)了嵌入式課程體系。與一般某門(mén)課程的教學(xué)不同,嵌入式課程是一個(gè)課程體系,幾乎涉及計(jì)算機(jī)專業(yè)的所有課程,所以常規(guī)的上課和實(shí)驗(yàn)方式已經(jīng)不能滿足該課程體系的需求。為了提高教學(xué)效率,本文針對(duì)嵌入式處理器和接口編程實(shí)踐教學(xué)進(jìn)行了研究,旨在實(shí)施以項(xiàng)目為驅(qū)動(dòng)的教學(xué)方式,將抽象的知識(shí)具體化,并應(yīng)用到實(shí)際的項(xiàng)目中,這樣不僅可以提高學(xué)生的學(xué)習(xí)興趣,而且可以提高學(xué)生對(duì)基本知識(shí)的理解和應(yīng)用能力,以及動(dòng)手實(shí)踐能力,為后續(xù)課程的學(xué)習(xí)打下良好的基礎(chǔ)。
鑒于嵌入式處理器和接口編程要求學(xué)生掌握和理解嵌入式處理器的體系結(jié)構(gòu)、指令系統(tǒng)、匯編語(yǔ)言、匯編與C混合編程,筆者對(duì)嵌入式處理器體系結(jié)構(gòu)及編程、通用輸入輸出接口、異常和中斷、處理器外圍資源編程等方面進(jìn)行了詳細(xì)闡述。
● 嵌入式處理器體系結(jié)構(gòu)及編程
該部分主要針對(duì)嵌入式處理器結(jié)構(gòu)和編程進(jìn)行項(xiàng)目設(shè)置和教學(xué)內(nèi)容設(shè)置,其中包括嵌入式處理器組成原理、寄存器設(shè)置、CPU原理、指令格式、指令系統(tǒng)和匯編語(yǔ)言。
由于該部分的知識(shí)點(diǎn)比較抽象,且難以設(shè)置足夠的課時(shí)來(lái)詳細(xì)講授,所以如何把抽象知識(shí)具體化,使學(xué)生掌握嵌入式體系結(jié)構(gòu)的硬件和軟件原理非常關(guān)鍵。該部分項(xiàng)目設(shè)置的目的就是讓學(xué)生掌握基本匯編的用法、匯編和C語(yǔ)言用法,掌握寄存器的設(shè)置方法等。
考慮到學(xué)生是第一次接觸嵌入式硬件編程,還沒(méi)完全形成硬件編程思想,所以筆者設(shè)置了基本通用輸入輸出接口點(diǎn)亮LED燈的小項(xiàng)目,以此達(dá)到兩個(gè)目的:一是學(xué)會(huì)匯編語(yǔ)言的基本編程、匯編和C混合編程以及基本的在線調(diào)試和運(yùn)行方法;二是了解基本的GPIO編程思想,學(xué)會(huì)硬件寄存器的配置方法,為下一步的GPIO編程打下基礎(chǔ)。
具體的項(xiàng)目設(shè)置和教學(xué)內(nèi)容如下頁(yè)表1所示,在第一個(gè)項(xiàng)目中,GPJ2口接8個(gè)LED小燈,要求學(xué)生實(shí)現(xiàn)至少3種跑馬燈效果。教師先給學(xué)生講解點(diǎn)亮一個(gè)小燈的原理,然后要求學(xué)生以同樣的方式點(diǎn)亮同一組GPIO連接的所有小燈,并用軟件方式實(shí)現(xiàn)不同的顯示效果。在第二個(gè)項(xiàng)目中,要求學(xué)生通過(guò)打開(kāi)和關(guān)閉Cache運(yùn)行小燈閃爍的程序,來(lái)體會(huì)Cache的作用。
● GPIO(通用可編程IO接口)編程
GPIO編程是嵌入式處理器編程的核心部分,它可以用編程語(yǔ)言通過(guò)簡(jiǎn)單地描述數(shù)字信號(hào)來(lái)控制外部設(shè)備工作。由于CPU對(duì)所有外設(shè)的控制都是通過(guò)GPIO編程來(lái)完成,所以該部分的學(xué)習(xí)對(duì)嵌入式應(yīng)用開(kāi)發(fā)來(lái)說(shuō)非常重要。對(duì)于教學(xué)用到的嵌入式核Cortex-A8來(lái)說(shuō),它包含多組基本功能引腳,由于每組都涉及不同的寄存器,所以每組引腳都能提供不同的功能。然而,功能較多所帶來(lái)的問(wèn)題就是繁瑣的編程,因?yàn)獒槍?duì)不同的功能需要設(shè)置不同的工作模式,這些都需要用編程語(yǔ)言進(jìn)行寄存器配置。
為了簡(jiǎn)化難度,使學(xué)生更易于理解,筆者針對(duì)該部分的知識(shí)點(diǎn)設(shè)置的項(xiàng)目是:C語(yǔ)言實(shí)現(xiàn)寄存器設(shè)置,完成跑馬燈的不同效果;C語(yǔ)言完成蜂鳴器的控制,實(shí)現(xiàn)不同的音樂(lè);時(shí)鐘的原理和設(shè)置。具體的項(xiàng)目設(shè)置和教學(xué)內(nèi)容如表2所示。
● 異常和中斷
Cortex-A8的異常處理的實(shí)質(zhì)是利用中斷原理處理各類(lèi)異常。中斷技術(shù)是處理器高效處理各類(lèi)事件的有效方式,這個(gè)概念雖然簡(jiǎn)單,但對(duì)于剛接觸中斷技術(shù)的學(xué)生來(lái)說(shuō),理解起來(lái)還是存在困難。為了較好地理解該部分的知識(shí)點(diǎn),學(xué)生可以將其與已學(xué)過(guò)的查詢式編程進(jìn)行類(lèi)比。在查詢式編程中,處理器除了查詢標(biāo)志位外,其他什么事情也不用做,而中斷的主動(dòng)權(quán)在請(qǐng)求程序上,當(dāng)哪個(gè)資源需要CPU時(shí),會(huì)主動(dòng)發(fā)出中斷請(qǐng)求,相當(dāng)于告訴CPU:我準(zhǔn)備好了,你可以過(guò)來(lái)處理這件事情。而在中斷源還沒(méi)準(zhǔn)備好時(shí),CPU可以處理其他事情,這樣就減少了CPU的等待時(shí)間,提高了CPU的工作效率。
中斷部分的講解利用外部中斷源發(fā)出中斷,而要處理的中斷服務(wù)程序?yàn)辄c(diǎn)亮LED燈,即CPU要處理的事情為點(diǎn)亮LED燈,以及以不同的方式點(diǎn)亮LED燈。在該項(xiàng)目中,中斷源為CPU的外部中斷引腳,觸發(fā)中斷產(chǎn)生的中斷源為每位學(xué)生,請(qǐng)求CPU處理的程序?yàn)辄c(diǎn)亮LED燈。這樣能讓學(xué)生通過(guò)親自編程和體驗(yàn),將抽象的知識(shí)具體化,理解和掌握中斷概念,并學(xué)會(huì)中斷編程。
該項(xiàng)目利用外部中斷GPJ1口的編程過(guò)程可以描述為:設(shè)置GPJ1CON= GPJ1CON & 0xffff0fff,GPJ1CON|= GPJ1CON|(0xF<<4*3),即可配置寄存器為中斷功能;GPJ1_3下拉功能,GPJ1PUD=GPJ1PUD& 0xff3f,GPJ1PUD=GPJ1PUD| (0x40);將CPJ4_4設(shè)置為輸出模式,GPJ4CON=GPJ4CON& 0xfff0ffff,GPJ4CON=GPJ4CON| 0x10000;設(shè)置GPJ4_4輸出高電平,GPJ4DAT=GPJ4DAT|0x10;清除中斷掛起位,GPJ1_INT_PEND= GPJ1_INT_PEND&(1<<3);點(diǎn)亮LED燈,GPJ2DAT=GPJ2DAT| 0x1,clear_Vicaddress()。