中颖技术支持请进!!!!中断问题!!急急急急急

[复制链接]
1631|4
手机看帖
扫描二维码
随时随地手机跟帖
zf.lc|  楼主 | 2008-4-25 08:54 | 显示全部楼层 |阅读模式
下面是SH67P847的PDF说明:
Port Interrupt
The PORTA.3 are used as external port interrupt sources. Only the voltage transition from VDD to GND applying to the digital input port can generate a port interrupt. The analog input cannot generate any interrupt request.
Port Interrupts (including other external interrupt sources) can be used to wake up the CPU from the HALT or the STOP mode.

但我在测试程序时会发现上升沿同样能触发此中断,而且并不是每次都能触发.不知为何.应如何配置??? 我的程序就是一个按键.上电后程序进STOP,按键按下时通过此中断唤醒程序工作,再次按下程序再进STOP.相应程序见下面:

同样的问题在SH69P20这颗芯片中,使用PA0,PA3中断时,设置为下降沿触发,上升沿同样能触发!

//---------------中断初始化--------------------
                 LDI IRQ,0000B
                 LDI IE,0001B
                 NOP
                 STOP
                 NOP
MAIN:            NOP
                 LDA STATE,0
                 BNZ RUN_PRG
                 LDA HOLD_CNT,0
                 BNZ RUN_PRG
                 LDI HOLD_CNT,HOLD_CNT_VAL
                 ANDIM PORTA,1011B
                 LDI IE,0001B
                 STOP 
                 NOP
//-------------------------------------------------------                   
                 NOP
                 NOP
RUN_PRG:         LDI IE,0100B                 
                 NOP
                 HALT
                 NOP
                 NOP
                 JMP MAIN

;============================================================
;PORT中断服务子程序    
PINT_SVR:        NOP
//---------------IO初始化----------------------
                 LDI PORTA,0000B
                 LDI PACR,0100B
                 LDI PPACR,0100B
                 LDI PORTB,0000B
                 LDI PBCR,0000B
                 LDI PPBCR,0000B
//---------------AD初始化----------------------
                 LDI ADCON,0000B
//---------------PWM初始化---------------------
                 LDI PWMCON,0000B
//---------------TIMER0 初始化-----------------
                 LDI TL0,03H
                 LDI TH0,08H
                 LDI TM0,0111B            
//---------------中断初始化--------------------
                 LDI IRQ,0000B
                 LDI IE,0001B
//---------------寄存器初始化-----------------
                 LDI K1ST,00H
                 LDI K2CD,00H
                 LDI SUB_CNT_L,SUB_CNT_L_VAL
                 LDI SUB_CNT_H,SUB_CNT_H_VAL
                 LDI MY_CNT,MY_CNT_VAL
                 LDI HOLD_CNT,HOLD_CNT_VAL
                 LDI OUT_L_CNT,OUT_L_CNT_VAL
                 LDI OUT_H_CNT,OUT_H_CNT_VAL
                 LDI STATE,00H
        
                 LDI IE,0100B
                 LDI IRQ,00H
                 RTNI
                 NOP

warm_ice| | 2008-4-25 10:29 | 显示全部楼层

这样

1.中断程序写法不对,进入中断时第一条要保证累加器ACC,反回前紧跟恢复IE后面是恢复累加器ACC的值,然后就是RTNI,清IRQ的问题要再往上.确保中断可靠退出.
2.按键的过程本身来说,波型就是"拌动--稳定--抖动"的过程,抖动的过程中自然有上升沿也有下降沿.可以用示波器抓波型来看.
3.为确保可靠,也可考虑在口中断中再判断一下相应I/O口的状态.

使用特权

评论回复
zf.lc|  楼主 | 2008-4-25 11:24 | 显示全部楼层

ACC对我的这个应用不重要,因为我只用PORT中断唤醒程序,唤醒后所以的都重新初始化的.
按键的处理我是放在TIMER0中断中的,有去抖处理.

你所说的按键抖动,我是这样检测的:我按下按键不放开,这时程序正常进行STOP状态,示波器显示为低电平,然后我松开按键,发现程序退出STOP状态,仿真头HALT灯亮,因为我程序中有按键判断,所以发现按键并没有按下,50ms后重新进入STOP状态.
用示波器并没有发现这种抖动.

使用特权

评论回复
zf.lc|  楼主 | 2008-4-25 11:27 | 显示全部楼层

warm_ice

warm_ice 能否告诉你贵姓呀!!
不知道你有没有QQ,方便以后有问题请教

使用特权

评论回复
warm_ice| | 2008-4-25 23:09 | 显示全部楼层

这样

按键状态改变的时候都是会有抖动的,包括按下和释放时.这个过程是可以通过示波器抓到的.用触发方式来抓取就可以.
PS:公司不方便使用QQ,就这样交流吧.或者到中颖全心论坛讨论,版主更多一点.
地址:http://bbs.sinowealth.com

使用特权

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

本版积分规则

13

主题

26

帖子

0

粉丝