?? test7.asm
字號:
//======================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//============================================================
// 工程名稱:test7.spj
// 功能描述: FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三個中斷源,當定時器A或B
// 計滿溢出時產生中斷請求信號TA_TIMEOUT_INT或TA_TIMEOUT_INT,
// CPU響應后進入中斷執行相應的子程序控制二極管發光。
// 硬件連接: A口的低四位接LED燈,B口的低四位接LED燈。B6控制8個LED燈的共陰極。
//
// 文件來源:《實驗儀實驗指導書》,"實驗九 FIQ中斷實驗" 第24頁
// IDE環境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的庫:
// 組成文件:
// test7.asm
//===============================================
//============================================================
// 文件名稱:test7.asm
// 實現功能: FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三個中斷源,當定時器A或B
// 計滿溢出時產生中斷請求信號TA_TIMEOUT_INT或TA_TIMEOUT_INT,
// CPU響應后進入中斷執行相應的子程序控制二極管發光。
// A口的低四位接LED燈,B口的低四位接LED燈.
//============================================================
.define P_IOA_DATA 0x7000;
.define P_IOA_DIR 0x7002;
.define P_IOA_ATTRI 0x7003;
.define P_IOB_DATA 0x7005;
.define P_IOB_DIR 0x7007;
.define P_IOB_ATTRI 0x7008;
.define P_INT_CTRL 0x7010;
.define P_INT_CLEAR 0x7011;
.define P_TimerA_Data 0x700A;
.define P_TimerA_Ctrl 0x700B;
.define P_TimerB_Data 0x700C;
.define P_TimerB_Ctrl 0x700D;
.define timea_clk 0x000d;
.define timeb_clk 0x0004;
.DEFINE P_Watchdog_Clear 0x7012; // Watchdog Reset
.code
.public _main
//=============================================================
// 函數名稱: _main
// 功能描述: FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三個中斷源,當定時器A或B
// 計滿溢出時產生中斷請求信號TA_TIMEOUT_INT或TA_TIMEOUT_INT,
// CPU響應后進入中斷執行相應的子程序控制二極管發光。
// A口的低四位接LED燈,B口的低四位接LED燈.
// 語法格式: _main
//入口參數: 無
// 出口參數: 無
// 注意事項: 僅為用戶模型
//=================================================================
_main:
int off
r1=0x000f //IOA口低四位設為同相高電平輸出口
[P_IOA_ATTRI]=r1
[P_IOA_DIR]=r1
[P_IOA_DATA]=r1
r1=0x004f //IOB口的低4位和IOB6設置為同相高電平輸出位
[P_IOB_DIR]=r1
[P_IOB_ATTRI]=r1
[P_IOB_DATA]=r1
r1=0xf09f; //設置計數初值
[P_TimerA_Data]=r1;
[P_TimerB_Data]=r1;
r1=timea_clk;
[P_TimerA_Ctrl]=r1;
r1=timeb_clk;
[P_TimerB_Ctrl]=r1;
r1=0xa800 //開中斷FIQ_PWM、FIQ_TMA、FIQ_TMB
[P_INT_CTRL]=r1
int FIQ
loop:
nop
nop
nop
jmp loop
.text
.public _FIQ
_FIQ:
push r1,r5 to [sp] //壓棧保護
r1=0x0800
test r1,[P_INT_CTRL] //比較是否為FIQ_TMB
jnz FIQ_TMB //是,則轉至對應程序段
r1=0x2000
test r1,[P_INT_CTRL] //否,則比較是否為FIQ_TMA
jnz FIQ_TMA //是,則轉至對應程序段
FIQ_PWM: //否,則進入FIQ_PWM中斷
r1=0x8000
[P_INT_CLEAR]=r1 //r1=0x8000
pop r1,r5 from [sp]
reti
FIQ_TMA:
r1=0x000f; //點亮接在A口低四位的四個LED燈
[P_IOA_DATA]=r1;
r2=0xffff; //延時
delay1:
r1=0x0001 //清看門狗
[P_Watchdog_Clear]=r1
r2-=1;
jnz delay1;
r1=0x0000; //熄滅LED
[P_IOA_DATA]=r1;
r1=0x2000;
[P_INT_CLEAR]=r1;
pop r1,r5 from [sp];
reti;
FIQ_TMB:
r1=0x004f; //點亮接在B口低四位的四個LED燈
[P_IOB_DATA]=r1;
r2=0xffff; //延時
delay2:
r1=0x0001 //清看門狗
[P_Watchdog_Clear]=r1
r2-=1;
jnz delay2;
r1=0x0040; //熄滅LED
[P_IOB_DATA]=r1;
r1=0x0800;
[P_INT_CLEAR]=r1;
pop r1,r5 from [sp];
reti;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -