通用I0接口 (GPI0)編程及看門狗定時(shí)器_第1頁
通用I0接口 (GPI0)編程及看門狗定時(shí)器_第2頁
通用I0接口 (GPI0)編程及看門狗定時(shí)器_第3頁
通用I0接口 (GPI0)編程及看門狗定時(shí)器_第4頁
通用I0接口 (GPI0)編程及看門狗定時(shí)器_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章通用IO接口(GPIO)編程及看門狗定時(shí)器主要內(nèi)容:(1)S3C2440芯片GPIO硬件概述;(2)GPIO相關(guān)的寄存器及功能;(3)GPIO編程應(yīng)用舉例(控制LED等的亮滅)(4)ARM裸機(jī)開發(fā)程序演示(5)S3C2440芯片看門狗定時(shí)器6.1S3C2440芯片GPIO概述6.1.1GPIO硬件概述S3C2440芯片上集成了ARM920T為核心的CPU和常用IO接口,芯片的背部有289個(gè)引腳,與其它部件如內(nèi)存、Flash存儲器、外設(shè)進(jìn)行連接;GPIO接口即通用輸入輸出(GeneralPurposeI/O)接口,是IO接口的一種,“通用”即該IO接口可以通過引腳外接不同種類的外部設(shè)備;S3C2440芯片集成的GPIO接口情況如下:(1)提供了9組GPIO接口GPA、GPB……GPJ,每組IO接口外接引腳數(shù)不等;(2)每組接口都有獨(dú)立的數(shù)據(jù)寄存器、控制寄存器、上拉電阻寄存器等用來設(shè)定GPIO端口的引腳功能、讀/寫端口引腳信息和確定端口上拉電阻;6.1.2GPIO相關(guān)寄存器及其功能IO接口是連接總線與外部設(shè)備的中間硬件,IO接口中通常包含了控制寄存器、數(shù)據(jù)寄存器等,CPU通過訪問寄存器間接的控制外部設(shè)備,與外設(shè)進(jìn)行數(shù)據(jù)交換;為什么要重點(diǎn)關(guān)注IO接口的寄存器?因此,需要重點(diǎn)關(guān)注兩方面:

(1)IO接口寄存器每位的功能;(2)寄存器的地址;S3C2440GPIO接口分為9組,每組的寄存器都包括控制寄存器、數(shù)據(jù)寄存器、上拉電阻使能寄存器;(1)控制寄存器GPxCON(x為A、B…..J)S3C2440GPIO接口引腳一般具備多種功能,控制寄存器用于選擇引腳的功能,每2位決定一個(gè)引腳的功能:

00表示輸入,01表示輸出,10表示特殊功能;11保留寄存器功能:訪問:控制寄存器可讀、寫;例如GPB包含GPB10-GPB0共11個(gè)引腳,控制寄存器GPBCON地址為0x56000010,功能如下:位控制的引腳功能描述[21:20]GPB1000=輸入;01=輸出;10=nXDREQ0;11=保留。[19:18]GPB900=輸入;01=輸出;10=nXDACK0;11=保留。[17:16]GPB800=輸入;01=輸出;10=nXDREQ1;11=保留。[15:14]GPB700=輸入;01=輸出;10=nXDACK1;11=保留。[13:12]GPB600=輸入;01=輸出;10=nXBREQ;

11=保留。[11:10]GPB500=輸入;01=輸出;10=nXBACK;

11=保留。[9:8]GPB400=輸入;01=輸出;10=TCLK[0];

11=保留。[7:6]GPB300=輸入;01=輸出;10=TOUT3;

11=保留。[5:4]GPB200=輸入;01=輸出;10=TOUT2;

11=保留。[3:2]GPB100=輸入;01=輸出;10=TOUT1;

11=保留。[1:0]GPB000=輸入;01=輸出;10=TOUT0;

11=保留。采用C語言設(shè)置寄存器GPBCON的值:#definerGPBCON(*(volatileunsigned*)0x56000010)要設(shè)置GPBCON第9、8位,7、6位,5、4位,3、2位,1、0位為01,其余位為00;先使用#define定義rGPBCON,則對rGPBCON讀寫即可訪問寄存器GPBCON;例1:設(shè)置GPB4至GPB0為輸出,其余引腳功能為輸入;rGPBCON=0b0000000000000101010101;或rGPBCON=0x155;PB10PB9PB8PB7PB6PB5PB4PB3PB2PB1PB0rGPBCON0x1550101010100000001000000將GPBCON第15、14位,9、8位變?yōu)?0,則GPB7、GPB4為輸入引腳;

