Stability Fix
Clearing flags instead of ITStatus seems to improve stability in EXTI interrupts Added ASSERT functionality for STM std periphery library Also busy updating the HW validation menu git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@411 05563f52-14a8-4384-a975-3d1654cca0fa
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
#include "repairMenu.h"
|
||||
#include "repairProcess.h"
|
||||
|
||||
#include "Leds.h"
|
||||
#include "Logger.h"
|
||||
#include "platform.h"
|
||||
#include "rtc.h"
|
||||
@@ -132,6 +133,10 @@ void IRQ_setKeypadEXTI(struct Keypad* self, FunctionalState command)
|
||||
// }
|
||||
|
||||
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* @brief Function: SPI1_IRQHandler
|
||||
@@ -145,7 +150,7 @@ void IRQ_setKeypadEXTI(struct Keypad* self, FunctionalState command)
|
||||
*/
|
||||
void SPI1_IRQHandler (void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
//! Transmission register empty interrupt
|
||||
if(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_TXE) != RESET)
|
||||
@@ -195,7 +200,7 @@ void SPI1_IRQHandler (void)
|
||||
*/
|
||||
void SPI3_IRQHandler (void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
//! Transmission register empty interrupt
|
||||
if(SPI_I2S_GetITStatus(SPI3, SPI_I2S_IT_TXE) != RESET)
|
||||
@@ -235,10 +240,13 @@ void SPI3_IRQHandler (void)
|
||||
|
||||
void EXTI0_IRQHandler(void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
xSemaphoreGiveFromISR(interlock->semaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line0);
|
||||
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
|
||||
{
|
||||
xSemaphoreGiveFromISR(interlock->semaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line0);
|
||||
}
|
||||
|
||||
portEND_SWITCHING_ISR(higherPriorityTaskWoken);
|
||||
}
|
||||
@@ -246,10 +254,13 @@ void EXTI0_IRQHandler(void)
|
||||
|
||||
void EXTI1_IRQHandler(void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
xSemaphoreGiveFromISR(interlock->semaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line1);
|
||||
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
|
||||
{
|
||||
xSemaphoreGiveFromISR(interlock->semaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line1);
|
||||
}
|
||||
|
||||
portEND_SWITCHING_ISR(higherPriorityTaskWoken);
|
||||
}
|
||||
@@ -257,46 +268,55 @@ void EXTI1_IRQHandler(void)
|
||||
|
||||
void EXTI4_IRQHandler(void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
IRQ_setKeypadEXTI(keypad, DISABLE);
|
||||
xSemaphoreGiveFromISR(keypad->scanSemaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line4);
|
||||
if(EXTI_GetFlagStatus(EXTI_Line4) != RESET)
|
||||
{
|
||||
EXTI_ClearFlag(EXTI_Line4);
|
||||
IRQ_setKeypadEXTI(keypad, DISABLE);
|
||||
xSemaphoreGiveFromISR(keypad->scanSemaphore, &higherPriorityTaskWoken);
|
||||
}
|
||||
|
||||
portEND_SWITCHING_ISR(higherPriorityTaskWoken);
|
||||
}
|
||||
|
||||
void EXTI9_5_IRQHandler (void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
if (EXTI_GetITStatus(EXTI_Line5) != RESET)
|
||||
Led_on(LED_ONBOARD_GREEN);
|
||||
|
||||
if (EXTI_GetFlagStatus(EXTI_Line5) != RESET)
|
||||
{
|
||||
EXTI_ClearFlag(EXTI_Line5);
|
||||
IRQ_setKeypadEXTI(keypad, DISABLE);
|
||||
xSemaphoreGiveFromISR(keypad->scanSemaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line5);
|
||||
}
|
||||
else if (EXTI_GetITStatus(EXTI_Line6) != RESET)
|
||||
|
||||
else if (EXTI_GetFlagStatus(EXTI_Line6) != RESET)
|
||||
{
|
||||
EXTI_ClearFlag(EXTI_Line6);
|
||||
IRQ_setKeypadEXTI(keypad, DISABLE);
|
||||
xSemaphoreGiveFromISR(keypad->scanSemaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line6);
|
||||
}
|
||||
else if (EXTI_GetITStatus(EXTI_Line7) != RESET)
|
||||
|
||||
else if (EXTI_GetFlagStatus(EXTI_Line7) != RESET)
|
||||
{
|
||||
EXTI_ClearFlag(EXTI_Line7);
|
||||
IRQ_setKeypadEXTI(keypad, DISABLE);
|
||||
xSemaphoreGiveFromISR(keypad->scanSemaphore, &higherPriorityTaskWoken);
|
||||
EXTI_ClearITPendingBit(EXTI_Line7);
|
||||
}
|
||||
else if (EXTI_GetITStatus(EXTI_Line8) != RESET)
|
||||
else if (EXTI_GetFlagStatus(EXTI_Line8) != RESET)
|
||||
{
|
||||
EXTI_ClearITPendingBit(EXTI_Line8);
|
||||
EXTI_ClearFlag(EXTI_Line8);
|
||||
}
|
||||
else if (EXTI_GetITStatus(EXTI_Line9) != RESET)
|
||||
else if (EXTI_GetFlagStatus(EXTI_Line9) != RESET)
|
||||
{
|
||||
EXTI_ClearITPendingBit(EXTI_Line9);
|
||||
EXTI_ClearFlag(EXTI_Line9);
|
||||
}
|
||||
|
||||
Led_off(LED_ONBOARD_GREEN);
|
||||
|
||||
portEND_SWITCHING_ISR(higherPriorityTaskWoken);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user