一个中断PWM程序,不知为什么总进不了中断,请各位大虾指点 .include "240X.H" ;引用头部文件 .def _c_int0 .copy "vectors.h" ; .copy "PRECS.H" DP_PF2 .set 00E1H DP_EVB .set 00EAH DP_EVA .set 00E8H ;(1)主程序 .text _c_int0: SETC INTM CLRC SXM CLRC OVM CLRC CNF ;B0区被配置为数据空间 LDP #0E0H ;指向7000h~7080h区 SPLK #800AH,SCSR1 ;时钟2倍频,CLKIN=15 M,CLKOUT=30 M SPLK #0E8H,WDCR ;不使能WDT LDP #0 SPLK #0002H,IMR ;使能中断第2级INT2 SPLK #0FFFFH,IFR ;清全部中断标志 ;(3)EVB模块的PWM初始化程序 PWM_INIT: LDP #DP_PF2 ;指向7080h~7100h区 LACL MCRC OR #007EH ;IOPE[1~6]被配置为基本功能方式:PWM[7~12] SACL MCRC LDP #DP_EVB ;指向7500h~7580h区 SPLK #0FFFH,EVBIFRA ;清EVB 全部中断标志 SPLK #0666H,ACTRB ;PWM12,10,8 低有效,PWM11,9,7 高有效 SPLK #00H,DBTCONB ;不使能死区控制 SPLK #36H,CMPR4 ;设置比较初值 PWM7高电平占50/60, ;低电平占10/60 SPLK #46H,CMPR5 ;设置PWM9,10的比较寄存器 SPLK #056H,CMPR6 ;设置PWM11,12的比较寄存器 SPLK #76H,T3PR ;设置定时器3周期寄存器, ;即PWM周期为120个CPU时钟周期 SPLK #0A600H,COMCONB ;使能比较操作 SPLK #0,T3CNT SPLK #41H,GPTCONB ;TCOMPOE=1,T3PIN=01 SPLK #0400H,EVBIMRA ;通用定时器3使能 SPLK #01446H,T3CON ;TMODE=10 连续增计数模式,TPS=111 预分频为128 ;TENABLE=1 定时器计数使能, TCLKS=00 ;内部时钟 ;TECMPR=1 定时器3比较使能, SELT3PR=0 LDP #DP_EVA ;指向7400h~7480h区 SPLK #80H,EVAIMRA ;使能T1PINT 中断 SPLK #0FFFFh,EVAIFRA ;清EVA中断标志 SPLK #06042H,GPTCONA SPLK #0FFFH,T1PR ;使定时器每1ms产生一次中断 SPLK #0444H,CMPR1 ;The output of PWM1:high=7/8 low=1/8 SPLK #0888H,CMPR2 ;The output of PWM3:high=5/8 low=3/8 SPLK #0CCCH,CMPR3 ;The output of PWM5:high=3/8 low=5/8 SPLK #0,T1CNT SPLK #0EF46H,T1CON ;TMODE=10 连续增计数模式,TPS=110 预分频为64 ;TENABLE=1 定时器计数使能, TCLKS=00 ;内部时钟 ;TECMPR=1 定时器1比较使能, SELT1PR=0 CLRC INTM ;开总中断 WAIT: NOP B WAIT ;(4)定时器3中断程序 GISR2: ;优先级INT2中断入口 ;保护现场 ; LDP #0E0H ; LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位 ; ADD #PVECTORS ;加上外设中断入口地址 ; BACC ;跳到相应的中断服务子程序 ;通用定时器3中断入口 LDP #DP_EVB LACC ACTRB CMPL AND #0FFFH SACL ACTRB GISR2_RET: ;中断返回 ;恢复现场 CLRC INTM ;开总中断,因为一进中断就自动关闭总中断 RET ;(5)假中断程序 PHANTOM KICK_DOG ;复位看门狗 RET END
|