]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blobdiff - rpp/src/sys/_rm48_hdk/ti_drv_adc.c
Trigger context switch after ADC interrupts
[pes-rpp/rpp-lib.git] / rpp / src / sys / _rm48_hdk / ti_drv_adc.c
index 09300e073bf8bc49ed0c04199fa83e74885aa34b..03a4d2ef6bb1d63f4920f2ef954255cd4a9b2d53 100644 (file)
@@ -12,6 +12,8 @@
 
 /* Include Files */
 #include "sys/ti_drv_adc.h"
+#include "os/os.h"
+#include "os/portmacro.h"
 
 
 /** @fn void adcInit(void)
@@ -792,8 +794,10 @@ void adcDisableNotification(adcBASE_t *adc, uint32_t group)
 #pragma INTERRUPT(adc1Group0Interrupt, IRQ)
 void adc1Group0Interrupt(void)
 {
-    adcNotification(adcREG1, adcGROUP0);
+    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+    adcNotification(adcREG1, adcGROUP0, &xHigherPriorityTaskWoken);
     adcREG1->GxINTFLG[0U] = _BV(3) | _BV(0);
+    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
 }
 
 
@@ -803,9 +807,11 @@ void adc1Group0Interrupt(void)
 #pragma INTERRUPT(adc1Group1Interrupt, IRQ)
 void adc1Group1Interrupt(void)
 {
-    adcNotification(adcREG1, adcGROUP1);
+    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+    adcNotification(adcREG1, adcGROUP1, &xHigherPriorityTaskWoken);
     // For ADC1 Group1 see tms570_trm.pdf p. 791 (783)
     adcREG1->GxINTFLG[1U] = _BV(3) | _BV(0);
+    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
 }
 
 
@@ -815,8 +821,10 @@ void adc1Group1Interrupt(void)
 #pragma INTERRUPT(adc1Group2Interrupt, IRQ)
 void adc1Group2Interrupt(void)
 {
-    adcNotification(adcREG1, adcGROUP2);
+    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+    adcNotification(adcREG1, adcGROUP2, &xHigherPriorityTaskWoken);
     adcREG1->GxINTFLG[2U] = _BV(3) | _BV(0);;
+    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
 }
 
 
@@ -826,8 +834,10 @@ void adc1Group2Interrupt(void)
 #pragma INTERRUPT(adc2Group0Interrupt, IRQ)
 void adc2Group0Interrupt(void)
 {
-    adcNotification(adcREG2, adcGROUP0);
+    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+    adcNotification(adcREG2, adcGROUP0, &xHigherPriorityTaskWoken);
     adcREG2->GxINTFLG[0U] = _BV(3) | _BV(0);
+    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
 }
 
 
@@ -837,8 +847,10 @@ void adc2Group0Interrupt(void)
 #pragma INTERRUPT(adc2Group1Interrupt, IRQ)
 void adc2Group1Interrupt(void)
 {
-    adcNotification(adcREG2, adcGROUP1);
+    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+    adcNotification(adcREG2, adcGROUP1, &xHigherPriorityTaskWoken);
     adcREG2->GxINTFLG[1U] = _BV(3) | _BV(0);
+    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
 }
 
 
@@ -848,7 +860,9 @@ void adc2Group1Interrupt(void)
 #pragma INTERRUPT(adc2Group2Interrupt, IRQ)
 void adc2Group2Interrupt(void)
 {
-    adcNotification(adcREG2, adcGROUP2);
+    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+    adcNotification(adcREG2, adcGROUP2, &xHigherPriorityTaskWoken);
     adcREG2->GxINTFLG[2U] = _BV(3) | _BV(0);
+    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
 }