www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 四.ARM中斷程序編寫之外部中斷前言:VIC中斷控制器定義了4個外部中斷,中斷號為EINT0(14),EINT1(15),EINT2(16),EINT3(17)用來給用戶進(jìn)行編寫外部中斷(例如按鍵中斷。。。)1.在編寫外部中斷事先要對引

四.ARM中斷程序編寫之外部中斷

前言:VIC中斷控制器定義了4個外部中斷,中斷號為EINT0(14),

EINT1(15),EINT2(16),EINT3(17)用來給用戶進(jìn)行編寫外部中斷(例如按鍵中斷。。。)

1.在編寫外部中斷事先要對引腳功能選擇寄存器(PINSEL0)進(jìn)行配置

(參照具體型號的ARM數(shù)據(jù)手冊,此處以LPC2230進(jìn)行配置)在LPC2230中:

Eg:PINSEL1 = 3<<8;//設(shè)置管腳連接,P0.20設(shè)置為EINT3

2第二部外部中斷還要對外部中斷方式寄存器(EXTMODE)進(jìn)行配置來選擇每個EINT腳是電平觸發(fā)還是邊沿觸發(fā)。

A.EXTMODE(外部中斷方式寄存器):總共有8位

第0位:對第0位寫入1表示對EINT0使用邊沿觸發(fā),反之,寫入0表示對EINT0使用電平觸發(fā)。

第1位:功能和上面相似只是對EINT1進(jìn)行配置

第2位:是對EINT2進(jìn)行配置

第3位:是對EINT3進(jìn)行配置

第4~7位:保留

Eg;EXTMODE = 1<<3;//設(shè)置EINT3中斷為邊沿觸發(fā)模式

EXTMODE = 0<<3;//設(shè)置EINT3中斷為電平觸發(fā)模式

3第三部外部中斷還要對外部中斷極性寄存器進(jìn)行配置(EXTPOLAR)進(jìn)行配置(在電平觸發(fā)方式中,EXTPOLAR寄存器用來選擇相應(yīng)引腳是高電平或低電平有效。在邊沿觸發(fā)方式中,EXTPOLAR寄存器用來選擇引腳上升沿或下降沿有效)

A EXTPOLAT(外部中斷極性寄存器)總共有8位

第0位:是對EINT0進(jìn)行配置,對該位寫入1表示時表示

EINT0高電平或上升沿有效。反之,對該位寫入0表示表示EINT0低電平或下降沿有效

第1位:是對EINT1進(jìn)行配置。功能和上面類似。

第2位:是對EINT2進(jìn)行配置。功能和上面類似

第3位:是對EINT3進(jìn)行配置。功能和上面類似

第4~7位:保留位。

Eg:EXTPOLAR = 0x00;//設(shè)置EINT3中斷為下降沿觸發(fā)

EXTPOLAR = 0x00;//設(shè)置EINT3中斷為低電平有效

4.第四部配置中斷選擇寄存器VICIntSelect

功能和前面的類似

Eg; VICIntSelect = 0x00000000;//設(shè)置所有中斷分配為IRQ中斷

5若外部中斷為向量中斷則對向量控制寄存器0~15(VICVectCntl0~15)

進(jìn)行配置。若為非向量中斷則此步驟可省掉。

Eg: VICVectCntl0 = 0x20|17; //分配EINT3中斷到向量中斷0,0x20表示向量IRQ使能,1<<17表示EINT3在VIC通道17號

6配置外部中斷服務(wù)程序的地址:

a.若為向量中斷則配置向量地址寄存器(VICVectAddrx)

a.b.若為非向量中斷則配置默認(rèn)向量地址寄存器VICDefVectAddr

eg:VICVectAddr0 = (int)IRQ_Eint3;//設(shè)置向量中斷服務(wù)程序地址IRQ_Eint3(為函數(shù)名,可隨意起)

VICDefVectAddr = (int)IRQ_Eint3;//設(shè)置非向量中斷服務(wù)程序地址

7.清除外部中斷標(biāo)志

切記要在初始化時對EXTINT進(jìn)行初始化。否則程序會進(jìn)入異常。

配置外部中斷標(biāo)志寄存器(EXTINT)

A.通過對EXINT寄存器寫人1來將其清零來清除外部中斷標(biāo)志

B.EXTINT總共有8位

第0位:是對EINT0進(jìn)行配置,寫入1對外部中斷EINT0中斷進(jìn)行清除

第1位:是對EINT1進(jìn)行配置,寫入1對外部中斷EINT1中斷進(jìn)行清除。

第2位:是對EINT2進(jìn)行配置,寫入1對外部中斷EINT2中斷進(jìn)行清除。

第3位:是對EINT3進(jìn)行配置,寫入1對外部中斷EINT3中斷進(jìn)行清除。

