紧接上帖: ;-----------------------中断初始化-------------------------------------------------------------------- LDP #0E8H SPLK #0FFFH,EVAIFRA ;清事件管理器A所有中断标志 SPLK #000FH,EVAIFRB SPLK #000FH,EVAIFRC SPLK #0200H,EVAIMRA ;开T1下溢中断 SPLK #0000H,EVAIMRB ;屏蔽定时器2所有中断 SPLK #0000H,EVAIMRC ;屏蔽捕获寄存器1、2、3中断 LDP #0H LACC #0FFH SACL IFR ;清所有系统中断标志 LACC #0000010B SACL IMR ;开INT2中断 CLRC INTM ;开总中断 ;-----------------------I/O初始化------------------------------------------------------ LACL  BDATDIR .. ;-----------------------事件管理器A初始化------------------------------------------------------------------- LDP #0E8H SPLK #0666H,ACTRA ;引脚PWM1,3,5高有效,2,4,6低有效 SPLK #300,CMPR2 SPLK #300,CMPR1 SPLK #300,CMPR3 SPLK #08F4H,DBTCONA ;死区时间1.07*4=4.28us SPLK #8200H,COMCONA ;定时器下溢比较器重载,允许比较 SPLK #PWMPRD,T1PR ;周期寄存器值1500(PWM周期为100us) SPLK #0,T1CNT SPLK #08840H,T1CON;连续增减,预分频为1,使能T1 SPLK #0000H,T2CNT ;编码脉冲计数器 SPLK #0FFFFH,T2PR SPLK #9870H,T2CON ;定向增减,允许编码接口
;----------------------初始化结束-------------------------------------------------------------------
MAIN NOP B MAIN ; 主循环,定时器1下溢时跳出主循环进入T1下溢中断子程序 ;--------------------------------------假中断处理---------------------------------------------------------- PHANTOM CLRC INTM ;开中断 RET
;-----------------------T1下溢中断处理子程序----------------------------------------------------- _C_INT2: ;-----------------------保存现场--------------------------------------------------------------------
SST #0,ST0_SAVE SST #1,ST1_SAVE LDP #5 SACH ACCH ; 保存ACC高位 SACL ACCL SPH  _HI SPL  _LO ; 保存 P MPY #1 ; P<=T SPL T_SAVE ; 保存 T SAR AR0, AR0_SAVE ; 保存AR0 LDP #0E0H LACC  IVR ;读偏移地址  IVR为外设中断寄存器 SUB #029H ; T1 下溢中断? CC T1UF_ISR, EQ ;是下溢中断跳T1UF_ISR ;EQ为ACC=0,当EQ=0时条件满足跳到T1UF_ISR REST LDP #5 ;否则恢复现场 LAR AR0, AR0_SAVE ; 恢复AR0 LT P_LO ;恢复P MPY #1 LPH  _HI LT T_SAVE ;恢复T LACC ACCH,16 ADDS ACCL ;恢复ACC LDP #0 ;指向B2 LST #ST1, ST1_SAVE ; 恢复ST1 LST #ST0, ST0_SAVE ; 恢复ST0 CLRC INTM ; 开中断 RET ; 返回 T1UF_ISR LDP #0E8H SPLK #0200H,EVAIFRA ..
CMD文件: -stack 40
MEMORY { PAGE 0: /*程序空间*/ VECS: ORIGIN=00000H,LENGTH=00040H /*中断向量存贮空间*/  VECS: ORIGIN=00044H,LENGTH=00100H /*外围中断向量*/ /*PM: ORIGIN=0150H,LENGTH=070ffH /*片内FLASH存储空间*/  M: ORIGIN=08000H,LENGTH=07ffH /*片内SDRAM存储空间*/
PAGE 1: /*数据空间*/ REGS: ORIGIN=0H,LENGTH=60H /*存储器映射的寄存器和保留地址*/ BLK_B2: ORIGIN=60H,LENGTH=20H /*块B2*/ BLK_B0: ORIGIN=200H,LENGTH=100H /*块B0,如果CNF=0,则分配为片内ARAM*/ BLK_B1: ORIGIN=300H,LENGTH=100H /*块B1*/ SARAM_D: ORIGIN=800H,LENGTH=800H /*如果正确培植SCSR2寄存器,则此为数据空间中的2K SARAM*/ PERIPH: ORIGIN=7000H,LENGTH=1000H /*外围寄存器空间*/ EX2_DM: ORIGIN=8000H,LENGTH=8000H /*外围数据RAM*/ PAGE 2: /*I/O存储空间*/ IO_EX: ORIGIN=0000H,LENGTH=0FFF0H /*外部的I/O映射空间*/ IO_IN: ORIGIN=0FFF0H,LENGTH=0FH /*片内的I/O映射空间*/ }
SECTIONS { .reset: { }>VECS  AGE 0 /*中断向量表*/ .vectors: { }>VECS  AGE 0 .pvecs: { }>PVECS PAGE 0 .text: { }>PM PAGE 0 /* .bss: { }>BLK_B2 PAGE 1 */ .data0: { }>BLK_B1 PAGE 1 }
|