新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 混合信號嵌入式設計實驗指南-數字實驗之:實驗2—中斷

        混合信號嵌入式設計實驗指南-數字實驗之:實驗2—中斷

        作者: 時間:2013-12-26 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/256987.htm

        1.2.1 實驗2A—發布

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

        步驟1:創建新的工程。

        工程名字為Lab2A

        —選擇C 選項;

        —用于器件類型及其設置的標準實驗設置;

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

        —按表1.3 設置四個端口引腳。

        1.3 端口驅動設置

        名字(Name)

        端口(Port)

        選擇(Select)

        驅動(Drive)

        LedOut1

        P1[0]

        StdCPU

        Strong

        LedOut2

        P1[1]

        StdCPU

        Strong

        LedOut3

        P1[2]

        StdCPU

        Strong

        LedOut4

        P1[3]

        StdCPU

        Strong

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

        使用跳線進行下面的連接—P10 到LED1 —P11 到LED2 —P12 到LED3

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

        圖1.14 main.c 原型

        圖1.15 Lab2A 控制軟件

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

        步驟4:下載并運行。?建立工程,并驗證工程沒有錯誤;下載程序到Eval1,并且運行;用LED 的輸出來驗證操作。練習2A-3:LED 的操作和練習2 中預測的一樣嗎? 返回互聯視圖,將休眠定時器參數改為8Hz 。練習2A-4 :當休眠定時器的參數為8Hz 時,對LED 的輸出有什么影響? ?重新生成應用,重新建立工程,下載到Eval1 板子,并且運行。

        練習2A-5 :觀察結果是否確認了練習2A-4 的預測?

        1.2.2 實驗2B—待處理的中斷

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

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

        —使用INT_MSK0 ,使能休眠定時器中斷。

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

        練習2B-1:為什么你想使用休眠模式來代替輪詢已發布的休眠定時器中斷?練習2B-2:為什么你想輪詢,而不是將系統進入到休眠模式?

        1.2.3 實驗2C—全局中斷

        步驟1:創建新的工程。?

        復制Lab2B,將其命名為Lab2C。

        所有參數和跳線連接保持一樣。

        重新生成應用。

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

        打開boot.asm ,并且驗證在休眠定時器向量位置存在一個存根。

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

        練習2C-2:假設需要更多的空間,你將如何做?

        設置標志“F”寄存器的第0 比特位,使能全局中斷。相反清除該位將禁止全局中斷。對于更多的可讀代碼,系統定義了M8C_EnableGInt 為asm“or F,01h”。它使能全局中斷。“asm() ”是一個函數,其允許在C 程序中嵌入匯編命令。

        步驟2:修改代碼。

        轉到應用程序編輯器中,打開main.c 。

        進行下面的修改。

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

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

        重新建立工程,下載到Eval1,并運行。

        像前面一樣驗證程序。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 永济市| 台东市| 合山市| 永善县| 石台县| 镇原县| 德钦县| 元谋县| 德江县| 义乌市| 舒兰市| 静宁县| 嘉祥县| 和静县| 武城县| 盐池县| 罗定市| 阿瓦提县| 韶关市| 阿坝| 南宫市| 洪江市| 丁青县| 奈曼旗| 拜泉县| 泸溪县| 珠海市| 呈贡县| 澄城县| 门源| 蓝田县| 柞水县| 陆川县| 永兴县| 南京市| 赞皇县| 梅州市| 张家港市| 遂昌县| 刚察县| 桑植县|