將GPBCON第13、12位,7、6位,變?yōu)?1,則GPB6、GPB3為輸出引腳;例2:設(shè)置GPB7、GPB4為輸入,GPB6、GPB3為輸出,其余引腳功能保持不變;rGPBCON&=~((3<<14)|(3<<8)|(3<<12)|(3<<6));rGPBCON|=((1<<12)|(1<<6));為不影響寄存器其它位,先采用與運(yùn)算將要設(shè)置的位清零;

再采用或運(yùn)算按需要進(jìn)行設(shè)置1;PB10PB9PB8PB7PB6PB5PB4PB3PB2PB1PB0rGPBCON?01xxxxxx0001xx00xxxxxx(2)數(shù)據(jù)寄存器GPxDAT(x為A、B…..J)引腳功能為輸入時(shí),讀取可獲取引腳電平狀態(tài);

引腳功能為輸出時(shí),寫數(shù)可設(shè)置引腳輸出的電平;

其中,0對應(yīng)引腳為低電平,1為高電平;寄存器功能:訪問:數(shù)據(jù)寄存器可讀、寫;例如GPB包含GPB10-GPB0共11個(gè)引腳,數(shù)據(jù)寄存器GPBDAT地址為0x56000014;#definerGPBDAT(*(volatileunsigned*)0x56000014)讀數(shù)據(jù)寄存器:

unsignedintreg_data=rGPBDAT;寫數(shù)據(jù)寄存器:

rGPBDAT=0x55;(3)內(nèi)部上拉電阻使能寄存器GPxUP(x為A、B…..J)每位對應(yīng)控制1個(gè)引腳,為1時(shí)內(nèi)部上拉電阻無效,為0時(shí)上拉電阻使能;寄存器功能:訪問:內(nèi)部上拉電阻使能寄存器可讀、寫;上拉電阻與下拉電阻如下圖示意:上拉、下拉電阻可以使引腳處于一個(gè)確定的電平,提高抗干擾能力;河南理工大學(xué)通信工程系用于輸出時(shí),上拉電阻還可以提高引腳的驅(qū)動能力;例如GPB包含11個(gè)引腳,GPBUP第0位至第10位分別控制GPB0至GPB10的上拉電阻情況:GPBUP位引腳描述[10:0]GPB10:01=對應(yīng)的GPIO引腳上拉電阻不使能;0=對應(yīng)的GPIO引腳上拉電阻使能。6.3GPIO端口編程的應(yīng)用舉例1、S3C2440GPIO驅(qū)動LED燈實(shí)例①引腳功能設(shè)置為輸出;②設(shè)置引腳內(nèi)部上拉電阻使能;LED_1~LED_4分別與GFB5~GPB8相連通過GPB5~GPB8引腳的高低電平來控制發(fā)光二極管的亮與滅。1、當(dāng)這幾個(gè)引腳輸出高電平的時(shí)候發(fā)光二極管熄滅;2、當(dāng)這幾個(gè)引腳輸出低電平的時(shí)候發(fā)光二極管點(diǎn)亮。2、電路連接:3、編寫S3C2440不帶操作系統(tǒng)的程序,采用匯編和C混合編程;匯編程序通常寫在2440init.s文件中,為程序入口,主要完成:(4)初始化各工作模式的堆棧(主要是SP寄存器初始化);(3)初始化存儲器控制器硬件;(1)設(shè)定異常與中斷處理向量;(6)調(diào)用BMain跳到C語言編寫的Main函數(shù);(5)初始化程序所用內(nèi)存,將程序跳轉(zhuǎn)到SDRAM里執(zhí)行;(2)初始化時(shí)鐘;注意:涉及到一些知識尚未學(xué)習(xí),本章不要求看懂2440init.s,學(xué)完中斷、時(shí)鐘之后再理解,目前只編寫C語言部分程序;對于所有寄存器的#define定義,通常寫在2440addr.h文件,關(guān)于GPB的寄存器定義如下:#definerGPBCON(*(volatileunsigned*)0x56000010)#definerGPBDAT(*(volatileunsigned*)0x56000014)

#definerGPBUP(*(volatileunsigned*)0x56000018)在Main.c文件中實(shí)現(xiàn)C語言的Main函數(shù),注意不是小寫main;#include"2440addr.h“

voiddelay(void){ inti; for(i=0;i<10000000;i++);}

voidLed_Init(void){

rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));

rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16)); rGPBUP&=0x61F;//GPB5~GPB8引腳上拉電阻使能

