混合信號(hào)嵌入式設(shè)計(jì)實(shí)驗(yàn)指南-數(shù)字實(shí)驗(yàn)之:實(shí)驗(yàn)2—中斷
1.2.6 實(shí)驗(yàn)2F—強(qiáng)迫一個(gè)中斷
步驟1:創(chuàng)建新的工程。?復(fù)制Lab2E,將其命名為L(zhǎng)ab2F。?所有參數(shù)和跳線連接保持一樣。?重新生成應(yīng)用。有時(shí)候,通過(guò)軟件強(qiáng)迫產(chǎn)生一個(gè)中斷是非常有利的。通過(guò)設(shè)置中斷的INT_CLRx
寄存器能實(shí)現(xiàn)這個(gè)功能。對(duì)于休眠定時(shí)器,這是INT_CLR0 的第6 位。為了保證該位不是偶然設(shè)置的,必須設(shè)置使能軟件中斷位(ENSWINT),該位為INT_MSK3 寄存器的第7 位。表1.4 給出了操作INT_CLRx 位的可能結(jié)果。
表1.4 INT_CLRx 和ENSWINT 行為/結(jié)果表
|
練習(xí)2F-1:在前面的實(shí)驗(yàn)中,沒(méi)有通過(guò)添加代碼設(shè)置ENSWINT 為0 來(lái)清除已經(jīng)發(fā)布的中斷,為什么這樣做?
步驟2:修改代碼。
添加代碼使能ENSWINT。添加控制循環(huán)代碼強(qiáng)制休眠定時(shí)器發(fā)布一個(gè)中斷。
練習(xí)2F-2:現(xiàn)在,這個(gè)程序如何工作??重新生成工程,重新建立工程,下載到Eval1 板子,運(yùn)行。練習(xí)2F-3:現(xiàn)在操作是否和你的預(yù)測(cè)一樣?
1.2.7 實(shí)驗(yàn)2G—創(chuàng)建非常小的中斷服務(wù)例程
步驟1:創(chuàng)建新的工程。
復(fù)制Lab2F,將其命名為L(zhǎng)ab2G。?設(shè)置Sleep_Timer 全局參數(shù)為64Hz 。
所有其他參數(shù)和跳線連接保持一樣。有時(shí)候,中斷服務(wù)程序是很小的,這樣它就能駐留在用于它的輸入向量的4 個(gè)字節(jié)空間。
步驟2:修改代碼。?刪除main.c 中的中斷句柄。創(chuàng)建全局單字節(jié)變量bCount 。?刪除使能ENSWINT 的代碼。
刪除強(qiáng)制一個(gè)中斷的代碼。
打開(kāi)boot.tpl ,添加匯編代碼到休眠定時(shí)器中斷向量位置,用于減這個(gè)新的變量
(確保保留reti)。練習(xí)2G-1 :這個(gè)中斷句柄占用多少個(gè)字節(jié)?
在控制循環(huán)中添加代碼:
— 打開(kāi)所有的四個(gè)燈。
—設(shè)置bCount 為255 。
—等待bCount 為0。
—關(guān)閉LED4 。
—設(shè)置bCount 為192 。
—等待bCount 為0。
—關(guān)閉LED3 。
—設(shè)置bCount 為128 。
—等待bCount 為0。
—關(guān)閉LED2 。
—設(shè)置bCount 為64。
—等待bCount 為0。
—關(guān)閉LED1 。
—設(shè)置bCount 為32。
—等待bCount 為0。練習(xí)2G-2 :輸出行為將如何??重新生成應(yīng)用程序,重新建立工程,下載到Eval1 板子,并運(yùn)行。練習(xí)2G-3 :真正的操作和預(yù)測(cè)的一樣嗎?
評(píng)論