| 
 
| 一个中断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 /> | 
 |