Select Git revision
Forked from
card10 / firmware
Source project has a limited visibility.
support.c 3.07 KiB
/*
* FreeRTOS support functions
*/
#include "FreeRTOS.h"
#include "task.h"
#include "api/dispatcher.h"
#include "card10.h"
extern TaskHandle_t dispatcher_task_id;
/*
* This hook is called before FreeRTOS enters tickless idle.
*/
void pre_idle_sleep(TickType_t xExpectedIdleTime)
{
if (xExpectedIdleTime > 0) {
/*
* WFE because the other core should be able to notify
* epicardium if it wants to issue an API call.
*/
/*
* TODO: Ensure this is actually correct and does not have any
* race conditions.
*/
__asm volatile("dsb" ::: "memory");
__asm volatile("wfe");
__asm volatile("isb");
GPIO_OutClr(&debug_pin_0);
}
}
/*
* This hook is called after FreeRTOS exits tickless idle.
*/
void post_idle_sleep(TickType_t xExpectedIdleTime)
{
/* Check whether a new API call was issued. */
if (api_dispatcher_poll_once()) {
xTaskNotifyGive(dispatcher_task_id);
}
/*
* Do card10 house keeping. e.g. polling the i2c devices if they
* triggered an interrupt.
*
* TODO: Do this in a more task focused way (high/low ISR)
*/
card10_poll();
}
void vApplicationGetIdleTaskMemory(
StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize
) {
/*
* If the buffers to be provided to the Idle task are declared inside this
* function then they must be declared static - otherwise they will be allocated on
* the stack and so not exists after this function exits.
*/
static StaticTask_t xIdleTaskTCB;
static StackType_t uxIdleTaskStack[configMINIMAL_STACK_SIZE];
/*
* Pass out a pointer to the StaticTask_t structure in which the Idle task's
* ktate will be stored.