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

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

一.前言

中斷的基本概念:

1.在ARM中最多有32個(gè)中斷請(qǐng)求

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

(16個(gè)向量中斷有16個(gè)優(yōu)先級(jí),可動(dòng)態(tài)分配給中斷請(qǐng)求)

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

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

二VIC向量中斷控制器

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

a.可以將其分為3類:

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

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

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

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

2在編寫(xiě)中斷程序時(shí)最常用的寄存器

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

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

Eg:VICIntEnable=1<<6;表示使UART0能中斷,因?yàn)閁ART0對(duì)應(yīng)的中斷號(hào)即為6.

b.中斷選擇寄存器VICIntSelect

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

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

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

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

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

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

0~4:用來(lái)指定中斷編號(hào)

5:為1表示向量使能

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

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

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

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

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

Eg: VICVectCntl0=0x20|6;

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

注:在編寫(xiě)向量中斷程序時(shí),必須對(duì)他進(jìn)行初始化。一般的程序過(guò)程是:首先:用VICIntSelect寄存器對(duì)該中斷進(jìn)行選擇時(shí)IRQ中斷還是FIQ中斷。

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

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

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

程序事例:

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

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

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

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

三非向量中斷:

1.常用寄存器:

a中斷使能寄存器(VICIntEnable)

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

Eg:VICIntEnable=1<<6;表示使UART0能中斷,因?yàn)閁ART0對(duì)應(yīng)的中斷號(hào)即為6.

b中斷選擇寄存器VICIntSelect

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

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

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

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

c.默認(rèn)向量地址寄存器VICDefVectAddr

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

注:在編寫(xiě)非向量中斷程序時(shí),必須對(duì)他進(jìn)行初始化。一般的程序過(guò)程是:

a.首先:用VICIntSelect寄存器對(duì)該中斷進(jìn)行選擇時(shí)IRQ中斷還是FIQ中斷。

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

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

程序事例:

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

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

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

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

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

程序:

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

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

VICVectCntl1=0x2A//SPI0通道號(hào)為10優(yōu)先級(jí)為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)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