====================================================================================================================================
本章内容是為下面要進行的按鍵裸機驅動做準備,主要講解tiny6410的外部中斷:涉及GPIO複用引腳設定為特殊功能作為中斷源、子(外部)中斷源設定寄存器EINT以及VIC總中斷控制器等。
說明:VIC是ARM的總中斷控制器,EINT是外部子中斷源控制器,GPIO複用作為中斷産生源。EINT外部子中斷源控制器和VIC總中斷控制器相關寄存器的設定,決定了ARM核是否響應外部GPIO中斷源信号以及響應的優先級。
按鍵的硬體連接配接如下:
KEY1 | KEY3 | KEY5 | |
GPIO | GPN0/xEINT0 | GPN2/xEINT2 | GPN4/xEINT4 |
以下講解都将以按鍵為例:
一、GPIO作為中斷源
1.介紹
在以前常見的GPIO作為中斷源使用的時候,需要首先設定GPIO複用功能為特殊功能、即EINT(外部中斷引腳);同時該引腳可以捕捉什麼類型的輸入信号。
2.相應GPIO寄存器
rGPIONCON = 0x7F00 8830 //GPN設定,此時設定為EINT(外部中斷)模式
rGPIONPUD = 0x7F00 8838 //上拉/下拉使能
//注意該種模式下,我們就不需要設定rGPIODAT寄存器了。
二、對應的EINT即外部(子)中斷源設定寄存器(注意差別“三“中的總中斷控制寄存器)
rEINT0CON0 = 0x7F00 8900 //上述GPIO設定為EINT模式後,需要設定外部(子)中斷類型、GPIO的上升沿或下降沿等。
rEINT0MASK = 0x7F00 8920 //上述GPIO設定為EINT模式後,需要設定外部(子)中斷源屏蔽寄存器、取消屏蔽。
rEINT0PEND = 0x7F00 8924 //上述GPIO設定為EINT模式後,當有某個外部中斷産生時、相應位自動變0;我們在中斷服務程式中可以通過判斷位為0來看是共用總中斷号中的那個外部子中斷發生,進而做細化處理。當然,處理完後、這位必須由程式員軟體置1。
三、S3C6410的中斷控制器(也叫中斷總控制器,注意區分上述"二"中講解的子(外部)中斷源控制寄存器)
1.介紹
S3C6410中斷控制器由兩個VIC(Vectored Interrupt Controller, ARM PrimeCell)組成和兩個TZIC’s(TrustZone Interrupt Controller SP890),兩個TZIC’s和VIC’s很好的接合起來支援64個中斷源。
S3C6410的向量中斷控制器的特性如下:每個VIC控制器包含32向量中斷,固定的硬體中斷優先級别,可程式設計的中斷優先級,支援硬體的中斷優先級屏蔽,可程式設計的硬體的中斷優先級屏蔽,可産生一般中斷和快速中斷,可産生軟體中斷,原生的中斷狀态,中斷請求狀态,支援特權模式來限制通路。
2.VIC(全部中斷;包括内部中斷和外部總段)中斷控制器常用寄存器
向量中斷處理程式位址寄存器VIC0的位址是:
rVIC0INTENABLE = 0x7120 0010
//中斷使能寄存器;使能對應的中斷信号,使能中斷信号隻能通過該寄存器,如果禁用中斷使用VICxINTENCLEAR寄存器,在系統重置後,所有中斷都預設被禁用。
//我們要設定該寄存器,讓它響應外部EINT中斷
rVIC0VECTADDR = 0x7120 0100 ~ 0x7120 017C
//向量中斷處理程式位址寄存器:每個寄存器對應一個中斷源的ISR處理程式位址。
rVIC0ADDR = 0x7120 0F00
//向量位址寄存器:該寄存器裡存放的是目前正在處理的ISR中斷服務例程的位址。目前正在進行中斷時,隻能從該寄存器裡讀取其值,在處理完中斷時向該寄存器裡寫入任何值都可以清除其值。
向量中斷處理程式位址寄存器VIC1的位址是:
rVIC1INTENABLE = 0x7130 0010
//中斷使能寄存器;使能對應的中斷信号,使能中斷信号隻能通過該寄存器,如果禁用中斷使用VICxINTENCLEAR寄存器,在系統重置後,所有中斷都預設被禁用。
rVIC1VECTADDR = 0x7130 0100 ~ 0x7130 017C
//向量中斷處理程式位址寄存器:每個寄存器對應一個中斷源的ISR處理程式位址。
rVIC1ADDR = 0x7130 0F00
//向量位址寄存器:該寄存器裡存放的是目前正在處理的ISR中斷服務例程的位址。目前正在進行中斷時,隻能從該寄存器裡讀取其值,在處理完中斷時向該寄存器裡寫入任何值都可以清除其值。
四、總結
步驟:
1.設定rGPIONCON寄存器,讓GPN複用口為xEINT即外部中斷模式;
2.設定rGPIONPUD寄存器,讓GPN口使能上升和下降沿信号捕捉;
3.設定子(外部)中斷源控制器寄存器rEINT0CON0,設定中斷類型是GPN複用口xEINT的上升或下降沿;
4.設定子(外部)中斷源屏蔽寄存器rEINT0MASK,不要屏蔽我們使用的GPN口;
5.設定總中斷控制器VIC的rVIC0INTENABLE寄存器,已使能對該外部子中斷EINT對應總中斷的支援;
6.設定總中斷控制器VIC的rVICTADDR寄存器,即是中斷服務程式的入口位址。