rGPBDAT|=0x7FF;}delay函數(shù)用來進(jìn)行粗略的延時(shí)寄存器初始化初始化燈都不亮設(shè)置引腳為輸出模式接上頁程序:voidMain(void){ Led_Init();

while(1)

{ rGPBDAT&=0x61F; delay(); rGPBDAT|=0x7FF; delay(); }

}燈全亮燈全不亮實(shí)現(xiàn)4個(gè)LED燈閃爍11110001110PB10PB9PB8PB7PB6PB5PB4PB3PB2PB1PB0rGPBDAT0x61F實(shí)驗(yàn)效果4個(gè)LED燈實(shí)現(xiàn)雙閃隨堂練習(xí)1.修改程序?qū)崿F(xiàn)跑馬燈效果、閃爍的順序(4、3、2、1)并解釋關(guān)鍵代碼?#definerGPBCON(*(volatileunsigned*)0x56000010)#definerGPBDAT(*(volatileunsigned*)0x56000014)#definerGPBUP(*(volatileunsigned*)0x56000018)voiddelay(void){ inti; for(i=0;i<10000000;i++);}voidGPIO_Init(void){rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16)); rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16)); rGPBUP&=0x61F;//GPB5~GPB8引腳上拉電阻使能 rGPBDAT|=0x7FF;}voidLedTest(void){ volatileunsignedinti; while(1) {

for(i=0;i<4;i++) { rGPMDAT=~(1<<i); msDelay(10); } }}voidMain(void){ GPIO_Init(); LedTest();}1.rGPMDAT=~(1<<i);中1<<i表示將1左移動i位,其中i的取值為0、1、2、3;2.如果換成4位2進(jìn)制則依次為0001、0010、0100、1000,再次取反后四個(gè)數(shù)值依次為1110、1101、1011、0111;3、從電路圖上可以看出,發(fā)光二極管LED的一端經(jīng)過一個(gè)限流電阻連接到了ARM的GPIO,另一端接電源VCC。當(dāng)GPIO口為低電平時(shí),LED兩端產(chǎn)生電壓降,這時(shí)LED有電流通過并發(fā)光。反之當(dāng)GPIO為高電平時(shí),LED熄滅。注意兩滅之間有一定的延時(shí),以便人眼能夠區(qū)分出來。4、所以4個(gè)燈依次閃爍,且閃爍的順序從下往上。2.修改程序?qū)崿F(xiàn)跑馬燈效果、閃爍的順序(4、3、2、1)并解釋關(guān)鍵代碼?

總結(jié)1.S3C2440芯片的GPIO端口是多功能的,具體使用時(shí),應(yīng)根據(jù)需要編程設(shè)置端口控制寄存器,來確定其作用哪個(gè)具體的功能。2.本節(jié)針對GPIO端口用作普通輸入、輸出的功能,給出了一個(gè)編程示例,該示例采用的是端口B,對于其他GPIO端口用作輸入、輸出時(shí),編程也類似。1.S3c2440芯片中,若需要把GPE15和GPE14引腳設(shè)置成IIC總線引腳,rGPECON是端口E控制寄存器對應(yīng)的變量,那么,滿足該功能要求設(shè)置的語句是——————。(注意:該設(shè)置語句不能改變端口E其他引腳的原有功能)3、隨堂練習(xí):解析:1、根據(jù)資料s3c2440E組共有16根引腳;命名順序?yàn)镚PE0~GPE15;2、rGPECON=(rGPECON|0xa0000000)&0xafffffff。2.S3c2440芯片中,GPF3引腳作為普通的輸出引腳時(shí),若需要通過該引腳輸出一個(gè)“1”信號,但不能改變端口F其他引腳的狀態(tài),實(shí)現(xiàn)此功能的指令是——————。(注意:rGPFDAT是端口數(shù)據(jù)寄存器)解析:1、根據(jù)資料s3c2440F組共有8根引腳;命名順序?yàn)镚PF0~GPE7;2、GPFDAT是端口F數(shù)據(jù)寄存器,它是可讀、寫的。當(dāng)端口F作為輸出功能時(shí),向該寄存器寫入的數(shù)據(jù)將通過端口F輸出;3、rGPFDAT=rGPFDAT|0x08。一裸機(jī)開發(fā)的概念二裸機(jī)開發(fā)的模型三裸機(jī)開發(fā)實(shí)驗(yàn)6.4ARM裸機(jī)開發(fā)程序演示1.回顧什么叫裸機(jī)?裸機(jī)程序有哪些特點(diǎn)呢?2.裸機(jī)開發(fā)的模型編碼編譯調(diào)試下載3.裸機(jī)開發(fā)程序示例LED接口電路裸機(jī)程序分析、LED占用資源編譯驗(yàn)證6.5看門狗定時(shí)器

