dabing0577 发表于 2024-11-4 09:54:44

15f60s2定时器和串口中断优先级问题

本帖最后由 DebugLab 于 2024-11-4 10:05 编辑

项目要求:
1:定时器每100us中断一次;外部晶振是18.432m
2:串口1(硬件上面已经落实完毕,不可能更改串口了)实时和上位机通讯,

目前遇到问题是:串口1有很大概率无法进入中断接收数据
如果把定时器更改为500us中断周期;程序正常;

请问:有啥方法调整内部定时器中断优先级低,串口可以随时打断定时器中断去执行串口程序.


DebugLab 发表于 2024-11-4 10:09:13


中断优先级设置:




dabing0577 发表于 2024-11-4 10:12:27

在看官方的stc资料:
注意:当定时器/计数器0工作在 模式3(不可屏蔽中断的16位自动重装载模式)时,不需要允许
EA/IE.7(总中断使能位)只需允许ET0/IE.1(定时器/计数器0中断允许位)就能打开定时
器/计数器0的中断,此模式下的定时器/计数器0中断与总中断使能位EA无关。一旦此
模式下的定时器/计数器0中断被打开后,该定时器/计数器0中断优先级就是最高的,
它不能被其它任何中断所打断(不管是比定时器/计数器0中断优先级低的中断还是比其
优先级高的中断,都不能打断此时的定时器/计数器0中断),而且该中断打开后既不受
EA/IE.7控制也不再受ET0控制了,清零EA或ET0都不能关闭此中断                                                                  


那么,现在那种定时器才能满足要求呢

dabing0577 发表于 2024-11-4 10:17:08

DebugLab 发表于 2024-11-4 10:09
中断优先级设置:


PS=1;当部中断0优先级控制位。优先级中断(优先级1)

PT1=0;定时器1中断为最低优先级中断(优先级0)   定时器不是: 不可屏蔽中断的16位自动重装载模式

请问这样设置可否达到项目要求;

Lkck8210 发表于 2024-11-4 10:17:41

会不会是你的定时中断内的代码耗时有机会超出100us?
结果出不去了?

DebugLab 发表于 2024-11-4 10:19:07

Lkck8210 发表于 2024-11-4 10:17
会不会是你的定时中断内的代码耗时有机会超出100us?
结果出不去了?

我觉得也是这样

dabing0577 发表于 2024-11-4 10:24:51

Lkck8210 发表于 2024-11-4 10:17
会不会是你的定时中断内的代码耗时有机会超出100us?
结果出不去了?

不会的   中断里面就是几个时间标记寄存器赋值; main函数中采用时间轮询状态机进行调度

Lkck8210 发表于 2024-11-4 10:26:16

dabing0577 发表于 2024-11-4 10:24
不会的   中断里面就是几个时间标记寄存器赋值; main函数中采用时间轮询状态机进行调度 ...

贴代码来看看

dabing0577 发表于 2024-11-4 10:40:41

Lkck8210 发表于 2024-11-4 10:26
贴代码来看看

PS=1;当部中断0优先级控制位。优先级中断(优先级1)

PT1=0;定时器1中断为最低优先级中断(优先级0)   定时器不是: 不可屏蔽中断的16位自动重装载模式

请问这样设置可否达到项目要求;

Lkck8210 发表于 2024-11-4 15:16:04

dabing0577 发表于 2024-11-4 10:40
PS=1;当部中断0优先级控制位。优先级中断(优先级1)

PT1=0;定时器1中断为最低优先级中断(优先级0)   定 ...

没图没代码
只能帮你算个卦{:lol:}
页: [1] 2
查看完整版本: 15f60s2定时器和串口中断优先级问题