嵌入式技術(shù)基礎(chǔ)與實(shí)踐(第2版)第03章_第1頁
嵌入式技術(shù)基礎(chǔ)與實(shí)踐(第2版)第03章_第2頁
嵌入式技術(shù)基礎(chǔ)與實(shí)踐(第2版)第03章_第3頁
嵌入式技術(shù)基礎(chǔ)與實(shí)踐(第2版)第03章_第4頁
嵌入式技術(shù)基礎(chǔ)與實(shí)踐(第2版)第03章_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第3章第一個(gè)樣例程序及

CodeWarrior工程組織主要內(nèi)容

3.1通用I/O接口基本概念及連接方法3.2AW60的GPIO3.3開發(fā)套件CodeWarrior開發(fā)環(huán)境與

S08/S12/ColdFire寫入器3.4CW環(huán)境C語言工程文件的組織3.5第一個(gè)C語言工程:控制小燈閃爍3.6第一個(gè)匯編語言工程:控制小燈閃爍3.1通用I/O接口基本概念及連接方法1.I/O接口的概念

I/O接口,即輸入輸出接口,是微控制器同外界進(jìn)行交互的重要通道。這里的接口英文是port,也可以翻譯為“端口”,另一個(gè)英文單詞是interface,也翻譯為接口。在嵌入式系統(tǒng)中,接口千變?nèi)f化,種類繁多,有顯而易見的人機(jī)交互接口,如操縱桿、鍵盤、顯示器;也有無人介入的接口,如網(wǎng)絡(luò)接口、機(jī)器設(shè)備接口2.通用I/O

所謂通用I/O,也記為GPIO(GeneralPurposeI/O),即基本的輸入/輸出,有時(shí)也稱并行I/O,或普通I/O,它是I/O的最基本形式通用I/O接口一般應(yīng)具備

放置輸入或輸出控制字的寄存器放置工作方式控制字的寄存器放置要交換數(shù)據(jù)的寄存器放置反映工作狀態(tài)的寄存器3.上拉下拉電阻與輸入引腳的基本接法

輸入引腳有三種不同的連接方式:帶上拉電阻的連接、帶下拉電阻的連接和“懸空”連接。若MCU的某個(gè)引腳通過一個(gè)電阻接到電源(Vcc)上,這個(gè)電阻被稱為“上拉電阻”。與之相對應(yīng),若MCU的某個(gè)引腳通過一個(gè)電阻接到地(GND)上,則相應(yīng)的電阻被稱為“下拉電阻”。懸空的芯片引腳被上拉電阻或下拉電阻初始化為高電平或低電平。I/O輸入電路4.輸出引腳的基本接法作為通用輸出引腳,MCU內(nèi)部程序向該引腳輸出高電平或低電平來驅(qū)動(dòng)器件工作,即開關(guān)量輸出。如圖所示。其中O1引腳是發(fā)光二極管LED的驅(qū)動(dòng)引腳,當(dāng)O1引腳輸出高電平時(shí),LED不亮;當(dāng)O1引腳輸出低電平時(shí),LED點(diǎn)亮。O2引腳接蜂鳴器驅(qū)動(dòng)電路,當(dāng)O2腳輸出高電平時(shí),蜂鳴器響;O2腳輸出低電平時(shí),蜂鳴器不響I/O口輸出電路內(nèi)部結(jié)構(gòu)具有7個(gè)I/O端口(A,B,C,D,E,F,G)最多54個(gè)通用I/O管腳大多數(shù)I/O管腳和片內(nèi)其它外圍模塊 功能復(fù)用