1、S3C2440芯片看門狗定時(shí)器的作用:當(dāng)系統(tǒng)程序出現(xiàn)功能錯(cuò)亂,引起系統(tǒng)程序死循環(huán)時(shí),能中斷該系統(tǒng)程序的不正常運(yùn)行,恢復(fù)系統(tǒng)程序的正常運(yùn)行。2、嵌入式系統(tǒng)由于運(yùn)行環(huán)境的復(fù)雜,既所處環(huán)境中有較強(qiáng)的干擾信號,或者系統(tǒng)底層程序本身的不完善,因而,不能排除系統(tǒng)程序不會出現(xiàn)死循環(huán)現(xiàn)象。

看門狗的作用

目錄看門狗的工作原理

內(nèi)部結(jié)構(gòu)及寄存器描述

應(yīng)用示例空格看門狗周期值設(shè)置在農(nóng)村,幾乎每家每戶都養(yǎng)狗,其主要是防止主人不在家的時(shí)候家里出現(xiàn)異常事故,比如被盜等。同樣,計(jì)算機(jī)中也有看門狗,其作用是復(fù)位嵌入式系統(tǒng)在無人值守的時(shí)候出現(xiàn)異常導(dǎo)致“死機(jī)”現(xiàn)象。人們?yōu)槭裁匆B(yǎng)狗?計(jì)算機(jī)為什么需要看門狗?狗看門狗來源于生活對象不同看門狗的作用電源供電干擾信號單片機(jī)正行運(yùn)行運(yùn)行出錯(cuò)看門狗復(fù)位看門狗使單片機(jī)從運(yùn)行錯(cuò)誤狀態(tài)恢復(fù)到正常運(yùn)行狀態(tài)??撮T狗(WatchDog)是計(jì)算機(jī)引入的一種專門的復(fù)位監(jiān)控電路。

一旦MCU運(yùn)行出現(xiàn)故障,就強(qiáng)制對MCU進(jìn)行硬件復(fù)位,確保MCU可靠和安全運(yùn)行。DVR視頻監(jiān)控系統(tǒng)看門狗嵌入式儀表智能電飯煲智能電冰箱網(wǎng)絡(luò)服務(wù)器看門狗的應(yīng)用場合

看門狗的作用目錄

看門狗的工作原理

內(nèi)部結(jié)構(gòu)及寄存器描述

應(yīng)用示例空格看門狗周期值設(shè)置看門狗的工作原理看門狗工作原理示意圖MCU完成一次喂狗操作在看門狗“饑餓”前等待下次喂狗程序異常,喂狗超時(shí),復(fù)位單片機(jī)123FD123FD…FD1功能2執(zhí)行故障…1復(fù)位信號CPU執(zhí)行順序喂狗周期喂狗周期小于看門狗等待時(shí)間,看門狗不動作程序出現(xiàn)異常超過喂狗時(shí)間看門狗輸出復(fù)位信號功能n執(zhí)行耗時(shí)喂狗耗時(shí)CPU復(fù)位后進(jìn)入正常工作狀態(tài)tt功能1功能2功能3喂狗喂狗超時(shí)復(fù)位MCU微處理器程序流程看門狗工作流程看門狗的工作流程看門狗的種類有兩種,他們的使用方法也不同??撮T狗外置的獨(dú)立看門狗控制器內(nèi)置看門狗改變輸入功能引腳的電平向看門狗寄存器寫入特定數(shù)據(jù)序列喂狗接口通過此喂狗接口實(shí)現(xiàn)喂狗操作操作方式操作方式一般情況下,看門狗主要是針對在實(shí)際應(yīng)用環(huán)境中出現(xiàn)強(qiáng)烈干擾而導(dǎo)致程序跑飛的意外情況。正行運(yùn)行運(yùn)行出錯(cuò)看門狗復(fù)位看門狗的正確用法有部分工程師,尤其是入門級水平的開發(fā)者,誤將看門狗的使用作為解決程序本身存在bug導(dǎo)致程序跑飛的問題。正行運(yùn)行運(yùn)行出錯(cuò)看門狗復(fù)位程序本身存在bug誤區(qū)看門狗使用的誤區(qū)喂狗不要在定時(shí)器程序中周期喂狗!否則芯片將無法從死循環(huán)中恢復(fù)!看門狗定時(shí)器的周期值應(yīng)小于功能模塊的最長運(yùn)行時(shí)間程序員應(yīng)該在功能模塊的前后均執(zhí)行喂狗操作。運(yùn)行120ms的功能模塊喂狗假設(shè)一個(gè)功能模塊的運(yùn)行時(shí)間為120ms,看門狗定時(shí)器的周期值為100ms在功能模塊運(yùn)行100ms內(nèi)插入喂狗指令歷史的經(jīng)驗(yàn)和教訓(xùn)

