打印
[STM8]

TIM4中断问题请教

[复制链接]
1104|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangfeng33|  楼主 | 2014-6-11 17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, ST, STM, ic, STM8
软件 stvd+cosmic
芯片 STM8S105C6T6
程序:

/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s105c_s.h"
#include "ioset.h"  



@far @interrupt void TIM4_UPD_OVF_IRQHandler (void)
{  
   
   PA_ODR=PA_ODR^(1<<6);         

  TIM4_SR&=~(1<<0);//TIM4_SR1 = 0x00; // 清除更新标志
        

return;
}
  
main()
{
unsigned int time=0;
ioset_init();

CLK_PCKENR1|=1<<4; //OPEN TIME4 CLK
TIM4_IER = 0x00;  // 禁止中断

TIM4_PSCR = 0x07; // 计数器时钟=主时钟/128=2MHZ/128
                   // 相当于计数器周期为64uS
TIM4_CNTR =255;  // 设定计数器的初值         
TIM4_ARR = 255;   // 设定重装载时的寄存器值,255 是最大值

TIM4_EGR = 0x01;  // 允许产生更新事件
                                   // 定时周期=(ARR+1)*64=16320uS
TIM4_CR1 = 0x01;  // b0 = 1,允许计数器工作
                  
TIM4_SR&=0XFE;         
TIM4_IER= 0x01;  // 允许更新中断        
//_asm("rim");// 允许CPU 全局中断  




while(1)
{
  time++;
  if(time==100)
  {
   
   PA_ODR=PA_ODR^(1<<5);
  }
  if(time==200)
    {
      time=0;  
   //PA_ODR|=1<<6;
   //PA_ODR&=~(1<<5);
   
  }
DelayMS(20);
}
}
}


中断列表里也做了相应的设置,并添加了extern @far @interrupt void TIM4_UPD_OVF_IRQHandler (void);


问题是只要一开总中断(就是取消屏蔽_asm("rim")),编译不报错,放在主程序里的LED和中断里翻转的LED都没有动作,相当于主程序while循环都停掉了,

测试在不开总中断的情况下主程序LED能正常闪烁(把中断翻转的LED 放在主程序WHILE里也能工作,端口设置没问题)

请用过的朋友帮忙解答,非常感谢!



沙发
tianli1980| | 2014-6-12 10:43 | 只看该作者
在线调试一下

看看程序死到哪个地方了。

使用特权

评论回复
板凳
电子云图| | 2014-6-12 11:40 | 只看该作者
配置;        {0x82, TIM4_UPD_OVF_IRQHandler}, /* irq23 */

使用特权

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

本版积分规则

506

主题

2446

帖子

8

粉丝