Slide73.2AW60的GPIO外部管腳具有7個(gè)I/O端口(A,B,C,D,E,F,G)最多54個(gè)通用I/O管腳(不同封裝有別)A:8;B:8;C:7;D:8;E:8;F:8;G:7Slide83.2AW60的GPIO外部管腳具有7個(gè)I/O端口(A,B,C,D,E,F,G)38個(gè)通用I/O管腳(不同封裝有別)A:4;B:4;C:6;D:4;E:8;F:5;G:7Slide93.2AW60的GPIO外部管腳具有7個(gè)I/O端口(A,B,C,D,E,F,G)34個(gè)通用I/O管腳(不同封裝有別)A:2;B:4;C:6;D:4;E:8;F:4;G:6Slide103.2AW60的GPIO外部管腳I/O管腳功能復(fù)用

Slide11復(fù)位之后,共享的外圍模塊功能被禁止,因此I/O端口的所有管腳都是作為并行I/O管腳使用。3.2AW60的GPIO管腳方向控制

在MCU內(nèi)部每個(gè)并行端口都配有一個(gè)8位的數(shù)據(jù)寄存器(PTxD)和一個(gè)8位的數(shù)據(jù)方向寄存器(PTxDD,DD:DataDirection)。PTxDD的每一位(PTxDDn)和每一個(gè)I/O管腳相對應(yīng),控制它作輸入還是作輸出。PTxDDn=0:對應(yīng)管腳PTxDn設(shè)為輸入(上電復(fù)位缺省值)PTxDDn=1:對應(yīng)管腳PTxDn設(shè)為輸出Slide125.2IO模塊結(jié)構(gòu)及功能內(nèi)部輸入上拉

在MCU內(nèi)部每個(gè)并行端口都配有一個(gè)8位的輸入上拉控制寄存器(PTxPE),控制對應(yīng)的輸入管腳是否允許內(nèi)部輸入上拉。PTxPEn=0:對應(yīng)輸入管腳PTxDn禁止內(nèi)部輸入上拉(上電復(fù)位缺省值)PTxPEn=1:對應(yīng)輸入管腳PTxDn允許內(nèi)部輸入上拉——可避免懸空,降低功耗,提高系統(tǒng)可靠性Slide135.2IO模塊結(jié)構(gòu)及功能輸出驅(qū)動(dòng)能力選擇

在MCU內(nèi)部每個(gè)并行端口都配有一個(gè)8位的輸出驅(qū)動(dòng)控制寄存器(PTxDS),控制對應(yīng)的輸出管腳是否允許高驅(qū)動(dòng)輸出。PTxDSn=0:對應(yīng)輸出管腳PTxDn選擇低驅(qū)動(dòng)(缺省值,如和IC接口)PTxDSn=1:對應(yīng)輸出管腳PTxDn選擇高驅(qū)動(dòng)(如驅(qū)動(dòng)LED)Slide145.2IO模塊結(jié)構(gòu)及功能輸出驅(qū)動(dòng)能力選擇

在MCU內(nèi)部每個(gè)并行端口都配有一個(gè)8位的輸出驅(qū)動(dòng)控制寄存器(PTxDS),控制對應(yīng)的輸出管腳是否允許高驅(qū)動(dòng)輸出。PTxDSn=0:對應(yīng)輸出管腳PTxDn選擇低驅(qū)動(dòng)(缺省值,如和IC接口)PTxDSn=1:對應(yīng)輸出管腳PTxDn選擇高驅(qū)動(dòng)(如驅(qū)動(dòng)LED)Slide155.2IO模塊結(jié)構(gòu)及功能輸出擺率控制

在MCU內(nèi)部每個(gè)并行端口都配有一個(gè)8位的輸出擺率控制寄存器(PTxSE),控制對應(yīng)的輸出管腳是否允許擺率控制。PTxSEn=0:對應(yīng)輸出管腳PTxDn禁止擺率控制(缺省,信號(hào)跳變陡,如上圖黃)PTxSEn=1:對應(yīng)輸出管腳PTxDn允許擺率控制(信號(hào)跳變平坦,如上圖粉)Slide165.2IO模塊結(jié)構(gòu)及功能輸出擺率控制

