Files
tinyUSB/mcu/lpc43xx/CMSIS_LPC43xx_DriverLib/src/lpc43xx_evrt.c
2014-03-12 17:20:24 +07:00

264 lines
9.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**********************************************************************
* $Id$ lpc43xx_evrt.c 2011-06-02
*//**
* @file lpc43xx_evrt.c
* @brief Contains all functions support for Event Router firmware
* library on lpc43xx
* @version 1.0
* @date 02. June. 2011
* @author NXP MCU SW Application Team
*
* Copyright(C) 2011, NXP Semiconductor
* All rights reserved.
*
***********************************************************************
* Software that is described herein is for illustrative purposes only
* which provides customers with programming information regarding the
* products. This software is supplied "AS IS" without any warranties.
* NXP Semiconductors assumes no responsibility or liability for the
* use of the software, conveys no license or title under any patent,
* copyright, or mask work right to the product. NXP Semiconductors
* reserves the right to make changes in the software without
* notification. NXP Semiconductors also make no representation or
* warranty that such application will be suitable for the specified
* use without further testing or modification.
* Permission to use, copy, modify, and distribute this software and its
* documentation is hereby granted, under NXP Semiconductors
* relevant copyright in the software, without fee, provided that it
* is used in conjunction with NXP Semiconductors microcontrollers. This
* copyright, permission, and disclaimer notice must appear in all copies of
* this code.
**********************************************************************/
/* Peripheral group ----------------------------------------------------------- */
/** @addtogroup EVRT
* @{
*/
/* Includes ------------------------------------------------------------------- */
#include "lpc43xx_evrt.h"
/* If this source file built with example, the lpc43xx FW library configuration
* file in each example directory ("lpc43xx_libcfg.h") must be included,
* otherwise the default FW library configuration file must be included instead
*/
#ifdef __BUILD_WITH_EXAMPLE__
#include "lpc43xx_libcfg.h"
#else
#include "lpc43xx_libcfg_default.h"
#endif /* __BUILD_WITH_EXAMPLE__ */
/* Public Functions ----------------------------------------------------------- */
/** @addtogroup EVRT_Public_Functions
* @{
*/
/********************************************************************//**
* @brief Initializes the EVRT peripheral.
* @param[in] EVRTx EVRT peripheral selected, should be: LPC_EVRT
* @return None
*********************************************************************/
void EVRT_Init (LPC_EVENTROUTER_Type *EVRTx)
{
uint8_t i=0;
CHECK_PARAM(PARAM_EVRTx(EVRTx));
// Clear all register to be default
EVRTx->HILO = 0x0000;
EVRTx->EDGE = 0x0000;
EVRTx->CLR_EN = 0xFFFF;
do
{
i++;
EVRTx->CLR_STAT = 0xFFFFF;
}while((EVRTx->STATUS != 0)&&(i<10));
}
/*********************************************************************//**
* @brief De-initializes the EVRT peripheral registers to their
* default reset values.
* @param[in] EVRTx EVRT peripheral selected, should be: LPC_EVRT
* @return None
**********************************************************************/
void EVRT_DeInit(LPC_EVENTROUTER_Type *EVRTx)
{
CHECK_PARAM(PARAM_EVRTx(EVRTx));
EVRTx->CLR_EN = 0xFFFF;
EVRTx->CLR_STAT = 0xFFFF;
}
/*********************************************************************//**
* @brief Setting up the type of interrupt sources to EVRT
* @param[in] EVRTx EVRT peripheral selected, should be: LPC_EVRT
* @param[in] EVRT_Src EVRT source, should be:
* - EVRT_SRC_WAKEUP0 :WAKEUP0 event
* - EVRT_SRC_WAKEUP1 :WAKEUP1 event
* - EVRT_SRC_WAKEUP2 :WAKEUP2 event
* - EVRT_SRC_WAKEUP3 :WAKEUP3 event
* - EVRT_SRC_ATIMER :Alarm timer eveny
* - EVRT_SRC_RTC :RTC event
* - EVRT_SRC_BOD :BOD event
* - EVRT_SRC_WWDT :WWDT event
* - EVRT_SRC_ETHERNET :ETHERNET event
* - EVRT_SRC_USB0 :USB0 event
* - EVRT_SRC_USB1 :USB1 event
* - EVRT_SRC_CCAN :CCAN event
* - EVRT_SRC_COMBINE_TIMER2 :Combined timer output 2 event
* - EVRT_SRC_COMBINE_TIMER6 :Combined timer output 6 event
* - EVRT_SRC_QEI :QEI event
* - EVRT_SRC_COMBINE_TIMER14 :Combined timer output 14 event
* - EVRT_SRC_RESET :RESET event
* type Active type, should be:
* - EVRT_SRC_ACTIVE_LOW_LEVEL :Active low level
* - EVRT_SRC_ACTIVE_HIGH_LEVEL :Active high level
* - EVRT_SRC_ACTIVE_FALLING_EDGE :Active falling edge
* - EVRT_SRC_ACTIVE_RISING_EDGE :Active rising edge
* @param[in] type EVRT source active type, should be:
* - EVRT_SRC_ACTIVE_LOW_LEVEL :Active low level
* - EVRT_SRC_ACTIVE_HIGH_LEVEL :Active high level
* - EVRT_SRC_ACTIVE_FALLING_EDGE :Active falling edge
* - EVRT_SRC_ACTIVE_RISING_EDGE :Active rising edge
* @return None
**********************************************************************/
void EVRT_ConfigIntSrcActiveType(LPC_EVENTROUTER_Type *EVRTx, EVRT_SRC_ENUM EVRT_Src, EVRT_SRC_ACTIVE_TYPE type)
{
CHECK_PARAM(PARAM_EVRTx(EVRTx));
CHECK_PARAM(PARAM_EVRT_SOURCE(EVRT_Src));
CHECK_PARAM(PARAM_EVRT_SOURCE_ACTIVE_TYPE(type));
switch (type)
{
case EVRT_SRC_ACTIVE_LOW_LEVEL:
EVRTx->HILO &= ~(1<<(uint8_t)EVRT_Src);
EVRTx->EDGE &= ~(1<<(uint8_t)EVRT_Src);
break;
case EVRT_SRC_ACTIVE_HIGH_LEVEL:
EVRTx->HILO |= (1<<(uint8_t)EVRT_Src);
EVRTx->EDGE &= ~(1<<(uint8_t)EVRT_Src);
break;
case EVRT_SRC_ACTIVE_FALLING_EDGE:
EVRTx->HILO &= ~(1<<(uint8_t)EVRT_Src);
EVRTx->EDGE |= (1<<(uint8_t)EVRT_Src);
break;
case EVRT_SRC_ACTIVE_RISING_EDGE:
EVRTx->HILO |= (1<<(uint8_t)EVRT_Src);
EVRTx->EDGE |= (1<<(uint8_t)EVRT_Src);
break;
default:
break;
}
}
/*********************************************************************//**
* @brief Enable or disable interrupt sources to EVRT
* @param[in] EVRTx EVRT peripheral selected, should be LPC_EVRT
* @param[in] EVRT_Src EVRT source, should be:
* - EVRT_SRC_WAKEUP0 :WAKEUP0 event
* - EVRT_SRC_WAKEUP1 :WAKEUP1 event
* - EVRT_SRC_WAKEUP2 :WAKEUP2 event
* - EVRT_SRC_WAKEUP3 :WAKEUP3 event
* - EVRT_SRC_ATIMER :Alarm timer eveny
* - EVRT_SRC_RTC :RTC event
* - EVRT_SRC_BOD :BOD event
* - EVRT_SRC_WWDT :WWDT event
* - EVRT_SRC_ETHERNET :ETHERNET event
* - EVRT_SRC_USB0 :USB0 event
* - EVRT_SRC_USB1 :USB1 event
* - EVRT_SRC_CCAN :CCAN event
* - EVRT_SRC_COMBINE_TIMER2 :Combined timer output 2 event
* - EVRT_SRC_COMBINE_TIMER6 :Combined timer output 6 event
* - EVRT_SRC_QEI :QEI event
* - EVRT_SRC_COMBINE_TIMER14 :Combined timer output 14 event
* - EVRT_SRC_RESET :RESET event
* @param[in] state ENABLE or DISABLE
* @return None
**********************************************************************/
void EVRT_SetUpIntSrc(LPC_EVENTROUTER_Type *EVRTx, EVRT_SRC_ENUM EVRT_Src, FunctionalState state)
{
CHECK_PARAM(PARAM_EVRTx(EVRTx));
CHECK_PARAM(PARAM_EVRT_SOURCE(EVRT_Src));
if(state == ENABLE)
EVRTx->SET_EN = (1<<(uint8_t)EVRT_Src);
else
EVRTx->CLR_EN = (1<<(uint8_t)EVRT_Src);
}
/*********************************************************************//**
* @brief Check if a source is sending interrupt to EVRT
* @param[in] EVRTx EVRT peripheral selected, should be LPC_EVRT
* @param[in] EVRT_Src EVRT source, should be:
* - EVRT_SRC_WAKEUP0 :WAKEUP0 event
* - EVRT_SRC_WAKEUP1 :WAKEUP1 event
* - EVRT_SRC_WAKEUP2 :WAKEUP2 event
* - EVRT_SRC_WAKEUP3 :WAKEUP3 event
* - EVRT_SRC_ATIMER :Alarm timer eveny
* - EVRT_SRC_RTC :RTC event
* - EVRT_SRC_BOD :BOD event
* - EVRT_SRC_WWDT :WWDT event
* - EVRT_SRC_ETHERNET :ETHERNET event
* - EVRT_SRC_USB0 :USB0 event
* - EVRT_SRC_USB1 :USB1 event
* - EVRT_SRC_CCAN :CCAN event
* - EVRT_SRC_COMBINE_TIMER2 :Combined timer output 2 event
* - EVRT_SRC_COMBINE_TIMER6 :Combined timer output 6 event
* - EVRT_SRC_QEI :QEI event
* - EVRT_SRC_COMBINE_TIMER14 :Combined timer output 14 event
* - EVRT_SRC_RESET :RESET event
* @return TRUE or FALSE
**********************************************************************/
Bool EVRT_IsSourceInterrupting(LPC_EVENTROUTER_Type *EVRTx, EVRT_SRC_ENUM EVRT_Src)
{
CHECK_PARAM(PARAM_EVRTx(EVRTx));
CHECK_PARAM(PARAM_EVRT_SOURCE(EVRT_Src));
if(EVRTx->STATUS & (1<<(uint8_t)EVRT_Src))
return TRUE;
else return FALSE;
}
/*********************************************************************//**
* @brief Clear pending interrupt EVRT source
* @param[in] EVRTx EVRT peripheral selected, should be LPC_EVRT
* @param[in] EVRT_Src EVRT source, should be:
* - EVRT_SRC_WAKEUP0 :WAKEUP0 event
* - EVRT_SRC_WAKEUP1 :WAKEUP1 event
* - EVRT_SRC_WAKEUP2 :WAKEUP2 event
* - EVRT_SRC_WAKEUP3 :WAKEUP3 event
* - EVRT_SRC_ATIMER :Alarm timer eveny
* - EVRT_SRC_RTC :RTC event
* - EVRT_SRC_BOD :BOD event
* - EVRT_SRC_WWDT :WWDT event
* - EVRT_SRC_ETHERNET :ETHERNET event
* - EVRT_SRC_USB0 :USB0 event
* - EVRT_SRC_USB1 :USB1 event
* - EVRT_SRC_CCAN :CCAN event
* - EVRT_SRC_COMBINE_TIMER2 :Combined timer output 2 event
* - EVRT_SRC_COMBINE_TIMER6 :Combined timer output 6 event
* - EVRT_SRC_QEI :QEI event
* - EVRT_SRC_COMBINE_TIMER14 :Combined timer output 14 event
* - EVRT_SRC_RESET :RESET event
* @return none
**********************************************************************/
void EVRT_ClrPendIntSrc(LPC_EVENTROUTER_Type *EVRTx, EVRT_SRC_ENUM EVRT_Src)
{
CHECK_PARAM(PARAM_EVRTx(EVRTx));
CHECK_PARAM(PARAM_EVRT_SOURCE(EVRT_Src));
EVRTx->CLR_STAT = (1<<(uint8_t)EVRT_Src);
}
/**
* @}
*/
/**
* @}
*/
/* --------------------------------- End Of File ------------------------------ */