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

當前位置:首頁 > 單片機 > 單片機
[導讀] 一.在uc/os操作系統(tǒng)上設計中斷函數(shù)時所要考慮的一些問題:1 .操作系統(tǒng)本身必須使用一個定時器中斷源來作為系統(tǒng)節(jié)拍中斷,它是操作系統(tǒng)工作的基礎。2.只要沒有關閉中斷,中斷服務程序就可以中斷任何任務

一.在uc/os操作系統(tǒng)上設計中斷函數(shù)時所要考慮的一些問題:

1 .操作系統(tǒng)本身必須使用一個定時器中斷源來作為系統(tǒng)節(jié)拍中斷,它是操作系統(tǒng)工作的基礎。

2.只要沒有關閉中斷,中斷服務程序就可以中斷任何任務的運行,所以將中斷服務程序看成比最高優(yōu)先級(0)級的任務還要高的任務。

3.中斷服務程序的功能應該盡量簡單,只要將獲取的異步事件通信給關聯(lián)任務即可,后續(xù)處理由其關聯(lián)任務完成。

4.實時操作系統(tǒng)UC/OS移植到ARM7體系的CPU上時,沒有對FIQ進行處理,即FIQ是不受操作系統(tǒng)管理的。由于沒有操作系統(tǒng)介入,F(xiàn)IQ的ISR無法與關聯(lián)任務進行通信,所獲取的信息不能及時得到關聯(lián)任務的處理,故只能以原始形式保存在一個緩沖區(qū)內(nèi),等待以后進行離線處理。

注:由于使用FIQ方式進行采樣,其ISR不受操作系統(tǒng)管理,所以只能用使能中斷源和關閉中斷源來控制FIQ中斷過程。

二.在UC/OS操作系統(tǒng)上編寫ISR

1.在UC/OS上編寫ISR和在裸機上編寫ISR時的區(qū)別

l進入中斷:除了要保護現(xiàn)場外,還需要調(diào)用進入中斷服務函數(shù),用來通知實時操作系統(tǒng),使UC/OS操作系統(tǒng)掌握當前中斷的嵌套深度

l運行功能代碼:除了完成ISR的實質(zhì)公能的代碼外,還要實現(xiàn)與其他任務進行通信的功能。通過這種通信功能使關聯(lián)任務得到同步信號或數(shù)據(jù),從而進入就緒狀態(tài)。但是,在ISR中不允許調(diào)用延遲函數(shù)和可能被掛起的系統(tǒng)服務函數(shù)。

2.如何在UC/OS操作系統(tǒng)上編寫ISR?

在UC/OS中用中斷程序由以下幾部分組成:

l添加中斷句柄

l配置和初始化中斷源

l配置向量中斷控制器

l編寫中斷服務函數(shù)

1>.中斷句柄:

在UC/OS操作系統(tǒng)上編寫中斷程序,必須在文件IRQ.S的尾部添加中斷句柄:

XXX_HandlerHANDLERXXX_Exception

lXXX_Handler是ISR的起始地址,即匯編的起始地址,在初始化化向量控制器時作為中斷向量地址使用。其中的XXX可根據(jù)具體的中斷源名稱命名

lHANDLER是句柄關鍵字,必須大寫。

lXXX_Exception:是用C語言編寫的功能函數(shù)名,該函數(shù)用匯編調(diào)用。其中的XXX可根據(jù)具體的中斷源名稱命名

Eg:如果要使用UART0作為一個中斷源,用來接收數(shù)據(jù),則需要在文件IRQ.S的尾部添加一個中斷句柄:

Timer0_HandlerHANDLER Timer0_Exception

UART0_HandlerHANDLER UART0_Exception

RTC_HandlerHANDLERRTC_Exception

EINT3_HandlerHANDLEREINT3_Exception

2>.配置和初始化中斷源

1>在一個中斷源開始之前,需要配置和初始化中斷源,使它按預定的方式工作。

還是以UART0為例:

/***********************************************************

*作者:tiger-john

*時間:2011年1月29日

*名稱:UART0_Init

*功能:UART0初始化通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗

*入口參數(shù):bps串口波特率

*出口參數(shù):無

***********************************************************/

voidUART0_Init(uint32 bps)

