日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]要想正確地執(zhí)行2440的外部中斷,一般需要完成兩個部分內容:中斷初始化和中斷處理函數。 在具體執(zhí)行中斷之前,要初始化好要用的中斷。2440的外部中斷引腳EINT與通用IO引腳F和G復用,要想使用中斷功能,就要把相應的

要想正確地執(zhí)行2440的外部中斷,一般需要完成兩個部分內容:中斷初始化和中斷處理函數。
在具體執(zhí)行中斷之前,要初始化好要用的中斷。2440的外部中斷引腳EINT與通用IO引腳F和G復用,要想使用中斷功能,就要把相應的引腳配置成中斷模式,如我們想把端口F0設置成外部中斷,而其他引腳功能不變,則GPFCON=(GPFCON & ~0x3) | 0x2。配置完引腳后,還需要配置具體的中斷功能。我們要打開某一中斷的屏蔽,這樣才能響應該中斷,相對應的寄存器為INTMSK;還要設置外部中斷的觸發(fā)方式,如低電平、高電平、上升沿、下降沿等,相對應的寄存器為EXTINTn。另外由于EINT4到EINT7共用一個中斷向量,EINT8到EINT23也共用一個中斷向量,而INTMSK只負責總的中斷向量的屏蔽,要具體打開某一具體的中斷屏蔽,還需要設置EINTMASK。上面介紹的是最基本的初始化,當然還有一些其他的配置,如當需要用到快速中斷時,要使用INTMOD,當需要配置中斷優(yōu)先級時,要使用PRIORITY等。
中斷處理函數負責執(zhí)行具體的中斷指令,除此以外還需要把SRCPND和INTPND中的相應的位清零(通過置1來清零),因為當中斷發(fā)生時,2440會自動把這兩個寄存器中相對應的位置1,以表示某一中斷發(fā)生,如果不在中斷處理函數內把它們清零,系統(tǒng)會一直執(zhí)行該中斷函數。另外還是由于前面介紹過的,有一些中斷是共用一個中斷向量的,而一個中斷向量只能有一個中斷執(zhí)行函數,因此具體是哪個外部中斷,還需要EINTPEND來判斷,并同樣還要通過置1的方式把相應的位清零。一般來說,使用__irq這個關鍵詞來定義中斷處理函數,這樣系統(tǒng)會為我們自動保存一些必要的變量,并能夠在中斷處理函數執(zhí)行完后正確地返回。還需要注意的是,中斷處理函數不能有返回值,也不能傳遞任何參數。
為了把這個中斷處理函數與在2440啟動文件中定義的中斷向量表相對應上,需要先定義中斷入口地址變量,該中斷入口地址必須與中斷向量表中的地址一致,然后把該中斷處理函數的首地址傳遞給該變量,即中斷入口地址。
下面就是一個外部中斷的實例。開發(fā)板上一共有四個按鍵,分別連到了EINT0,EINT1,EINT2和EINT4,我們讓這四個按鍵分別控制連接在B5~B8引腳上的四個LED:按一下鍵則LED亮,再按一下則滅:

#define _ISR_STARTADDRESS 0x33ffff00

#define U32 unsigned int

#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20))
#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24))
#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28))
#define pISR_EINT4_7(*(unsigned *)(_ISR_STARTADDRESS+0x30))

#define rSRCPND (*(volatile unsigned *)0x4a000000) //Interrupt request status
#define rINTMSK (*(volatile unsigned *)0x4a000008) //Interrupt mask control
#define rINTPND (*(volatile unsigned *)0x4a000010) //Interrupt request status

#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
#define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control B

#define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control

#define rEXTINT0 (*(volatile unsigned *)0x56000088)//External interrupt control register 0
#define rEINTMASK(*(volatile unsigned *)0x560000a4) //External interrupt mask
#define rEINTPEND(*(volatile unsigned *)0x560000a8) //External interrupt pending

static void __irq Key1_ISR(void) //EINT1
{
int led;
rSRCPND = rSRCPND | (0x1<<1);
rINTPND = rINTPND | (0x1<<1);
led = rGPBDAT & (0x1<<5);
if (led ==0)
rGPBDAT = rGPBDAT | (0x1<<5);
else
rGPBDAT = rGPBDAT & ~(0x1<<5);
}

static void __irq Key2_ISR(void) //EINT4
{
int led;
rSRCPND = rSRCPND | (0x1<<4);
rINTPND = rINTPND | (0x1<<4);
if(rEINTPEND&(1<<4))
{
rEINTPEND = rEINTPEND | (0x1<<4);
led = rGPBDAT & (0x1<<6);
if (led ==0)
rGPBDAT = rGPBDAT | (0x1<<6);
else
rGPBDAT = rGPBDAT & ~(0x1<<6);
}
}

