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:
mmi
2017-12-22 14:09:08 +00:00
parent 15d02bfa4f
commit 5e6e8a8ff5
17 changed files with 367 additions and 264 deletions

View File

@@ -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);
}