<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.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—匯編器服務(wù)例程

          步驟1:創(chuàng)建新的工程。?復(fù)制Lab2C,將其命名為Lab2D。

          所有參數(shù)和跳線連接保持一樣。重新生成應(yīng)用。

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

          圖1.16 SleepTimer 服務(wù)程序

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

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

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

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

          重新生成工程。

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

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

          ljmp SleepTimerISR

          重新生成工程。

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

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

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

          像前面一樣驗證程序。

          1.2.5 實驗2E—C 語言中斷服務(wù)例程

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

          復(fù)制Lab2D,將其命名為Lab2E。

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

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

          步驟2:修改代碼。

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

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

          圖1.17 Lab2C 控制軟件

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

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

          練習(xí)2E-1:為什么?

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

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

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



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();