在MCU內(nèi)部每個(gè)并行端口都配有一個(gè)8位的輸出擺率控制寄存器(PTxSE),控制對應(yīng)的輸出管腳是否允許擺率控制。PTxSEn=0:對應(yīng)輸出管腳PTxDn禁止擺率控制(缺省,信號(hào)跳變陡,40/11ns)PTxSEn=1:對應(yīng)輸出管腳PTxDn允許擺率控制(信號(hào)跳變平坦,75/35ns)Slide175.2IO模塊結(jié)構(gòu)及功能每個(gè)I/O管腳的功能受5個(gè)寄存器的控制:

PTxD(PortxDataRegister)PTxDD(DataDirectionforPortxRegister)PTxPE(PortxPullupEnableRegister)PTxDS(OutputDriveStrengthSelectionforPortx)PTxSE(OutputSlewRateControlEnableforPortx)對I/O管腳的控制正是通過對I/O寄存器的控制來實(shí)現(xiàn)I/O寄存器分布在MCU存儲(chǔ)區(qū)域的寄存器空間PTxD和PTxDD分布于0頁寄存器空間PTxPE、PTxDS和PTxSE分布于高頁寄存器空間Slide185.2IO模塊內(nèi)部寄存器每個(gè)I/O管腳的功能受5個(gè)寄存器的控制:

PTxD

(PortxDataRegister)

Slide195.2IO模塊內(nèi)部寄存器每個(gè)I/O管腳的功能受5個(gè)寄存器的控制:

PTxDD

(DataDirectionforPortxRegister)Slide205.2IO模塊內(nèi)部寄存器每個(gè)I/O管腳的功能受5個(gè)寄存器的控制:

PTxPE

(PortxPullupEnableRegister)Slide215.2IO模塊內(nèi)部寄存器每個(gè)I/O管腳的功能受5個(gè)寄存器的控制:

PTxDS

(OutputDriveStrengthSelectionforPortx)

Slide225.2IO模塊內(nèi)部寄存器每個(gè)I/O管腳的功能受5個(gè)寄存器的控制:

PTxSE

(OutputSlewRateControlEnableforPortx)

Slide235.2IO模塊內(nèi)部寄存器管腳復(fù)位狀態(tài)

PTxD=0PTxDD=

0管腳方向:輸入PTxPE=0上拉:禁止PTxDS=

0輸出驅(qū)動(dòng):低驅(qū)動(dòng)PTxSE=0輸出擺率:禁止MCU復(fù)位之后,所有I/O管腳都被配置為不帶內(nèi)部上拉電阻的高阻抗輸入管腳。為了避免懸空的輸入管腳產(chǎn)生而外的電流損耗,應(yīng)用程序中的復(fù)位初始化子程序要么允許片內(nèi)上拉電阻,要么改變未使用的管腳的方向?yàn)檩敵?,這樣管腳就不再懸空。應(yīng)用中沒有用到的I/O管腳必須要端接,這可以避免由于輸入懸空而導(dǎo)致電流過載并提高抗噪能力。端接方法有:把未使用管腳通過軟件配置為輸出,并輸出為高或低把未使用管腳通過軟件配置為輸入,并使用內(nèi)部或外部上拉電阻Slide245.2IO模塊內(nèi)部寄存器Slide255.2IO模塊應(yīng)用舉例[例5.1]根據(jù)圖示電路編寫程序,實(shí)現(xiàn)下述功能:將8位開關(guān)按鍵SW[7:0]的狀態(tài)實(shí)時(shí)地由8位發(fā)光二極管LED[7:0]顯示出來。SW開關(guān)撥到左邊時(shí),輸入電平為低,要求LED滅;SW開關(guān)撥到右邊時(shí),輸入電平為高,要求LED亮。Slide265.2IO模塊應(yīng)用舉例[例5.1]根據(jù)圖示電路編寫程序,實(shí)現(xiàn)下述功能:將8位開關(guān)按鍵SW[7:0]的狀態(tài)實(shí)時(shí)地由8位發(fā)光二極管LED[7:0]顯示出來。SW開關(guān)撥到左邊時(shí),輸入電平為低,要求LED滅;SW開關(guān)撥到右邊時(shí),輸入電平為高,要求LED亮。