第4~7位:保留位.

Eg:EXTINT = 1<<3;//清除EINT3中斷標(biāo)志

8.對中斷使能寄存器(VICIntEnable)進(jìn)行配置

功能和前面說的類似

Eg:VICIntEnable = 1<<17; //使能EINT3中斷,EINT3在VIC通道17號

注:編寫外部中斷程序時初始化實例:

1.初始化外部中斷3,用向量中斷,為邊沿觸發(fā)。

PINSEL1 = 3<<8; //設(shè)置管腳連接,P0.20設(shè)置為EINT3

EXTMODE = 1<<3;//設(shè)置EINT3中斷為邊沿觸發(fā)模式

EXTPOLAR = 0x00;//設(shè)置EINT3中斷為下降沿觸發(fā)

VICIntSelect = 0x00000000;//設(shè)置所有中斷分配為IRQ中斷

VICVectCntl0 = 0x20|17;//分配EINT3中斷到向量中斷0

VICVectAddr0 = (int)IRQ_Eint3;//設(shè)置中斷服務(wù)程序地址

EXTINT = 1<<3;//清除EINT3中斷標(biāo)志,次步不能少

VICIntEnable = 1<<17;//使能EINT3中斷,EINT3在VIC通道17號

2.初始化外部中斷為EINT3,用非向量中斷,為電平觸發(fā)

PINSEL1 = 3<<8; //設(shè)置管腳連接,P0.20設(shè)置為EINT3

EXTMODE = 0<<3;//設(shè)置EINT3中斷為電平觸發(fā)模式

EXTPOLAR = 0x00;//設(shè)置EINT3中斷為低電平觸發(fā)

VICIntSelect = 0x00000000;//設(shè)置所有中斷分配為IRQ中斷

VICDefVectAddr = (int)IRQ_Eint3;//設(shè)置中斷服務(wù)程序地址

EXTINT = 1<<3;//清除EINT3中斷標(biāo)志,次步不能少

VICIntEnable = 1<<17;//使能EINT3中斷,EINT3在VIC通道17號

注:1.在編寫中斷服務(wù)函數(shù)時,外部中斷為電平觸發(fā)和邊沿觸發(fā)有區(qū)別

3.在zlg模版中編寫中斷服務(wù)函數(shù)時,函數(shù)名的前綴是__irq

函數(shù)實例:

1>用外部中斷3,用向量中斷,為邊沿觸發(fā)的中斷服務(wù)函數(shù)的程序

void__irq IRQ_Eint3(void)

{

uint32i;

i = IO0SET;//讀取當(dāng)前B1控制值

if( (i&BEEPCON)==0 )//控制B1輸出取反

{

IO0SET = BEEPCON;

}

else

{

IO0CLR = BEEPCON;

}

EXTINT = 1<<3;//清除EINT3中斷標(biāo)志,1<<3等價于0x08

VICVectAddr = 0;//向量中斷結(jié)束

}

此中斷函數(shù)實現(xiàn)的功能時當(dāng)有按鍵按下時會蜂鳴。

注:1.每個中斷服務(wù)函數(shù)的函數(shù)名前綴必須加__irq

2在中斷服務(wù)程序最后要清除中斷標(biāo)志EXTINT = 1<<3,以及給VICVectAddr寄存器寫入0;

3.切記在初始化外部中斷時也要對EXTINT引腳進(jìn)行初始化,否則程序會出現(xiàn)異常。

2>初始化外部中斷為EINT3,用非向量中斷,為電平觸發(fā)

void__irq IRQ_Eint3(void)

{

uint32i;

i = IO0SET;//讀取當(dāng)前B1控制值

if( (i&BEEPCON)==0 )//控制B1輸出取反

{

IO0SET = BEEPCON;

}

else

{

IO0CLR = BEEPCON;

}

/*等待外部中斷信號恢復(fù)為高電平(若信號保持為低電平,中斷標(biāo)志會一直置位) */

while( (EXTINT&1<<3)!=0 )

{

EXTINT = 1<<3;//清除EINT3中斷標(biāo)志,

}

VICVectAddr = 0;//向量中斷結(jié)束

}

John哥說明:

在用電平觸發(fā)時在中斷服務(wù)程序最后要清除中斷標(biāo)志時,要使用

while( (EXTINT&1<<3)!=0 )

{

EXTINT = 1<<3;//清除EINT3中斷標(biāo)志,

}

(因為等待外部中斷信號恢復(fù)為高電平(若信號保持為低電平,中斷標(biāo)志會一直置位)這一點和邊沿觸發(fā)有區(qū)別。

注:

1.中斷使能清零寄存器VICIntEnClr:那1位置1,則用來屏蔽該位的中斷。

2. 當(dāng)有多個中斷源被設(shè)置

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