混合信號嵌入式設(shè)計實(shí)驗(yàn)指南-數(shù)字實(shí)驗(yàn)之:實(shí)驗(yàn)2—中斷
1.2.6 實(shí)驗(yàn)2F—強(qiáng)迫一個中斷
步驟1:創(chuàng)建新的工程。?復(fù)制Lab2E,將其命名為Lab2F。?所有參數(shù)和跳線連接保持一樣。?重新生成應(yīng)用。有時候,通過軟件強(qiáng)迫產(chǎn)生一個中斷是非常有利的。通過設(shè)置中斷的INT_CLRx
寄存器能實(shí)現(xiàn)這個功能。對于休眠定時器,這是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)中,沒有通過添加代碼設(shè)置ENSWINT 為0 來清除已經(jīng)發(fā)布的中斷,為什么這樣做?
步驟2:修改代碼。
添加代碼使能ENSWINT。添加控制循環(huán)代碼強(qiáng)制休眠定時器發(fā)布一個中斷。
練習(xí)2F-2:現(xiàn)在,這個程序如何工作??重新生成工程,重新建立工程,下載到Eval1 板子,運(yùn)行。練習(xí)2F-3:現(xiàn)在操作是否和你的預(yù)測一樣?
1.2.7 實(shí)驗(yàn)2G—創(chuàng)建非常小的中斷服務(wù)例程
步驟1:創(chuàng)建新的工程。
復(fù)制Lab2F,將其命名為Lab2G。?設(shè)置Sleep_Timer 全局參數(shù)為64Hz 。
所有其他參數(shù)和跳線連接保持一樣。有時候,中斷服務(wù)程序是很小的,這樣它就能駐留在用于它的輸入向量的4 個字節(jié)空間。
步驟2:修改代碼。?刪除main.c 中的中斷句柄。創(chuàng)建全局單字節(jié)變量bCount 。?刪除使能ENSWINT 的代碼。
刪除強(qiáng)制一個中斷的代碼。
打開boot.tpl ,添加匯編代碼到休眠定時器中斷向量位置,用于減這個新的變量
(確保保留reti)。練習(xí)2G-1 :這個中斷句柄占用多少個字節(jié)?
在控制循環(huán)中添加代碼:
— 打開所有的四個燈。
—設(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ù)測的一樣嗎?
評論