irqhandler.cpp: mask/unmask added
This commit is contained in:
		
							parent
							
								
									9931591a1f
								
							
						
					
					
						commit
						c84063aa6d
					
				| @ -6,6 +6,9 @@ | |||||||
| #define SENDCYCLE_IRQ 0x04 | #define SENDCYCLE_IRQ 0x04 | ||||||
| #define CYCLIC_IRQ 0x08 | #define CYCLIC_IRQ 0x08 | ||||||
| #define TIMESYNC_IRQ 0x10 | #define TIMESYNC_IRQ 0x10 | ||||||
|  | #define MASK_IRQ 0x20 | ||||||
|  | #define UNMASK_IRQ 0x40 | ||||||
|  | #define RESERVED_IRQ 0x80 | ||||||
| 
 | 
 | ||||||
| #include "globals.h" | #include "globals.h" | ||||||
| #include "cyclic.h" | #include "cyclic.h" | ||||||
|  | |||||||
| @ -3,14 +3,13 @@ | |||||||
| // Local logging tag
 | // Local logging tag
 | ||||||
| static const char TAG[] = __FILE__; | static const char TAG[] = __FILE__; | ||||||
| 
 | 
 | ||||||
| static portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; |  | ||||||
| 
 |  | ||||||
| // irq handler task, handles all our application level interrupts
 | // irq handler task, handles all our application level interrupts
 | ||||||
| void irqHandler(void *pvParameters) { | void irqHandler(void *pvParameters) { | ||||||
| 
 | 
 | ||||||
|   configASSERT(((uint32_t)pvParameters) == 1); // FreeRTOS check
 |   configASSERT(((uint32_t)pvParameters) == 1); // FreeRTOS check
 | ||||||
| 
 | 
 | ||||||
|   uint32_t InterruptStatus; |   uint32_t InterruptStatus; | ||||||
|  |   static bool mask_irq = false; | ||||||
| 
 | 
 | ||||||
|   // task remains in blocked state until it is notified by an irq
 |   // task remains in blocked state until it is notified by an irq
 | ||||||
|   for (;;) { |   for (;;) { | ||||||
| @ -19,6 +18,16 @@ void irqHandler(void *pvParameters) { | |||||||
|                     &InterruptStatus, // Receives the notification value
 |                     &InterruptStatus, // Receives the notification value
 | ||||||
|                     portMAX_DELAY);   // wait forever
 |                     portMAX_DELAY);   // wait forever
 | ||||||
| 
 | 
 | ||||||
|  |     // interrupt handler to be enabled?
 | ||||||
|  |     if (InterruptStatus & UNMASK_IRQ) | ||||||
|  |       mask_irq = false; | ||||||
|  |     else if (mask_irq) | ||||||
|  |       continue; // suppress processing if interrupt handler is disabled
 | ||||||
|  | 
 | ||||||
|  |     // interrupt handler to be disabled?
 | ||||||
|  |     if (InterruptStatus & MASK_IRQ) | ||||||
|  |       mask_irq = true; | ||||||
|  | 
 | ||||||
| // button pressed?
 | // button pressed?
 | ||||||
| #ifdef HAS_BUTTON | #ifdef HAS_BUTTON | ||||||
|     if (InterruptStatus & BUTTON_IRQ) |     if (InterruptStatus & BUTTON_IRQ) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user