你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32F0上实现排队优先级

[复制链接]
yangc9 发布时间:2019-10-11 13:18
抢占优先级(pre-emption priority):执行一个中断时,来了抢占优先级更高的中断,会暂停当前中断,先执行高级中断.) Q) M5 M/ E- k4 a6 X) z/ O$ l
排队优先级(sub-priority):一个中断执行完后,有多个抢占优先级相同的中断,先执行排队优先级最高的.如果排队优先级相同,或内核不支持排队优先级,先执行中断号最小的.% X& Y* `7 M$ a# J+ z- Q9 J

5 c4 L: X$ ]( p/ |STM32F1有16个优先级,可配置为16抢占,或4抢占4排队,等等.使用起来很方便." ?- S9 t+ K; I7 Z4 P# u
STM32F0只有4个抢占优先级,没有排队优先级.在响应多种输入有些不便.
& j+ s+ K6 D  t  t我找到一个方法,可以在STM32F0上实现排队优先级.0 a, G% x4 q7 H& ?% f0 `' ~! L( h
) A' |8 \& U* D! f* I4 Y
比如我有两个中断,RTC_IRQn和USART2_IRQn.按照中断号的顺序,RTC_IRQn在前.6 f3 E. s1 C* ^+ j/ b
但是我认为串口输入需要更快得到响应,要让RTC_IRQn在USART2_IRQn之后.
7 R2 s3 z1 H* ?# ^3 l! |
/ O  v" q. d; H$ W: T9 @找一个未使用的中断,中断号要大于USART2_IRQn.比如CEC_CAN_IRQn,给他取个新的名字
# e* F3 Q: N, Z2 @8 F! {% E9 a#define RTC_LP_IRQn CEC_CAN_IRQn! \  X4 E* C, Y) z3 e  K/ {

& l. o7 b: P9 O) ~. b3 \" C设置各中断的优先级- M  J  {6 X1 R* b. {
NVIC_SetPriority(RTC_IRQn, 1);1 {% Y" G1 }% S) e  ], Y) ^
NVIC_SetPriority(RTC_LP_IRQn, 2);
3 t; P& v& i. yNVIC_SetPriority(USART2_IRQn, 2);
0 d, ?$ n/ z8 O% k( V: F* M5 k$ H* c: t+ c+ `
在RTC_IRQn中清除中断标志并触发RTC_LP_IRQn8 l6 h1 K4 g2 w7 [
ISR(RTC_IRQn)
0 L4 a0 X0 D4 U: c% q$ o% g' Z{
% o. g6 \- A+ w7 a% }4 G        RTC->ISR &=~ RTC_ISR_ALRAF;& r0 Z& {# n1 ~! R
        EXTI->PR = 1 << 17;
7 L  V* z1 H" l! e- ]        NVIC_SetPendingIRQ(RTC_LP_IRQn);& [% R1 M" i* ?; Y! V! D& c
}+ ~5 X% j- [$ I. i$ t& V
/ l4 g( S0 i8 [" L: L
在RTC_LP_IRQn中, 干些低优先级的事情.% ]. @; ?5 p8 [7 a" ^# s+ j5 G, h

8 C1 O& M3 ^7 m关于ISR宏, 请见https://www.stmcu.org.cn/module/f ... =616105&pid=23531773 v0 ~) V$ A! F0 w" x; S
老样子,来点福利% q* @+ ^" u3 Q
4 T0 n; \: D- k8 B! W4 }' i+ i
; P4 z2 k! }5 |1 e% p- H: f9 k. T
赞 收藏 评论0 发布时间:2019-10-11 13:18

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版