色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 混合信號(hào)嵌入式設(shè)計(jì)實(shí)驗(yàn)指南-數(shù)字實(shí)驗(yàn)之:實(shí)驗(yàn)2—中斷

          混合信號(hào)嵌入式設(shè)計(jì)實(shí)驗(yàn)指南-數(shù)字實(shí)驗(yàn)之:實(shí)驗(yàn)2—中斷

          作者: 時(shí)間:2013-12-26 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://cafeforensic.com/article/256987.htm

          1.2.1 實(shí)驗(yàn)2A—發(fā)布

          使用INT_CLRx 寄存器訪問發(fā)布的。通過INT_CLR0 寄存器的第6 比特位來控制休眠定時(shí)器發(fā)布。當(dāng)該位的值為“1”時(shí),將發(fā)布一個(gè)定時(shí)器的中斷。將該位設(shè)置為“0”時(shí),將清除所發(fā)布的中斷。

          步驟1:創(chuàng)建新的工程。

          工程名字為Lab2A

          —選擇C 選項(xiàng);

          —用于器件類型及其設(shè)置的標(biāo)準(zhǔn)實(shí)驗(yàn)設(shè)置;

          —轉(zhuǎn)到互聯(lián)界面,將全局參數(shù)Sleep_Timer 設(shè)置為1Hz (這將使得休眠定時(shí)器每一秒鐘產(chǎn)生一個(gè)等待處理的中斷);

          —按表1.3 設(shè)置四個(gè)端口引腳。

          1.3 端口驅(qū)動(dòng)設(shè)置

          名字(Name)

          端口(Port)

          選擇(Select)

          驅(qū)動(dòng)(Drive)

          LedOut1

          P1[0]

          StdCPU

          Strong

          LedOut2

          P1[1]

          StdCPU

          Strong

          LedOut3

          P1[2]

          StdCPU

          Strong

          LedOut4

          P1[3]

          StdCPU

          Strong

          步驟2:在Eval1 板子上添加跳線。

          使用跳線進(jìn)行下面的連接—P10 到LED1 —P11 到LED2 —P12 到LED3

          P13 到LED4 。生成應(yīng)用。步驟3:寫軟件。?轉(zhuǎn)到應(yīng)用程序編輯器,打開如圖1.14 所示的main.c 文件。如圖1.15 所示,添加代碼。該程序應(yīng)注意:bShadow 定義成一個(gè)全局單字節(jié)變量。INT_CLR0 寄存器用來監(jiān)視和清除休眠定時(shí)器已經(jīng)發(fā)布的中斷。

          圖1.14 main.c 原型

          圖1.15 Lab2A 控制軟件

          練習(xí)2A-2 :這段代碼的作用是什么?

          步驟4:下載并運(yùn)行。?建立工程,并驗(yàn)證工程沒有錯(cuò)誤;下載程序到Eval1,并且運(yùn)行;用LED 的輸出來驗(yàn)證操作。練習(xí)2A-3:LED 的操作和練習(xí)2 中預(yù)測(cè)的一樣嗎? 返回互聯(lián)視圖,將休眠定時(shí)器參數(shù)改為8Hz 。練習(xí)2A-4 :當(dāng)休眠定時(shí)器的參數(shù)為8Hz 時(shí),對(duì)LED 的輸出有什么影響? ?重新生成應(yīng)用,重新建立工程,下載到Eval1 板子,并且運(yùn)行。

          練習(xí)2A-5 :觀察結(jié)果是否確認(rèn)了練習(xí)2A-4 的預(yù)測(cè)?

          1.2.2 實(shí)驗(yàn)2B—待處理的中斷

          步驟1:復(fù)制Lab2A。打開Lab2A。將工程保存為Lab2B。打開這個(gè)新的工程,并轉(zhuǎn)到布局視圖。保持當(dāng)前Eval1 板上的跳線狀態(tài)。重新生成應(yīng)用。CPU_SCR0 是一個(gè)寄存器,當(dāng)?shù)? 位設(shè)置為高時(shí),系統(tǒng)處于低功耗休眠模式。在這個(gè)模式下,禁止系統(tǒng)時(shí)鐘。為了喚醒時(shí)鐘,必須清除該位的設(shè)置。因?yàn)镃PU 沒有操作,因此通過定義CPU 不能清除該位。只有出現(xiàn)任何待處理的中斷時(shí),才能清除該位。在其中的一個(gè)INT_MSKx 寄存器中,對(duì)合適的位進(jìn)行設(shè)置,將使能一個(gè)待處理的中斷。當(dāng)INT_MSK0 寄存器的第6 位設(shè)置為高時(shí),使能休眠定時(shí)器中斷。

          對(duì)于更多可讀的代碼,系統(tǒng)定義了M8C_Sleep 為(CPU_SCR0|=0x08)。這將引起系統(tǒng)進(jìn)入休眠模式。步驟2:修改代碼。轉(zhuǎn)到應(yīng)用程序編輯器,打開main.c 。進(jìn)行下面的修改。

          —使用INT_MSK0 ,使能休眠定時(shí)器中斷。

          —使用休眠命令代替代碼中用于等待一個(gè)已發(fā)布中斷的部分。?重新建立工程,下載到Eval1 板子,并且運(yùn)行。驗(yàn)證程序正確的工作。

          練習(xí)2B-1:為什么你想使用休眠模式來代替輪詢已發(fā)布的休眠定時(shí)器中斷?練習(xí)2B-2:為什么你想輪詢,而不是將系統(tǒng)進(jìn)入到休眠模式?

          1.2.3 實(shí)驗(yàn)2C—全局中斷

          步驟1:創(chuàng)建新的工程。?

          復(fù)制Lab2B,將其命名為Lab2C。

          所有參數(shù)和跳線連接保持一樣。

          重新生成應(yīng)用。

          可以使用兩種不同的方法清除已經(jīng)發(fā)布的中斷。正如以前給出的那樣,通過清除INT_CLR0 的第6 比特位來強(qiáng)迫清除。另一個(gè)方法是服務(wù)中斷。最小的中斷服務(wù)例程被放置在中斷向量地址的“reti” 。所有這個(gè)例程將CPU 的操作返回到原來的程序。用于這個(gè)中斷服務(wù)程序的術(shù)語稱為“stub” (存根)。

          打開boot.asm ,并且驗(yàn)證在休眠定時(shí)器向量位置存在一個(gè)存根。

          練習(xí)2C-1:在這個(gè)向量位置有多少代碼空間可以使用?

          練習(xí)2C-2:假設(shè)需要更多的空間,你將如何做?

          設(shè)置標(biāo)志“F”寄存器的第0 比特位,使能全局中斷。相反清除該位將禁止全局中斷。對(duì)于更多的可讀代碼,系統(tǒng)定義了M8C_EnableGInt 為asm“or F,01h”。它使能全局中斷。“asm() ”是一個(gè)函數(shù),其允許在C 程序中嵌入?yún)R編命令。

          步驟2:修改代碼。

          轉(zhuǎn)到應(yīng)用程序編輯器中,打開main.c 。

          進(jìn)行下面的修改。

          —添加代碼使能全局中斷。

          —刪除用于清除休眠定時(shí)器中斷的代碼。

          重新建立工程,下載到Eval1,并運(yùn)行。

          像前面一樣驗(yàn)證程序。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