我們不能指望看門狗解決所有的問題,有時(shí)即使在軟件中加了看門狗程序,軟件仍然會死機(jī)。這原因是多方面的,比如程序因?yàn)槟承┊惓顩r而觸發(fā)死循環(huán),而該死循環(huán)中沒有喂狗程序。因此,想要保住系統(tǒng)的穩(wěn)定性,必須增強(qiáng)程序的健壯性,提高軟硬件的抗干擾能力。

1.S3C2440芯片的看門狗定時(shí)器有2種工作模式:

·帶中斷請求信號的常規(guī)時(shí)隙定時(shí)器。

·產(chǎn)生內(nèi)部復(fù)位信號的定時(shí)器,即當(dāng)定時(shí)器中的計(jì)數(shù)器值變?yōu)?時(shí),產(chǎn)生一個(gè)寬度為128個(gè)PCLK(系統(tǒng)時(shí)鐘周期)的復(fù)位脈沖信號??撮T狗定時(shí)器邏輯功能框圖如下:

看門狗定時(shí)器工作流程:1.通過上圖得知,看門狗定時(shí)器使用了系統(tǒng)時(shí)鐘PCLK作為唯一的時(shí)鐘源,PCLK信號經(jīng)過預(yù)分頻后再分割產(chǎn)生相應(yīng)的看門狗計(jì)數(shù)器的時(shí)鐘信號,該時(shí)鐘信號控制計(jì)數(shù)器進(jìn)行計(jì)數(shù),計(jì)數(shù)器值變?yōu)?后產(chǎn)生中斷信號或復(fù)位信號。計(jì)數(shù)時(shí)鐘周期公式1、t_watchdog=1/(PCLK/(Prescalervalue+1)/Division_factor);上公式中Prescalervalue(預(yù)分頻器)值、Division_factor(分割因子)通過看門狗定時(shí)器的控制寄存器(WTCON)進(jìn)行編程設(shè)定。2.S3C2440芯片的看門狗定時(shí)器邏輯中含有3個(gè)控制其操作的專用寄存器:看門狗控制寄存器(WTCON)計(jì)數(shù)常數(shù)寄存器(WTDAT)看門狗計(jì)數(shù)器寄存器(WTCNT)

(1)看門狗控制寄存器(WTCON)

用來控制看門狗定時(shí)器是否允許工作。其內(nèi)容是可讀/寫的(2)計(jì)數(shù)常數(shù)寄存器(WTDAT)計(jì)數(shù)常數(shù)寄存器用來存儲看門狗定時(shí)器的溢出時(shí)間間隔值,既從定時(shí)器的計(jì)數(shù)器開始工作,到計(jì)數(shù)器值變?yōu)?的時(shí)間間隔。WTDAT寄存器通常存儲的是一個(gè)計(jì)數(shù)常數(shù)。計(jì)數(shù)常數(shù)通過下面公式計(jì)算求得:

計(jì)數(shù)常數(shù)=所需時(shí)間間隔/計(jì)數(shù)時(shí)鐘周期

=所需時(shí)間間隔×(PCLK/(預(yù)分頻器值+1)/分割因子)

(3)看門狗計(jì)數(shù)器寄存器(WTCNT)看門狗計(jì)數(shù)器寄存器正常情況下用作減1計(jì)數(shù)器,它對計(jì)數(shù)時(shí)鐘信號進(jìn)行減1計(jì)數(shù),既每來一個(gè)計(jì)數(shù)時(shí)鐘脈沖,計(jì)數(shù)器內(nèi)的值減1。WTCNT寄存器在看門狗定時(shí)器工作時(shí)存儲當(dāng)前計(jì)數(shù)值??撮T狗定時(shí)器工作原理簡單小結(jié)1、在系統(tǒng)程序正常執(zhí)行的情況下,因?yàn)橄到y(tǒng)的軟件被設(shè)計(jì)成在看門狗定時(shí)器未達(dá)到超時(shí)限制前,周期性地重置看門狗。也就是說,設(shè)計(jì)者在設(shè)計(jì)系統(tǒng)時(shí),必須在一定的周期內(nèi),執(zhí)行讀寫看門狗定時(shí)器的指令,以達(dá)到重置看門狗定

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論