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

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

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

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

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

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

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

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

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

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

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

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

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

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

l添加中斷句柄

l配置和初始化中斷源

l配置向量中斷控制器

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

1>.中斷句柄:

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

XXX_HandlerHANDLERXXX_Exception

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

lHANDLER是句柄關(guān)鍵字,必須大寫。

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

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

Timer0_HandlerHANDLER Timer0_Exception

UART0_HandlerHANDLER UART0_Exception

RTC_HandlerHANDLERRTC_Exception

EINT3_HandlerHANDLEREINT3_Exception

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

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

還是以UART0為例:

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

*作者:tiger-john

*時(shí)間:2011年1月29日

*名稱:UART0_Init

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

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

*出口參數(shù):無

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

voidUART0_Init(uint32 bps)

{

uint16Fdiv;

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

U0LCR = 0x83;

Fdiv = (Fpclk>>4)/bps;

U0DLM = Fdiv>>8;

U0DLL = Fdiv%256;

U0LCR = 0x03;

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

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

}

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

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

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

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

externvoidXXXX_Handler(void);

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

VICVectAddrY = (uint32)XXXX_Handler;

//向量中斷方式,通道號(hào)為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>.編寫中斷服務(wù)程序程序的功能函數(shù)

voidXXXX_Exception(void)

{

OS_ENTER_CRITICAL();//關(guān)中斷

清除中斷源;

通知中斷控制器中斷結(jié)束;

OS_EXIT_CRITICAL();//開中斷

用戶中斷處理代碼;

}

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

3.控制中斷源的工作:

在程序運(yùn)行過程中,可以通過使能中斷源和關(guān)閉中斷源來啟動(dòng)和關(guān)閉通道號(hào)為X的中斷源。

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

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

三.設(shè)計(jì)ISR與關(guān)聯(lián)任務(wù)之間的通信方法:

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

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

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

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

3>做項(xiàng)目時(shí)常見的三種情況:

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

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

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

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


本站聲明: 本文章由作者或相關(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)閉