打印

中断PWM程序

[复制链接]
2027|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liyfjh|  楼主 | 2008-4-4 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个中断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

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