INCLUDE MC9S08AW60.inc ;包含頭文件

ORG ROMStartIO_Init: LDA #$FF ;為所有I/O管腳配置內(nèi)部輸入上拉,降低系統(tǒng)功耗

STA PTAPE ;為PTA設(shè)定內(nèi)部輸入上拉

STA PTBPE ;為PTB設(shè)定內(nèi)部輸入上拉

STA PTCPE ;為PTC設(shè)定內(nèi)部輸入上拉

STA PTDPE ;為PTD設(shè)定內(nèi)部輸入上拉

STA PTEPE ;為PTE設(shè)定內(nèi)部輸入上拉

STA PTFPE ;為PTF設(shè)定內(nèi)部輸入上拉

STA PTGPE ;為PTG設(shè)定內(nèi)部輸入上拉

RTSMain: CLRA ;00H→A CLRX ;00H→X CLRH ;00H→H STA $1802 ;00h→SOPT,DisableCOP JSR IO_Init ;配置I/O管腳內(nèi)部輸入上拉,可選

MOV #$00,PTED ;初始化輸出端口的數(shù)據(jù)寄存器,LED全滅,習(xí)慣養(yǎng)成

LDA #%11111111 STA PTEDD ;初始化PTE口的八位管腳作為輸出

STA PTEDS ;PTE大電流驅(qū)動(dòng),使LED更亮,可選Again: LDA PTFD ;讀取PTF口的八位開關(guān)按鍵的值

STA PTED ;將按鍵值實(shí)時(shí)輸出至發(fā)光二極管

BRA Again ;死循環(huán)

ORG Vreset DC.W Main ;復(fù)位向量GPIO的基本編程方法:通過“數(shù)據(jù)方向寄存器”設(shè)置相應(yīng)引腳為輸入或輸出若是輸出引腳,則設(shè)置“端口引腳數(shù)據(jù)寄存器”引腳輸出高電平或低電平若是輸入引腳,則通過“端口引腳數(shù)據(jù)寄存器”獲得引腳的狀態(tài)3.2.2GPIO模塊寄存器GPIO模塊的每個(gè)口最多對應(yīng)8個(gè)GPIO引腳,但各個(gè)GPIO口的編程寄存器均為8位,沒有對應(yīng)引腳的位無效。

GPIO模塊寄存器的命名有一定的規(guī)范,所有寄存器都在AW60芯片寄存器及相關(guān)位定義頭文件AW60.h中定義。其中“端口數(shù)據(jù)寄存器”是PT+該端口的名稱+D。“端口輸出方向寄存器”是PT+該端口的名稱+DD。所有寄存器的位編號(hào)從0開始,且最低位編號(hào)為0。例如,一個(gè)8位寄存器的最低位編號(hào)為0,最高位編號(hào)為7。1.操作GPIO的基本寄存器端口數(shù)據(jù)方向寄存器DDR(PortDataDirectionRegister)這些位分別控制著端口引腳是輸入還是輸出,若為0,則引腳為輸入,若為1,則引腳為輸出。復(fù)位時(shí)為0x00端口數(shù)據(jù)寄存器PORT(PortDataRegister)若引腳被配置為輸出,PORTn

寄存器中每一位數(shù)據(jù)決定了對應(yīng)引腳的輸出電平。2.GPIO的基本編程方法舉例

