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

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 一.前言中斷的基本概念:1.在ARM中最多有32個中斷請求2.16個向量IRQ中斷(16個向量中斷的VIC中斷號已經(jīng)有系統(tǒng)定義好了。在p208中可查看)(16個向量中斷有16個優(yōu)先級,可動態(tài)分配給中斷請求)3.可產(chǎn)生

一.前言

中斷的基本概念:

1.在ARM中最多有32個中斷請求

2.16個向量IRQ中斷(16個向量中斷的VIC中斷號已經(jīng)有系統(tǒng)定義好了。在p208中可查看)

(16個向量中斷有16個優(yōu)先級,可動態(tài)分配給中斷請求)

3.可產(chǎn)生軟件中斷。

4.中斷的優(yōu)先級資源:中斷的優(yōu)先級資源就是CPU的中斷系統(tǒng)。以ARM7體系的CPU為例,最多可以有32個中斷資源。對于每個具體的中斷源可以將其設(shè)定為FIQ,使其具有最高優(yōu)先級,但FIQ最好是分配給唯一的中斷源,否則就失去意義;也可以設(shè)定為向量IRQ,使其具有中等優(yōu)先級,但向量IRQ的總數(shù)不能超過16個,這些中斷源優(yōu)先級的高低按向量編號從0(最高)到15(最低)排序;如果中斷源的個數(shù)超過17個,則剩余的中斷源只能設(shè)定為非向量IRQ,其優(yōu)先級最低。操作系統(tǒng)本身必須使用一個定時器中斷源來作為系統(tǒng)節(jié)拍中斷,它是操作系統(tǒng)工作的基礎(chǔ)。

二VIC向量中斷控制器

1.向量中斷控制器(VIC)具有32個中斷請求輸入

a.可以將其分為3類:

FIQ,向量IRQ中斷和非向量IRQ.

b.快速中斷請求(FIQ)要求具有最高優(yōu)先級。當(dāng)如果只有一個中斷被分配為FIQ時,可現(xiàn)實最短的FIQ等待時間,因為FIQ服務(wù)程序只要簡單地啟動對該中斷處理就可以了。

c.向量IRQ中斷具有中等優(yōu)先級。該優(yōu)先級可分配32個請求中的16個。32個請求中的任意一個都可以分配到16個向量IRQslot中的任意一個,其中slot()具有最高優(yōu)先級,而slot15則為最低優(yōu)先級。

d.非向量IRQ中斷的優(yōu)先級最低。

2在編寫中斷程序時最常用的寄存器

a.中斷使能寄存器(VICIntEnable)

