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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章第一個樣例程序及

CodeWarrior工程組織主要內容

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PTxD

(PortxDataRegister)

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

PTxDD

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

PTxPE

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

PTxDS

(OutputDriveStrengthSelectionforPortx)

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

PTxSE

(OutputSlewRateControlEnableforPortx)

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

PTxD=0PTxDD=

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

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

INCLUDE MC9S08AW60.inc ;包含頭文件

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

STA PTAPE ;為PTA設定內部輸入上拉

STA PTBPE ;為PTB設定內部輸入上拉

STA PTCPE ;為PTC設定內部輸入上拉

STA PTDPE ;為PTD設定內部輸入上拉

STA PTEPE ;為PTE設定內部輸入上拉

STA PTFPE ;為PTF設定內部輸入上拉

STA PTGPE ;為PTG設定內部輸入上拉

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

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

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

STA PTEDS ;PTE大電流驅動,使LED更亮,可選Again: LDA PTFD ;讀取PTF口的八位開關按鍵的值

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

BRA Again ;死循環(huán)

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

GPIO模塊寄存器的命名有一定的規(guī)范,所有寄存器都在AW60芯片寄存器及相關位定義頭文件AW60.h中定義。其中“端口數據寄存器”是PT+該端口的名稱+D?!岸丝谳敵龇较蚣拇嫫鳌笔荘T+該端口的名稱+DD。所有寄存器的位編號從0開始,且最低位編號為0。例如,一個8位寄存器的最低位編號為0,最高位編號為7。1.操作GPIO的基本寄存器端口數據方向寄存器DDR(PortDataDirectionRegister)這些位分別控制著端口引腳是輸入還是輸出,若為0,則引腳為輸入,若為1,則引腳為輸出。復位時為0x00端口數據寄存器PORT(PortDataRegister)若引腳被配置為輸出,PORTn

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

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

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

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

按照安裝向導單擊鼠標就可以自動完成,安裝完畢以后要上網注冊以申請使用許可(licensekey)。下面是CW環(huán)境運行界面CW環(huán)境運行界面3.3.2蘇州大學S08/S12/ColdFire三合一寫入器

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

右圖是小燈閃爍工程相關源文件的樹型(邏輯)結構3.4.2工程文件的物理組織結構

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

lst文件

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

map文件

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

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

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

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

溫馨提示

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

評論

0/150

提交評論