以D口第3腳的GPIO功能為例為了程序通用性,對要設(shè)置的引腳進(jìn)行宏定義#defineRUN_PORTPORTD//燈使用的端口#defineRUNpin3//用RUNpin代替“3”當(dāng)需要對寄存器的具體位進(jìn)行設(shè)置,通常會(huì)使用位操作RUN_PORT&=0b11110111//表示將RUN_PORT的第3位設(shè)置為0RUN_PORT|=0b00001000//表示將RUN_PORT的第3位設(shè)置為1為了程序通用性,以上兩行代碼需要寫成:RUN_PORT&=~(0x01<<RUNpin)//將RUN_PORT的第3位設(shè)置為0RUN_PORT|=0x01<<RUNpin//將RUN_PORT的第3位設(shè)置為13.3開發(fā)套件CodeWarrior開發(fā)環(huán)境與

S08/S12/ColdFire寫入器3.3.1CodeWarrior開發(fā)環(huán)境簡介與基本使用方法1.CodeWarrior環(huán)境功能和特點(diǎn)CodeWarrior開發(fā)環(huán)境(簡稱CW環(huán)境)是Freescale公司研發(fā)的面向FreescaleMCU與DSP嵌入式應(yīng)用開發(fā)的商業(yè)軟件工具,它有3個(gè)版本:特別版、標(biāo)準(zhǔn)版、專業(yè)版。在其環(huán)境下可編制并調(diào)試AW60MCU的匯編語言、C語言和C++語言程序。

CW環(huán)境包括以下幾個(gè)功能模塊:編輯器、源碼瀏覽器、搜索引擎、構(gòu)造系統(tǒng)、調(diào)試器、工程管理器。2.CW環(huán)境安裝與設(shè)置

按照安裝向?qū)螕羰髽?biāo)就可以自動(dòng)完成,安裝完畢以后要上網(wǎng)注冊以申請使用許可(licensekey)。下面是CW環(huán)境運(yùn)行界面CW環(huán)境運(yùn)行界面3.3.2蘇州大學(xué)S08/S12/ColdFire三合一寫入器

開發(fā)人員可以通過S08/S12/ColdFire三合一寫入器對目標(biāo)板中的Flash進(jìn)行擦除、寫入等操作,將機(jī)器碼下載到Flash后,可以進(jìn)行程序的運(yùn)行、調(diào)試。S08/S12/ColdFire三合一寫入器實(shí)物圖3.3.3SD-AW60EVB硬件評估板SD-AW60EVB硬件評估板3.4CW環(huán)境C語言工程文件的組織3.4.1工程文件的邏輯組織結(jié)構(gòu)

右圖是小燈閃爍工程相關(guān)源文件的樹型(邏輯)結(jié)構(gòu)3.4.2工程文件的物理組織結(jié)構(gòu)

上一節(jié)從邏輯層面上闡述了些重要的內(nèi)容,這一節(jié)將帶著讀者去看看它們是如何分布在電腦硬盤中的,即在硬盤中的目錄分配情況。下面以小燈程序的文件架構(gòu)作說明小燈閃爍工程相關(guān)源文件的樹型(物理)結(jié)構(gòu)CodeWarrior生成的文件工程文件編譯、連接可執(zhí)行連接格式(.elf)目標(biāo)代碼文件(.S19)存儲(chǔ)器分配(elf.xMAP)3.4.3系統(tǒng)啟動(dòng)及初始化相關(guān)文件連接文件Project.prm關(guān)于#pragma指令的簡要說明start08.c文件及啟動(dòng)過程AW60映像寄存器頭文件MC9S08AW60.h3.4.4芯片初始化、主程序、中斷程序及其他文件系統(tǒng)初始化構(gòu)件(MCUInit.h與MCUInit.c)總頭文件Includes.h和主程序文件main.c中斷文件isr.h與isr.c芯片無關(guān)文件工程說明文件3.4.5機(jī)器碼文件(.s19文件)的簡明解釋目標(biāo)代碼文件是以S記錄(八種)格式表示的機(jī)器碼文件類型記錄長度地址編碼/數(shù)據(jù)校驗(yàn)和2字節(jié)2字節(jié)2、3或4字節(jié)0~n字節(jié)1字節(jié)S01E00002E2F4F424A2F4330315F4447313238B3CCD0F2BFF2BCDC2E739BCS1134000A7CF1FFF79003C1640F01801AE1D06181B…S113FFF0400A400A400A400A400A400A400A4000B7S9034000BC3.4.6lst文件與map文件

