Project

General

Profile

/*****************************************************************************
* File Name: WatchdogTimer.c
*
* Version: 1.0
*
* Description:
* This file defines the watchdog timer functionality for this lab session in
* the PSoC 4 BLE Lab 3.
*
* Hardware Dependency:
* CY8CKIT-042 BLE Pioneer Kit
*
******************************************************************************
* Copyright (2014), Cypress Semiconductor Corporation.
******************************************************************************
* This software is owned by Cypress Semiconductor Corporation (Cypress) and is
* protected by and subject to worldwide patent protection (United States and
* foreign), United States copyright laws and international treaty provisions.
* Cypress hereby grants to licensee a personal, non-exclusive, non-transferable
* license to copy, use, modify, create derivative works of, and compile the
* Cypress Source Code and derivative works for the sole purpose of creating
* custom software in support of licensee product to be used only in conjunction
* with a Cypress integrated circuit as specified in the applicable agreement.
* Any reproduction, modification, translation, compilation, or representation of
* this software except as specified above is prohibited without the express
* written permission of Cypress.
*
* Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
* REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
* Cypress reserves the right to make changes without further notice to the
* materials described herein. Cypress does not assume any liability arising out
* of the application or use of any product or circuit described herein. Cypress
* does not authorize its products for use as critical components in life-support
* systems where a malfunction or failure may reasonably be expected to result in
* significant injury to the user. The inclusion of Cypress' product in a life-
* support systems application implies that the manufacturer assumes all risk of
* such use and in doing so indemnifies Cypress against all charges. Use may be
* limited by and subject to the applicable Cypress software license agreement.
*****************************************************************************/


/*****************************************************************************
* Included headers
*****************************************************************************/
#include <project.h>


/*****************************************************************************
* Macros and constants
*****************************************************************************/
#define WDT_PERIOD_MS (10)
#define WDT_TICKS_PER_MS (32)
#define WDT_TICKS (WDT_PERIOD_MS * WDT_TICKS_PER_MS)
#define WDT_INTERRUPT_NUM (8)


/*****************************************************************************
* Static variables
*****************************************************************************/
static uint32 watchdogTimestamp = 0;


/*****************************************************************************
* Public function definitions
*****************************************************************************/

/*****************************************************************************
* Function Name: WatchdogTimer_Isr
******************************************************************************
* Summary:
* Interrupt service routine for the watchdog timer.
*
* Parameters:
* None
*
* Return:
* None
*
* Theory:
* The ISR increments the system timestamp by the watchdog timer period. It
* then clears the WDT interrupt.
*
* Side Effects:
* None
*
*****************************************************************************/
CY_ISR(WatchdogTimer_Isr)
{
/* Update the system timestamp - the watchdog period time has elapsed
* since the last interrupt.
*/
watchdogTimestamp += WDT_PERIOD_MS;
/* Clear WDT interrupt */
CySysWdtClearInterrupt(CY_SYS_WDT_COUNTER0_INT);
}


/*****************************************************************************
* Function Name: WatchdogTimer_Start
******************************************************************************
* Summary:
* Starts the watchdog timer WDT0 to be used as the system timer. Define a
* system timestamp variable to be updated on every watchdog interrupt.
*
* Parameters:
* None
*
* Return:
* None
*
* Theory:
* The function uses the watchdog timer WDT0 of the chip. It configures the
* timer to fire an interrupt upon match. The periodic interrupt updates the
* system timestamp variable which is used to keep track of the system activity.
* The timer is configured for clear on match i.e. the WDT counter is reset to
* zero upon a match event. The timer is continuously run.
*
* To change the watchdog timer settings, the function needs to unlock the
* WDT first, and then lock it after the modification is complete.
*
* Side Effects:
* None
*
*****************************************************************************/
void WatchdogTimer_Start(void)
{
/* Set the WDT ISR */
CyIntSetVector(WDT_INTERRUPT_NUM, &WatchdogTimer_Isr);
/* Unlock the sytem watchdog timer to be able to change settings */
CySysWdtUnlock();
/* Configure the watchdog timer 0 (WDT0) to fire an interrupt upon match
* i.e. when the count register value equals the match register value.
*/
CySysWdtWriteMode(0, CY_SYS_WDT_MODE_INT);
/* WDT0 counter to be cleared upon a match event and then begin again.
* The timer is to be run continuously.
*/
CySysWdtWriteClearOnMatch(0, 1);
/* Set the value of the match register. Since the count starts from zero,
* the actual value is the (intended - 1).
* The match register value set here is for 10 ms interval. This is
* because we want to run a main loop of 10 ms with a scan happening at
* the beginning of the loop and stay in deep sleep for the rest of the
* time. With a scan happening every 10 ms, we can properly detect a
* heart rate without missing a beat.
*/
CySysWdtWriteMatch(0, WDT_TICKS - 1);
/* Enable the WDT0 */
CySysWdtEnable(CY_SYS_WDT_COUNTER0_MASK);
/* Enable interrupt */
CyIntEnable(WDT_INTERRUPT_NUM);
/* Lock the watchdog timer to prevent future modification */
CySysWdtLock();
}


/*****************************************************************************
* Function Name: WatchdogTimer_GetTimestamp
******************************************************************************
* Summary:
* Returns the system timestamp value.
*
* Parameters:
* None
*
* Return:
* uint32: Current system timestamp
*
* Theory:
* The function returns the watchdog timestamp.
*
* Side Effects:
* None
*
*****************************************************************************/
uint32 WatchdogTimer_GetTimestamp(void)
{
return watchdogTimestamp;
}


/* [] END OF FILE */
(7-7/10)