找回密码
 立即注册
查看: 1058|回复: 4

Timer0中断异常

[复制链接]

4

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2023-6-1 22:39:38 | 显示全部楼层 |阅读模式
芯片是STC32G12K, 用STC-LINK仿真,Timer0初始化程序如下,如果TMOD设置为不可屏蔽中断,则ISR中断正常运行,如果是设置为普通的自动重装计时器,运行时进入中断几次后就再也不进了,这是怎么回事呢?


      #define Timer0_Reload (65536UL - (MAIN_Fosc / 1000)) // Timer 0 中断频率, 1000次/秒


       // MODE3, Timer0 set as 16 bits timer auto-reload
        //TMOD = 0x00;       


        //工作模式, 0: 16 位自动重装, 1: 16 位定时/计数, 2: 8 位自动重装, 3: 16 位自动重装, 不可屏蔽中断
        TMOD = 0x03;


        AUXR |= 0x80;                                 // Timer0 set as 1T
        TH0 = (u8)(Timer0_Reload / 256);
        TL0 = (u8)(Timer0_Reload % 256);
        ET0 = 1; // Timer0 ISR enable

        TR0 = 1; // Tiner0 run
        EA = 1;         // 打开总中断

void Timer0_ISR(void) interrupt TMR0_VECTOR
{
        B_1ms = 1; // 1ms 标志
}



我这个现象和这个帖子的有点类似,https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2497&extra=page%3D1

不进中断

不进中断
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-6-3 11:08:12 | 显示全部楼层
烧录STC32G实验箱例程包,或者屠龙刀例程包里面的例子“Timer0-Timer1-Timer2-Timer3-Timer4测试程序”到芯片里测试一下,这个例子默认使用16位自动重装模式,通过测量中断函数里翻转的IO口信号就知道中断是否正常触发。
实在不行的话将你最简化的,可以复现问题的项目发出来,我们才好帮你分析。
尽量删除无关代码,以免增加分析时间。
回复 支持 反对

使用道具 举报 送花

4

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2023-6-3 11:32:57 | 显示全部楼层
本帖最后由 pingfr 于 2023-6-4 00:09 编辑
乘风*** 发表于 2023-6-3 11:08
烧录STC32G实验箱例程包,或者屠龙刀例程包里面的例子“Timer0-Timer1-Timer2-Timer3-Timer4测试程序”到芯 ...

烧录例程可以正常工作,程序用了uart1_dma,不知道为啥“63-DMA-UART串口与存储器数据自动收发”中uart1_dma例程的中断号都是USER_VECTOR,用该中断号串口DMA工作正常,Time0中断工作不正常,把uart1_dma收发的中断号分别改成DMA_UR1T_VECTOR和DMA_UR1R_VECTOR以后Time0中断恢复正常,串口DMA中断工作也正常,没搞明白例程为啥使用USER_VECTOR作为串口DMA的中断号
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-04-28 16:56:43

21

主题

376

回帖

2345

积分

超级版主

积分
2345
发表于 2023-6-5 10:19:02 | 显示全部楼层
解决就好
电话:0513-55012946 QQ:2195591714  微信:  19952583740
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-05-01 08:13:06
已绑定手机

27

主题

341

回帖

1687

积分

金牌会员

机长

积分
1687
发表于 2023-6-10 23:48:29 | 显示全部楼层
pin*** 发表于 2023-6-3 11:32
烧录例程可以正常工作,程序用了uart1_dma,不知道为啥“63-DMA-UART串口与存储器数据自动收发”中uart1_d ...

因为keil默认不支持大于31的中断号,而stc的中断又这么多,只好在C代码中用USER_VECTOR,然后在汇编中把真正的中断ljmp过去
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 01:56 , Processed in 0.118928 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表