bugfix IRQ masking

This commit is contained in:
Verkehrsrot 2019-07-23 12:57:05 +02:00
parent 1bc63bad94
commit 31c0037cba
3 changed files with 9 additions and 9 deletions

View File

@ -42,8 +42,8 @@
#define SCREEN_MODE (0x80) #define SCREEN_MODE (0x80)
// I2C bus access control // I2C bus access control
#define I2C_MUTEX_LOCK() xSemaphoreTake(I2Caccess, pdMS_TO_TICKS(10)) == pdTRUE #define I2C_MUTEX_LOCK() (xSemaphoreTake(I2Caccess, pdMS_TO_TICKS(10)) == pdTRUE)
#define I2C_MUTEX_UNLOCK() xSemaphoreGive(I2Caccess) #define I2C_MUTEX_UNLOCK() (xSemaphoreGive(I2Caccess))
// Struct holding devices's runtime configuration // Struct holding devices's runtime configuration
typedef struct { typedef struct {

View File

@ -17,8 +17,8 @@
#include "timekeeper.h" #include "timekeeper.h"
void irqHandler(void *pvParameters); void irqHandler(void *pvParameters);
bool mask_user_IRQ(); int mask_user_IRQ();
bool unmask_user_IRQ(); int unmask_user_IRQ();
#ifdef HAS_DISPLAY #ifdef HAS_DISPLAY
void IRAM_ATTR DisplayIRQ(); void IRAM_ATTR DisplayIRQ();

View File

@ -119,18 +119,18 @@ void IRAM_ATTR GpsIRQ() {
} }
#endif #endif
bool mask_user_IRQ() { int mask_user_IRQ() {
// begin of time critical section: lock I2C bus to ensure accurate timing // begin of time critical section: lock I2C bus to ensure accurate timing
if (I2C_MUTEX_LOCK()) { if (I2C_MUTEX_LOCK()) {
xTaskNotify(irqHandlerTask, MASK_IRQ, eSetBits); xTaskNotify(irqHandlerTask, MASK_IRQ, eSetBits);
return true; return 0;
} else } else
return false; // failure return 1; // failure
} }
bool unmask_user_IRQ() { int unmask_user_IRQ() {
// end of time critical section: release I2C bus // end of time critical section: release I2C bus
I2C_MUTEX_UNLOCK(); I2C_MUTEX_UNLOCK();
xTaskNotify(irqHandlerTask, UNMASK_IRQ, eSetBits); xTaskNotify(irqHandlerTask, UNMASK_IRQ, eSetBits);
return true; return 0;
} }