/* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU */
/* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */
/* ELIGIBILITY FOR ANY PURPOSES.											 */
/*				 (C) Fujitsu Microelectronics Europe GmbH				  */
/*------------------------------------------------------------------------
  watchdog.c
  - This file contains the function deefinition for hardware watchdog.
-------------------------------------------------------------------------*/

#include "mb91467d.h"
#include "FreeRTOS.h"
#include "task.h"
#include "watchdog.h"

/*---------------------------------------------------------------------------
 * Setup Watchdog
 *---------------------------------------------------------------------------*/
#if WATCHDOG != WTC_NONE
void InitWatchdog(void)
{
	HWWDE_ED = WTC_PER_2_16;	/* Set the watchdog period as 655.36 ms */
}
#endif

/*---------------------------------------------------------------------------
 * The below task clears the watchdog and blocks itself for WTC_CLR_PER ticks.
 *---------------------------------------------------------------------------*/
#if WATCHDOG == WTC_IN_TASK
static void prvWatchdogTask	( void *pvParameters )
{
 	const TickType_t xFrequency = WTC_CLR_PER;
	TickType_t xLastWakeTime;

	/* Get currrent tick count */
	xLastWakeTime = xTaskGetTickCount();

	for( ; ; )
	{
		Kick_Watchdog();

		/* Block the task for WTC_CLR_PER ticks (300 ms) at watchdog overflow
		period of WTC_PER_2_16 CLKRC cycles (655.36 ms) */
		vTaskDelayUntil( &xLastWakeTime, xFrequency );
	}
}
#endif

/*---------------------------------------------------------------------------
 * The below function creates hardware watchdog task.
 *---------------------------------------------------------------------------*/
#if WATCHDOG == WTC_IN_TASK
void vStartWatchdogTask( unsigned short uxPriority )
{
	xTaskCreate( prvWatchdogTask , "KickWTC",   portMINIMAL_STACK_SIZE, ( void * ) NULL, uxPriority, ( TaskHandle_t * ) NULL );
}
#endif
