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