新聞中心

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

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

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

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

        下面給出了代碼的例子(也可用于Lab2C)

        #include m8c.h> // part specific constants and macros

        #include PSoCAPI.h // PSoC API definitions for all User Modules

        extern unsigned char bShadow=0; void main(void)

        {

        PRT1DR=0;

        INT_MSK0|=0x40;

        M8C_EnableGInt;

        while(1)

        {

        M8C_Sleep; //sleep commandbShadow++; PRT1DR=bShadow;

        }
        }

        1.2.4 實驗2D—匯編器服務例程

        步驟1:創建新的工程。?復制Lab2C,將其命名為Lab2D。

        所有參數和跳線連接保持一樣。重新生成應用。

        步驟2:修改代碼。創建新的名字為SleepTimerRoutines.asm 的匯編文件。打開該文件,并按照圖1.16 所示添加代碼。

        圖1.16 SleepTimer 服務程序

        需要注意這個工程中的一些條目:

        保存累加器的值,以后從堆棧中恢復。硬件只保護程序計數器和標志寄存器,這是一個中斷服務程序的最小要求。其他主程序使用的寄存器也需要保護。這通常是通過將它們暫存在堆棧中實現的。

        bShadow 是一個在main.c 中聲明的全局變量。當使用匯編語言時,必須在這個變量前加一個下劃線。反之,任何一個在匯編文件中定義的全局變量,必須以下劃線開頭,為了讓C 例程能找到它。

        例程以reti 結尾。—打開boot.asm 文件,在休眠定時器向量位置放置如下代碼:ljmp SleepTimerISR 練習2D-1 :這個指令要求多少個字節?

        重新生成工程。

        打開boot.asm ,并且驗證剛才輸入的代碼消失了,這是因為當每次重新生成工程時,每次都重寫boot.asm 。對于這個地方的代碼,必須輸入到用于生成boot.asm 的模板文件。

        打開boot.tpl ,將下面的代碼放到休眠定時器向量位置。

        ljmp SleepTimerISR

        重新生成工程。

        打開boot.asm ,驗證代碼現在駐留在正確的向量位置。

        打開main.c 文件,刪除控制循環內的所有代碼。程序始終處于這個循環,一直等到在休眠定時器中斷服務程序中為休眠定時器服務為止。

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

        像前面一樣驗證程序。

        1.2.5 實驗2E—C 語言中斷服務例程

        步驟1:創建新的工程。

        復制Lab2D,將其命名為Lab2E。

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

        重新生成應用。

        步驟2:修改代碼。

        刪除名字為SleepTimerRoutines.asm 的匯編文件。

        打開main.c 文件,并按照圖1.17 所示添加代碼。

        圖1.17 Lab2C 控制軟件

        需要注意這個工程中的一些條目:

        Pragma 允許一個函數被用做一個中斷句柄。編譯器將自動添加必要的代碼來保護它所使用的任何寄存器。它被用做一個也添加reti。?當然,這樣一個函數不能接受參數和返回一個結果。

        練習2E-1:為什么?

        將必要的代碼添加到該函數中,實現前面的匯編中斷服務程序。打開boot.tpl ,轉到休眠定時器向量,在SleepTimerISR 前面添加下劃線。注意:對于在C 中聲明的函數和變量,添加下劃線。如果在C 中聲明了一個變量

        CVar ,則在匯編例程中作為_iCVar 使用,在C 中作為iCVar 使用。如果_iAsmVar 在匯編語言中聲明為一個變量,則它在匯編例程中作為_iASmVar 使用,在C 例程中作為iCVar 使用。iAsmVar 是一個在匯編語言中聲明的變量,它可以在匯編例程中作為iASmVar 使用,但在C 中不可使用。

        重新生成應用,重新建立工程,下載到Eval1 板子,運行;像前面一樣驗證程序。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安龙县| 双辽市| 哈巴河县| 明溪县| 吉木萨尔县| 县级市| 报价| 鄂伦春自治旗| 绥江县| 丰台区| 冕宁县| 日土县| 郑州市| 黄浦区| 辽阳市| 若羌县| 茶陵县| 海伦市| 高台县| 尉氏县| 北辰区| 靖安县| 澎湖县| 芦溪县| 共和县| 林甸县| 遵义市| 舒兰市| 潢川县| 彝良县| 北京市| 木兰县| 成都市| 临夏市| 彩票| 玛纳斯县| 阿拉善盟| 托克托县| 仪征市| 镇沅| 秦安县|