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

在STM32F0上实现排队优先级

[复制链接]
yangc9 发布时间:2019-10-11 13:18
抢占优先级(pre-emption priority):执行一个中断时,来了抢占优先级更高的中断,会暂停当前中断,先执行高级中断.
- K( y% V. U( X$ Z2 d; ^8 |7 s排队优先级(sub-priority):一个中断执行完后,有多个抢占优先级相同的中断,先执行排队优先级最高的.如果排队优先级相同,或内核不支持排队优先级,先执行中断号最小的.: Z  l/ M& n4 I5 y6 ]6 g' F: B9 j
8 k( r* p3 S# P' s
STM32F1有16个优先级,可配置为16抢占,或4抢占4排队,等等.使用起来很方便.
1 W) ]# p0 x, PSTM32F0只有4个抢占优先级,没有排队优先级.在响应多种输入有些不便.
: }. _* M) X1 K我找到一个方法,可以在STM32F0上实现排队优先级.+ E# n& _$ G! k3 }% P& z
! D# H/ h& r" w3 t9 v
比如我有两个中断,RTC_IRQn和USART2_IRQn.按照中断号的顺序,RTC_IRQn在前.) v5 w7 r. l7 Z) F" l
但是我认为串口输入需要更快得到响应,要让RTC_IRQn在USART2_IRQn之后./ U2 Z& }# s& o/ c- u# v
7 G* z7 c. M+ T: W, p
找一个未使用的中断,中断号要大于USART2_IRQn.比如CEC_CAN_IRQn,给他取个新的名字
9 i8 \0 c  r! S5 \% }" _) X#define RTC_LP_IRQn CEC_CAN_IRQn
2 Z- m# F: i7 {" p. W( o# G2 S* C$ \0 D& P$ m
设置各中断的优先级
2 j  ~% G6 h+ h0 I+ e  D' BNVIC_SetPriority(RTC_IRQn, 1);
  C+ S) c% p/ O/ m; rNVIC_SetPriority(RTC_LP_IRQn, 2);
( @3 Q2 w) E; `5 ^: v" I: }NVIC_SetPriority(USART2_IRQn, 2);0 r6 s2 y/ d! S4 k4 v1 A# T: D
% l5 G$ J+ q3 S; o  M4 b# D
在RTC_IRQn中清除中断标志并触发RTC_LP_IRQn% q3 @& D- D% ~  `' P3 k
ISR(RTC_IRQn)
5 e. c6 a. X" }: @( {* e1 |{- U" c) d$ x7 c
        RTC->ISR &=~ RTC_ISR_ALRAF;- Y2 K5 t$ {3 Z! J
        EXTI->PR = 1 << 17;
0 i' u( h* I. R        NVIC_SetPendingIRQ(RTC_LP_IRQn);$ o5 E/ P1 Y8 E
}! k! ]# Q: I+ k; i6 C8 v
* E1 l# t/ w+ k" S
在RTC_LP_IRQn中, 干些低优先级的事情., R9 M0 j& |( `% s
7 ]/ G, Z% I1 g; z
关于ISR宏, 请见https://www.stmcu.org.cn/module/f ... =616105&pid=2353177
& `' P" i1 a  m9 {; r老样子,来点福利
; j4 n1 h$ v1 j1 v) U9 m& |* X
! e& Z) X" T7 K6 x, k8 p( M4 m# n( ?! [+ ]; O! u, {: |0 j
收藏 评论0 发布时间:2019-10-11 13:18

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版