(1)VICIntEnable寄存器有32為:從0~31給每一位寫1表示時該為對應(yīng)的中斷時能,寫入0表示禁止該位的中斷。(每一位對應(yīng)的中斷和VIC通道號對應(yīng)。

Eg:VICIntEnable=1<<6;表示使UART0能中斷,因為UART0對應(yīng)的中斷號即為6.

b.中斷選擇寄存器VICIntSelect

(1) VICIntSelect:該寄存器有32位(0~31)將32個中斷請求分別分配為FIQ或IRQ ,

(2)給對應(yīng)位寫入1表示給對應(yīng)的中斷請求分配為FIQ

(3)給對應(yīng)位寫入0表示給對應(yīng)的中斷請求分配為IRQ

C.向量控制寄存器0~15(VICVectCntl0~15)

(1)如果給一個中斷指定的向量控制寄存器為VICVectl0則表示該中斷具有最高中斷優(yōu)先級。反之,如果給一個中斷指定的向量控制寄存器為VICVectl15則表示該中斷具有最低優(yōu)先級。

(2)VICVectCntlx(x指0~15)該寄存器為6位。

0~4:用來指定中斷編號

5:為1表示向量使能

Eg;VICVectCntl0=0x20|6(表示給UART0分配向量控制寄存器,且它的優(yōu)先級是最高的(0表示最高優(yōu)先級)

D.向量地址寄存器(VICVectAddrx)

(1)當(dāng)發(fā)生一個IRQ中斷時,VIC會將對應(yīng)的IRQ服務(wù)程序地址存入該寄存器,IRQ中斷入口處的程序可讀寄存器并跳轉(zhuǎn)到讀出的地址,執(zhí)行相應(yīng)的中斷服務(wù)程序

(注:該寄存器應(yīng)該在ISR快結(jié)束時執(zhí)行一次些操作(寫入的值一般為0)以遍更新優(yōu)先級硬件。)

(2)在發(fā)生中斷時,給中斷分配中斷地址時應(yīng)該和給該中斷分配的中斷控制寄存器的號一致

Eg: VICVectCntl0=0x20|6;

VICVectAddr0=(uint32)UART0_IRQ(自己編寫的終端函數(shù)的地址)

注:在編寫向量中斷程序時,必須對他進行初始化。一般的程序過程是:首先:用VICIntSelect寄存器對該中斷進行選擇時IRQ中斷還是FIQ中斷。

其次:用VICVectCntlx給該中斷分配向量終端控制寄存器(其中x的值越小,中斷優(yōu)先級越高。

再次:用VICVectAddrx給該中斷分配中斷地址:

最后:用VICIntEnable使該中斷使能:

程序事例:

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

VICVectCntl0 = 0x26; // UART0中斷分配到IRQ slot 0,即優(yōu)先級最高

VICVectAddr0 = (int)IRQ_UART0;//設(shè)置UART0向量地址

VICIntEnable = 0x00000040;//使能UART0中斷

三非向量中斷:

1.常用寄存器:

a中斷使能寄存器(VICIntEnable)

VICIntEnable寄存器有32為:從0~31給每一位寫1表示時該為對應(yīng)的中斷時能,寫入0表示禁止該位的中斷。(每一位對應(yīng)的中斷和VIC通道號對應(yīng)。

Eg:VICIntEnable=1<<6;表示使UART0能中斷,因為UART0對應(yīng)的中斷號即為6.

b中斷選擇寄存器VICIntSelect

(1) VICIntSelect:該寄存器有32位(0~31)將32個中斷請求分別分配為FIQ或IRQ ,

(2)給對應(yīng)位寫入1表示給對應(yīng)的中斷請求分配為FIQ

(3)給對應(yīng)位寫入0表示給對應(yīng)的中斷請求分配為IRQ

注:以上和向量中斷的用法一致,一下是不同點

c.默認向量地址寄存器VICDefVectAddr

該寄存器保存了非向量IRQ中斷服務(wù)程序IRQ的地址

注:在編寫非向量中斷程序時,必須對他進行初始化。一般的程序過程是:

a.首先:用VICIntSelect寄存器對該中斷進行選擇時IRQ中斷還是FIQ中斷。

b.其次:用VICDefVectAddr寄存器存放非向量中斷的地址

c.最后:用VICIntEnable使該中斷使能

程序事例:

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

VICDefVectAddr0 = (int)IRQ_UART0; //設(shè)置UART0非向量中斷的地址

VICIntEnable = 0x00000040;//使能UART0中斷

四綜合:一個程序中既有向量中斷和非向量中斷

Eg;假設(shè)UART0和SPI0產(chǎn)生中斷請求,它們被分配為向量IRQ(UART0的優(yōu)先級高于SPI0),而UARTI和I2C產(chǎn)生非向量IRQ,

程序:

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

VICVectCntl0=0x26//UART0通道號為6優(yōu)先級為0(最高)

VICVectCntl1=0x2A//SPI0通道號為10優(yōu)先級為1

VICVectAddr0=(int)UART0_IRQ;

VICVectAddr1=(int)SPI0_IRQ;

VICDefAddr=//保存非向量UART1和I2C終端服務(wù)的地址;

VICIntEnable=0x6c0//SPI0,I2C,UART1,UART0在bit10,bit9,bit7和bit6=1


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