lst文件

C語言編譯后生成LST文件,在LST文件可查看機(jī)器碼、偏移地址、對應(yīng)的匯編語句信息,是分析程序的工具之一

map文件

這個(gè)文件告訴我們,源代碼被編譯連接后的機(jī)器碼,到底被下載到MCU內(nèi)存儲(chǔ)器中的什么地方,在高級(jí)調(diào)試時(shí),可能需要用到這些知識(shí)3.4.7如何在CW環(huán)境下新建一個(gè)S08工程第一種方法的操作步驟如下

選擇File->NewProject,彈出新建對話框,選擇“S08S08AFamilyAW60”,點(diǎn)擊“下一步”,選中“C”的選項(xiàng),如果程序中有匯編代碼則應(yīng)該選中“Relocatableassembly”,在右側(cè)Projectname中輸入工程名,在Location中選擇工程所在目錄。單擊確定即可第二種方法是使用已存的工程來建立另一個(gè)工程。

當(dāng)在已有工程的基礎(chǔ)上,做另一個(gè)項(xiàng)目時(shí),比如在Light工程的基礎(chǔ)上編寫LCD程序,需要進(jìn)行如下設(shè)置更改工程文件夾名為LCD更改Light.mcp為LCD.mcp文件夾Light_Data更改為LCD_Data將bin文件夾的所有內(nèi)容刪掉3.5第一個(gè)C語言工程:控制小燈閃爍3.5.1GPIO構(gòu)件GPIO構(gòu)件的頭文件GPIO.hGPIO構(gòu)件的程序文件GPIO.c3.5.2Light構(gòu)件Light構(gòu)件的頭文件Light.hLight構(gòu)件的程序文件Light.c3.5.3Light測試工程主程序3.5.4理解第一個(gè)C工程的執(zhí)行過程系統(tǒng)上電執(zhí)行Start08.c文件中的_Startup函數(shù)中斷程序的執(zhí)行3.6第一個(gè)匯編語言工程:控制小燈閃爍基于匯編語言編程給人的第一感覺是難,相對于其它的高級(jí)語言編程,匯編語言在編程的直觀性、編程效率等方面有所欠缺,但針對資源相對較少的單片機(jī)以及時(shí)序要求嚴(yán)格的硬件接口編程,掌握匯編語言還是必不可少的。使用匯編語言編程是基本功,學(xué)習(xí)和掌握匯編語言編程可以增加編程者的“內(nèi)力”,為使用高級(jí)語言編程打下堅(jiān)實(shí)的基礎(chǔ)。3.6.1匯編工程文件的組織小燈閃爍匯編工程相關(guān)源文件的樹型結(jié)構(gòu)主函數(shù)文件(main.asm)

主程序文件main.asm,包含有:工程描述:工程名、硬件連接索引、程序描述、目的、說明、注意、日期等總頭文件主程序:主程序一般包括初始化與主循環(huán)兩大部分。初始化包括堆棧初始化、系統(tǒng)初始化、內(nèi)存變量初始化、I/O端口初始化、中斷初始化等內(nèi)部直接調(diào)用子程序:若有不單獨(dú)存盤的子程序,建議放在此處外部子程序:若程序使用獨(dú)立存盤的子程序,可在此處使用“INCLUDE子程序文件名”將其包含。注意,獨(dú)立存盤的子程序必須與主程序在同一個(gè)目錄中中斷處理程序文件(isr.asm)框架程序文件匯編軟件構(gòu)件文件通用程序文件3.6.2Light構(gòu)件匯編程序包含:Light構(gòu)件的匯編頭文件Light.incLight構(gòu)件的匯編程序文件Light.asm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論