wifi test
Dependencies: X_NUCLEO_IKS01A2 mbed-http
easy-connect/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Irq.c
- Committer:
- JMF
- Date:
- 2018-09-05
- Revision:
- 0:24d3eb812fd4
File content as of revision 0:24d3eb812fd4:
/**
******************************************************************************
* @file SPIRIT_Irq.c
* @author VMA division - AMS
* @version 3.2.2
* @date 08-July-2015
* @brief Configuration and management of SPIRIT IRQs.
* @details
*
* @attention
*
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "SPIRIT_Irq.h"
#include "MCU_Interface.h"
/**
* @addtogroup SPIRIT_Libraries
* @{
*/
/**
* @addtogroup SPIRIT_Irq
* @{
*/
/**
* @defgroup Irq_Private_TypesDefinitions IRQ Private Types Definitions
* @{
*/
/**
*@}
*/
/**
* @defgroup Irq_Private_Defines IRQ Private Defines
* @{
*/
/**
*@}
*/
/**
* @defgroup Irq_Private_Macros IRQ Private Macros
* @{
*/
/**
*@}
*/
/**
* @defgroup Irq_Private_Variables IRQ Private Variables
* @{
*/
/**
*@}
*/
/**
* @defgroup Irq_Private_FunctionPrototypes IRQ Private Function Prototypes
* @{
*/
/**
*@}
*/
/**
* @defgroup Irq_Private_Functions IRQ Private Functions
* @{
*/
/**
* @brief De initializate the SpiritIrqs structure setting all the bitfield to 0.
* Moreover, it sets the IRQ mask registers to 0x00000000, disabling all IRQs.
* @param pxIrqInit pointer to a variable of type @ref SpiritIrqs, in which all the
* bitfields will be settled to zero.
* @retval None.
*/
void SpiritIrqDeInit(SpiritIrqs* pxIrqInit)
{
uint8_t tempRegValue[4]={0x00,0x00,0x00,0x00};
if(pxIrqInit!=NULL)
{
/* Sets the bitfields of passed structure to one */
*(uint32_t*)pxIrqInit = 0x0;
}
/* Writes the IRQ_MASK registers */
g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
}
/**
* @brief Enables all the IRQs according to the user defined pxIrqInit structure.
* @param pxIrqInit pointer to a variable of type @ref SpiritIrqs, through which the
* user enable specific IRQs. This parameter is a pointer to a SpiritIrqs.
* For example suppose to enable only the two IRQ Low Battery Level and Tx Data Sent:
* @code
* SpiritIrqs myIrqInit = {0};
* myIrqInit.IRQ_LOW_BATT_LVL = 1;
* myIrqInit.IRQ_TX_DATA_SENT = 1;
* SpiritIrqInit(&myIrqInit);
* @endcode
* @retval None.
*/
void SpiritIrqInit(SpiritIrqs* pxIrqInit)
{
/* Writes the IRQ_MASK registers */
g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqInit);
}
/**
* @brief Enables or disables a specific IRQ.
* @param xIrq IRQ to enable or disable.
* This parameter can be any value of @ref IrqList.
* @param xNewState new state for the IRQ.
* This parameter can be: S_ENABLE or S_DISABLE.
* @retval None.
*/
void SpiritIrq(IrqList xIrq, SpiritFunctionalState xNewState)
{
uint8_t tempRegValue[4];
uint32_t tempValue = 0;
/* Check the parameters */
s_assert_param(IS_SPIRIT_IRQ_LIST(xIrq));
s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
/* Reads the IRQ_MASK registers */
g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
/* Build the IRQ mask word */
for(uint8_t i=0; i<4; i++)
{
tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i));
}
/* Rebuild the new mask according to user request */
if(xNewState == S_DISABLE)
{
tempValue &= (~xIrq);
}
else
{
tempValue |= (xIrq);
}
/* Build the array of bytes to write in the IRQ_MASK registers */
for(uint8_t j=0; j<4; j++)
{
tempRegValue[j] = (uint8_t)(tempValue>>(8*(3-j)));
}
/* Writes the new IRQ mask in the corresponding registers */
g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
}
/**
* @brief Fills a pointer to a structure of SpiritIrqs type reading the IRQ_MASK registers.
* @param pxIrqMask pointer to a variable of type @ref SpiritIrqs, through which the
* user can read which IRQs are enabled. All the bitfields equals to zero correspond
* to enabled IRQs, while all the bitfields equals to one correspond to disabled IRQs.
* This parameter is a pointer to a SpiritIrqs.
* For example suppose that the Power On Reset and RX Data ready are the only enabled IRQs.
* @code
* SpiritIrqs myIrqMask;
* SpiritIrqGetStatus(&myIrqMask);
* @endcode
* Then
* myIrqMask.IRQ_POR and myIrqMask.IRQ_RX_DATA_READY are equal to 0
* while all the other bitfields are equal to one.
* @retval None.
*/
void SpiritIrqGetMask(SpiritIrqs* pxIrqMask)
{
/* Reads IRQ_MASK registers */
g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqMask);
}
/**
* @brief Filla a pointer to a structure of SpiritIrqs type reading the IRQ_STATUS registers.
* @param pxIrqStatus pointer to a variable of type @ref SpiritIrqs, through which the
* user can read the status of all the IRQs. All the bitfields equals to one correspond
* to the raised interrupts. This parameter is a pointer to a SpiritIrqs.
* For example suppose that the XO settling timeout is raised as well as the Sync word
* detection.
* @code
* SpiritIrqs myIrqStatus;
* SpiritIrqGetStatus(&myIrqStatus);
* @endcode
* Then
* myIrqStatus.IRQ_XO_COUNT_EXPIRED and myIrqStatus.IRQ_VALID_SYNC are equals to 1
* while all the other bitfields are equals to zero.
* @retval None.
*/
void SpiritIrqGetStatus(SpiritIrqs* pxIrqStatus)
{
/* Reads IRQ_STATUS registers */
g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, (uint8_t*)pxIrqStatus);
}
/**
* @brief Clear the IRQ status registers.
* @param None.
* @retval None.
*/
void SpiritIrqClearStatus(void)
{
uint8_t tempRegValue[4];
/* Reads the IRQ_STATUS registers clearing all the flags */
g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
}
/**
* @brief Verifies if a specific IRQ has been generated.
* The call resets all the IRQ status, so it can't be used in case of multiple raising interrupts.
* @param xFlag IRQ flag to be checked.
* This parameter can be any value of @ref IrqList.
* @retval SpiritBool S_TRUE or S_FALSE.
*/
SpiritBool SpiritIrqCheckFlag(IrqList xFlag)
{
uint8_t tempRegValue[4];
uint32_t tempValue = 0;
SpiritBool flag;
/* Check the parameters */
s_assert_param(IS_SPIRIT_IRQ_LIST(xFlag));
/* Reads registers and build the status word */
g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
for(uint8_t i=0; i<4; i++)
{
tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i));
}
if(tempValue & xFlag)
{
flag = S_TRUE;
}
else
{
flag = S_FALSE;
}
return flag;
}
/**
*@}
*/
/**
*@}
*/
/**
*@}
*/
/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/