* - adcGROUP0: ADC event group
* - adcGROUP1: ADC group 1
* - adcGROUP2: ADC group 2
+* @param[out] Flag signalling that context switch is required
*
* @note This function has to be provide by the user.
*/
-void adcNotification(adcBASE_t *adc, uint32_t group);
+void adcNotification(adcBASE_t *adc, uint32_t group, portBASE_TYPE* xHigherPriorityTaskWoken);
#endif
#include "drv/drv.h"
#include "drv/port.h"
+#include "os/portmacro.h"
// Binary semaphores for finish notifications
static xSemaphoreHandle sem[2][2];
* - adcGROUP1: ADC group 1
* - adcGROUP2: ADC group 2
*/
-void adcNotification(adcBASE_t *adc, uint32_t group)
+void adcNotification(adcBASE_t *adc, uint32_t group, portBASE_TYPE* xHigherPriorityTaskWoken)
{
if (adcIsConversionComplete(adc, group) == ADC_CONVERSION_IS_FINISHED) {
- signed portBASE_TYPE dummy;
int adc_idx = (adc == adcREG1) ? 0 : 1;
int grp_idx = (group == adcGROUP1) ? 0 : 1;
- xSemaphoreGiveFromISR(sem[adc_idx][grp_idx], &dummy);
+ xSemaphoreGiveFromISR(sem[adc_idx][grp_idx], xHigherPriorityTaskWoken);
}
}
/* Include Files */
#include "sys/ti_drv_adc.h"
+#include "os/os.h"
+#include "os/portmacro.h"
/** @fn void adcInit(void)
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}
#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);
}