gpt4 book ai didi

embedded - 使用 EXTI 线进行软件中断

转载 作者:行者123 更新时间:2023-12-02 20:14:08 26 4
gpt4 key购买 nike

我正在使用STM32F4,我想生成一个软件中断。问题是我如何在中断处理程序中知道中断是由软件还是由连接到 EXTI 线的引脚生成的?

最佳答案

STM32F4上有两种产生软件中断的方法。

  • 通用 Cortex-M4 方法或写入软件触发中断寄存器 (STIR),或

  • 写入 EXTI 软件中断事件寄存器 (EXTI_SWIER) 的 STM32 EXTI 特定方法。

我认为第一种方法中的中断是不可区分的,因为 STIR 是一个只写寄存器。然而,EXTI_SWIER 是读/写的,并且在显式写入 EXTI_PR 中的相应位之前,写入触发中断的位不会被清除。因此,只需读取 EXTI_SWIER 即可确定中断是否为软件触发。

void EXTI0_IRQHandler(void) 
{
// Detect SWI
bool is_swi = (EXTI->SWIER & 0x00000001u) != 0 ;

// Clear interrupt flag
EXTI_ClearITPendingBit(EXTI_Line0);

if ( is_swi )
{
...
}
else
{
...
}
}

对于共享单个中断的 EXTI 线,您首先必须通过检查 PR 寄存器来确定事件线:

void EXTI15_10_IRQn( void )
{
for( uint32_t exti = 10; exti < 15; exti++ )
{
bool is_swi = false ;
if( EXTI_GetFlagStatus( exti ) == SET )
{
is_swi = (EXTI->SWIER & (0x1u << exti)) != 0 ;

// Clear interrupt flag
EXTI_ClearITPendingBit( exti ) ;

if ( is_swi )
{
...
}
else
{
...
}
}
}
}

关于embedded - 使用 EXTI 线进行软件中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44482964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com