SysTick en PSoC 4 y 5LP

Como parte de la documentación de PSoC Creator tenemos el System Reference Guide, dentro de este, en la sección 15, encontramos el System Timer (SysTick), el cual esta presente en los Cortex M0 (PSoC 4) y Cortex m3 (PSoC 5LP). Es un contador descendente con un valor reload/tick de 24-bits, que usa como clock el System Clock, tiene la capacidad de generar una interrupcción cuando el número de ticks expira (se hace cero) y el counter es recargado. Es práctico cuando se necesita de un tiempo preciso y no tenemos un timer o contador disponible para hacer el trabajo.
Contamos con los siguientes APIs en el Creator:

CySysTickStart() /* Configura e inicia el SysTick timer */
CySysTickInit() /* Inicializa el SysTick Timer */
CySysTickEnable() /* Habilita el SysTick Timer y su interrupción */
CySysTickStop() /* Detiene el SysTick Timer */
CySysTickEnableInterrupt() /* Habilita la interrupción del SysTick Timer */
CySysTickDisableInterrupt() /* Deshabilita la interrupción del SysTick Timer */
CySysTickSetReload() /* Establece el valor de la recarga del SysTick */
CySysTickGetReload() /* Obtiene el valor de la recarga del SysTick */
CySysTickGetValue() /* Obtiene el valor actual del contador del SysTick */
CySysTickSetClockSource() /* Establece la fuente de clock para el contador del  SysTick */
CySysTickGetCountFlag() /* Obtiene el flag del contador del SysTick */
CySysTickClear() /* Limpia el contador del SysTick para un inicio bien definido */
CySysTickSetCallback() /* Establece la dirección de la función que será llamada en una interrupción del SysTick */
CySysTickGetCallback() /* Obtiene el puntero del callback especifico */

Ahora los detalles de las funciones:

/**
* @brief Configura el Systick timer para generar una interrupción cada 1 ms.
* @param None
* @return None
**/

void CySysTickStart(void);

/**
* @brief Inicializa el SysTick
* @param None
* @return None
**/

void CySysTickInit(void);

/**
* @brief Habilita el SysTick timer y su interrupción.
* @param None
* @return None
**/

void CySysTickEnable(void);

/**
* @brief Detiene el SysTick
* @param None
* @return None
**/

void CySysTickStop(void);

/**
* @brief Habilita la interrupción del SysTick
* @param None
* @return None
**/

void CySysTickEnableInterrupt(void);

/**
* @brief Deshabilita la interrupción del SysTick
* @param None
* @return None
**/

void CySysTickDisableInterrupt(void);

/**
* @brief Establece el valor de recarga con el que inicia el contador del SysTick despues de alcanzar el cero.
* @param value: valor del contador a la hora del reset. Valores validos 0x00 - 0xFFFFFF
* Por ejemplo: si el SysTick esta configurado para tener un clock de 48 MHz
* (System Clock) y deseamos tener una interrupción cada 100 us, el parametro value
* de la función debe ser 4,800 ((48,000,000 Hz * 100) / 1,000,000 us en un segundo) 
* @return None
**/

void CySysTickSetReload(uint32 value);

/**
* @brief Retorna el valor de reload del SysTick
* @param None
* @return (uint32) valor de reload del SysTick
**/

uint32 CySysTickGetReload(void);

/**
* @brief Retorna el valor actual del counter del SysTick
* @param None
* @return (uint32) valor actual del counter del SysTick
**/

uint32 CySysTickGetValue(void);

/**
* @brief Obtiene el valor de la recarga del SysTick
* @param None
* @return (uint32) Valor de la recarga del SysTick
**/

uint32 CySysTickGetReload(void);

/**
* @brief Obtiene el flag del contador del SysTick
* @param None
* @return (uint32) Flag del contador del SysTick
**/

uint32 CySysTickGetCountFlag(void);

/**
* @brief Limpia el contador del SysTick para un inicio bien definido
* @param None
* @return None
**/

void CySysTickClear(void);

/**
* @brief Esta función permite al usuario asociar hasta cinco funciones con
* la interrupción del SysTick.
* @param (uint32) number: El número . El rango valido es de 0 a 4.
* @param void(*CallbakFunction(void)): Un puntero a la función que será asociada
* con la ISR del SysTick para el número especificado.
* @return Retorna la dirección de la callback function previa
* retorna NULL si la función de la dirección especificada no ha sido inicializada.
**/

(void*) CySysTickSetCallback(uint32 number, void(*CallbackFunction)(void));

/**
* @brief Obtiene el puntero del callback especifico
* @param None
* @return (void*) Puntero de un callback en especifico
**/

(void*) CySysTickGetCallback(uint32 number);

Variables Globales

uint32 cySysTickInitVar    Indica si el SysTick ha sido inicializado.

Comentarios

Entradas más populares de este blog

PSoC Creator Tools

PSoC5LP Usando el SAR ADC y la señal EoS para manejar una LUT