static void __irq Key3_ISR(void) //EINT2
{
int led;
rSRCPND = rSRCPND | (0x1<<2);
rINTPND = rINTPND | (0x1<<2);
led = rGPBDAT & (0x1<<7);
if (led ==0)
rGPBDAT = rGPBDAT | (0x1<<7);
else
rGPBDAT = rGPBDAT & ~(0x1<<7);
}

void __irq Key4_ISR(void) //EINT0
{
int led;
rSRCPND = rSRCPND | 0x1;
rINTPND = rINTPND | 0x1;
led = rGPBDAT & (0x1<<8);
if (led ==0)
rGPBDAT = rGPBDAT | (0x1<<8);
else
rGPBDAT = rGPBDAT & ~(0x1<<8);
}

void Main(void)
{
int light;

rGPBCON = 0x015550;
rGPBUP = 0x7ff;
rGPFCON = 0xaaaa;

rSRCPND = 0x17;
rINTMSK = ~0x17;
rINTPND =0x17;
rEINTPEND = (1<<4);
rEINTMASK = ~(1<<4);
rEXTINT0 = 0x20222;

light = 0x0;
rGPBDAT = ~light;

pISR_EINT0 = (U32)Key4_ISR;
pISR_EINT1 = (U32)Key1_ISR;
pISR_EINT2 = (U32)Key3_ISR;
pISR_EINT4_7 = (U32)Key2_ISR;

while(1)
;
}

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

MCS-51單片機有兩個外部中斷源INT0和INT1,它們分別在P3.2和P3.3引腳出現低電平或下降沿信號時向單片機發(fā)出中斷請求。外部中斷可用于檢測單片機外部發(fā)生的事件,如鍵盤敲擊和特定脈沖發(fā)生的次數等。

關鍵字: 51單片機 外部中斷

外部中斷是單片機實時地處理外部事件的一種機制。具體指的是,當某種外部事件發(fā)生時,單片機的中斷系統(tǒng)迫使CPU暫停正在執(zhí)行的程序,轉而去進行中斷事件的處理;中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。這里我們以Nuc...

關鍵字: MCU 外部中斷 ST

STM32CubeMX是官方推薦的配置軟件,而HAL庫也是取代之前的庫函數的通用庫,所以STM32CubeMX+HAL庫是當前主流的工程創(chuàng)建方式,HAL庫的可移植性也高于被取代的庫函數。 之前在[程序員小哈]的公眾號中寫...

關鍵字: LED 外部中斷

  本文根據網絡視頻采集的需要,將網絡傳輸與視頻采集相結合,設計了以S3C2440為核心的USB攝像頭視頻采集和嵌入式Linux系統(tǒng)下的視頻服務器,從而實現了遠程網絡視頻信息采集。   

關鍵字: s3c2440 視頻采集 usb攝像頭

         之前在提起自動化或是智能化時,人們會不自覺的想到工業(yè)生產,這是因為自動化這個字眼進入中國,確實是以工業(yè)

關鍵字: 嵌入式 Linux s3c2440 視頻采集

  引言   隨著科技的不斷發(fā)展,以數據業(yè)務為主的固定寬帶無線接入技術發(fā)展已經很成熟,而移動寬帶無線通信技術還并沒有得到廣泛的應用。由于移動寬帶無線接入系統(tǒng)需要解決帶寬、移動性和覆蓋范圍

關鍵字: IPv6 s3c2440 x86 架構

  1 引言   人們生活水平的提高以及科技的進步,特別是計算機技術、網絡技術和通信技術的發(fā)展,智能家居將慢慢成為未來家居生活的發(fā)展方向。1984年在美國誕生了世界上第一座智能家居建筑,

關鍵字: boa nrf24l01 s3c2440 智能家居

1.ARM中一些常見英文縮寫解釋 MSB:最高有效位; LSB:最低有效位; AHB:先進的高性能總線; VPB:連接片內外設功能的VLSI外設總線; EMC:外部存儲器控制器; MAM:存儲器加速模塊; VIC:向量中...

關鍵字: ARM THUMB I2C 外部中斷

我們知道2440開發(fā)流程為:移植uboot--》移植內核---》掛接根文件系統(tǒng)。我們移植完內核需要掛接根文件系統(tǒng),那么首先我們必須擁有根文件系統(tǒng)。如何來制作我們的根文件系統(tǒng)呢?第一步:在linux下建

關鍵字: s3c2440 根文件系統(tǒng)

1.TQ2440u-boot-1.1.6修改文件所在的路徑是u-boot-1.1.6includeconfigsEmbedSky.h將#defineLCD_TFTxxx(LCD類型)W353.5寸TFT4802724.3...

關鍵字: s3c2440 lcd參數
關閉