{

uint16Fdiv;

PINSEL0 = (PINSEL0 & ~(0xf) " 0x05) ;//設置UART0的引腳

U0LCR = 0x83;

Fdiv = (Fpclk>>4)/bps;

U0DLM = Fdiv>>8;

U0DLL = Fdiv%256;

U0LCR = 0x03;

U0FCR = 0x41;//使能FIFO,并設置觸發(fā)點為4字節(jié)

U0IER = 0x01;//允許RBR中斷,即接收中斷

}

3>.向量中斷控制器配置

為了使中斷信號和對應的ISR聯(lián)系起來,還必需對向量中斷控制器進行配置。對于通道號為X的中斷源XXXX,如果配置中斷優(yōu)先級為Y,則需要在target.c文件中的

VICInit ()函數(shù)中添加代碼:

//聲明中斷源XXX的中斷服務函數(shù)ISR

externvoidXXXX_Handler(void);

//將ISR入口地址填入向量寄存器Y

VICVectAddrY = (uint32)XXXX_Handler;

//向量中斷方式,通道號為X

VICVectCntlY = (0x20 | X);

void VICInit(void)

{

extern void IRQ_Handler(void);

extern void Timer0_Handler(void);

extern void UART0_Handler(void);

extern void RTC_Handler(void);

extern void EINT3_Handler(void);

VICIntEnClr = 0xffffffff;

VICDefVectAddr = (uint32)IRQ_Handler;

VICVectAddr0 = (uint32)Timer0_Handler;

VICVectCntl0 = (0x20 | 0x04);

VICIntEnable = 1 << 4;

VICVectAddr1 = (uint32)UART0_Handler;

VICVectCntl1 = (0x20 | 6);

VICVectAddr2 = (uint32)RTC_Handler;

VICVectCntl2 = (0x20 | 13);

VICIntEnable = 1 << 13;

VICVectAddr3 = (uint32)EINT3_Handler;

VICVectCntl3 = (0x20 | 17);

VICIntEnable = 1 << 17;

}

4>.編寫中斷服務程序程序的功能函數(shù)

voidXXXX_Exception(void)

{

OS_ENTER_CRITICAL();//關中斷

清除中斷源;

通知中斷控制器中斷結束;

OS_EXIT_CRITICAL();//開中斷

用戶中斷處理代碼;

}

注:在UC/OS編寫中斷服務函數(shù)時,清除中斷源和清除中斷控制器的工作必須放在臨界代碼端中。即在UC/OS中編寫中斷服務函數(shù)時,必須要有OS_ENTER_CRITICAL();和OS_EXIT_CRITICAL()。

3.控制中斷源的工作:

在程序運行過程中,可以通過使能中斷源和關閉中斷源來啟動和關閉通道號為X的中斷源。

VICIntEnable = 1 << X;//使能中斷源X產(chǎn)生中斷

VICIntEnClr = 1 << X;//禁止中斷源X產(chǎn)生中斷

三.設計ISR與關聯(lián)任務之間的通信方法:

1. ISR的主要功能是響應異步事件,該異步事件將觸發(fā)一系列操作。ISR設計的基本原則是:盡可能簡短。

2.ISR與關聯(lián)任務的通信方式有兩種類型:信號型和數(shù)據(jù)型。

1>當使用信號量進行通信時,ISR只完成發(fā)送信號量的工作,表示事件已經(jīng)發(fā)生,通過信號量的同步功能觸發(fā)關聯(lián)任務。

2>當使用數(shù)據(jù)進行通信時,ISR需要完成對異步事件的信息進行采集工作,然后使用消息郵箱(或消息隊列)將數(shù)據(jù)發(fā)送給關聯(lián)任務,由關聯(lián)任務完成后續(xù)數(shù)據(jù)處理工作。

3>做項目時常見的三種情況:

?觸發(fā)ISR的事件不包含數(shù)據(jù):不需要對事件進行信息采集。此時,ISR使用信號量與關聯(lián)任務進行通信。

?觸發(fā)ISR的事件是包含數(shù)據(jù)的低頻事件:將數(shù)據(jù)采集的工作放在關聯(lián)任務中完成,(產(chǎn)生的時刻延遲與采樣周期相比可以忽略不計,對采集數(shù)據(jù)的質(zhì)量沒有影響。此時,ISR使用信號量與關聯(lián)任務進行通信,從而簡化了ISR。

?觸發(fā)ISR的事件是包含數(shù)據(jù)的中高頻事件:數(shù)據(jù)采集的工作放在關聯(lián)任務中完成時,產(chǎn)生的時延與采樣周期相比不能忽略不計時,對采樣數(shù)據(jù)的質(zhì)量有影響。此時,關聯(lián)任務從消息郵箱中得到消息的數(shù)據(jù),并完成后續(xù)處理工作。

?觸發(fā)ISR的事件是包含數(shù)據(jù)的非周期高頻率事件:對于非周期高頻事件,其最短事件間隔可能小于一個事件數(shù)據(jù)處理的耗時,如果使用消息郵箱進行通信,就可能會出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。此時,數(shù)據(jù)采集的工作應該在ISR中完成,由ISR使用具有數(shù)據(jù)緩沖功能的消息隊列與關聯(lián)任務進行通信。關聯(lián)任務從消息隊列中得到消息的數(shù)據(jù),并完成后續(xù)處理工作。


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