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

在STM32F0上实现排队优先级

[复制链接]
yangc9 发布时间:2019-10-11 13:18
抢占优先级(pre-emption priority):执行一个中断时,来了抢占优先级更高的中断,会暂停当前中断,先执行高级中断.
7 Y1 R8 W8 R$ U. h" V7 c排队优先级(sub-priority):一个中断执行完后,有多个抢占优先级相同的中断,先执行排队优先级最高的.如果排队优先级相同,或内核不支持排队优先级,先执行中断号最小的.
7 Z0 K! Z$ g7 ?; S( D- i4 U* `3 u
STM32F1有16个优先级,可配置为16抢占,或4抢占4排队,等等.使用起来很方便.
3 H8 L6 J' Z0 H. y8 d0 \STM32F0只有4个抢占优先级,没有排队优先级.在响应多种输入有些不便.
7 I% B0 S# f. u我找到一个方法,可以在STM32F0上实现排队优先级.. V. V( g- ~7 L

$ g2 V  d8 C; Y( c; j( }6 L9 X7 @比如我有两个中断,RTC_IRQn和USART2_IRQn.按照中断号的顺序,RTC_IRQn在前.
  v$ I- ]# ~1 T但是我认为串口输入需要更快得到响应,要让RTC_IRQn在USART2_IRQn之后.
5 s( Y" q  Z9 j3 s. C
) Y# K# X5 q, w& t0 h/ m找一个未使用的中断,中断号要大于USART2_IRQn.比如CEC_CAN_IRQn,给他取个新的名字
" ]# O, H+ M9 G: Q% ^  P#define RTC_LP_IRQn CEC_CAN_IRQn' r: J" }  h$ I4 y

% p& P& j! p9 I( b. k% [设置各中断的优先级
) Q- ^& Q& X. i* m$ @+ H9 X3 B4 m' aNVIC_SetPriority(RTC_IRQn, 1);
5 a6 r& u: S' e: H! w6 yNVIC_SetPriority(RTC_LP_IRQn, 2);& Z4 m6 Y0 }- a! k8 x
NVIC_SetPriority(USART2_IRQn, 2);
$ t# ~2 o2 p7 B  r% g  e" y3 Z  ^1 F' S) y/ ~- R
在RTC_IRQn中清除中断标志并触发RTC_LP_IRQn" ~$ R( |% h/ c* b0 F' N7 v
ISR(RTC_IRQn)
7 n6 `5 q3 v) A. Y{- J3 p" O! P, \& b8 A( }/ y( v2 \
        RTC->ISR &=~ RTC_ISR_ALRAF;
1 G, k4 m6 [, E4 K6 h0 s        EXTI->PR = 1 << 17;
7 O6 ?) j; H8 U( Q$ O$ Z        NVIC_SetPendingIRQ(RTC_LP_IRQn);+ u% V, j, ]) l, J
}
5 a& z* L& U# u
" X6 N+ `+ F% W+ \) g1 i0 c3 S5 x在RTC_LP_IRQn中, 干些低优先级的事情.
5 }9 u/ c8 t2 o" j9 y
, A/ L) n6 Y6 U! r( L0 l2 S8 |关于ISR宏, 请见https://www.stmcu.org.cn/module/f ... =616105&pid=23531772 N$ O7 q* U1 m% u
老样子,来点福利3 h6 s, g9 b5 Y0 F( @, [  b

8 S) @1 W* _' T. Z( Q, r. V6 G, z/ w2 b$ ]2 t) P9 y) l
收藏 评论0 发布时间:2019-10-11 13:18

举报

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