265 lines
12 KiB
C
Executable File
265 lines
12 KiB
C
Executable File
|
|
/******************************************************************************
|
|
* \attention
|
|
*
|
|
* <h2><center>© COPYRIGHT 2020 STMicroelectronics</center></h2>
|
|
*
|
|
* Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
|
|
* You may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* www.st.com/myliberty
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
|
* AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
******************************************************************************/
|
|
|
|
|
|
/*
|
|
* PROJECT: ST25R3916 firmware
|
|
* Revision:
|
|
* LANGUAGE: ISO C99
|
|
*/
|
|
|
|
/*! \file
|
|
*
|
|
* \author Gustavo Patricio
|
|
*
|
|
* \brief ST25R3916 Interrupt handling
|
|
*
|
|
* \addtogroup RFAL
|
|
* @{
|
|
*
|
|
* \addtogroup RFAL-HAL
|
|
* \brief RFAL Hardware Abstraction Layer
|
|
* @{
|
|
*
|
|
* \addtogroup ST25R3916
|
|
* \brief RFAL ST25R3916 Driver
|
|
* @{
|
|
*
|
|
* \addtogroup ST25R3916_IRQ
|
|
* \brief RFAL ST25R3916 IRQ
|
|
* @{
|
|
*
|
|
*/
|
|
|
|
#ifndef ST25R3916_IRQ_H
|
|
#define ST25R3916_IRQ_H
|
|
|
|
/*
|
|
******************************************************************************
|
|
* INCLUDES
|
|
******************************************************************************
|
|
*/
|
|
|
|
#include "platform.h"
|
|
|
|
/*
|
|
******************************************************************************
|
|
* GLOBAL DEFINES
|
|
******************************************************************************
|
|
*/
|
|
|
|
#define ST25R3916_IRQ_MASK_ALL (uint32_t)(0xFFFFFFFFUL) /*!< All ST25R3916 interrupt sources */
|
|
#define ST25R3916_IRQ_MASK_NONE (uint32_t)(0x00000000UL) /*!< No ST25R3916 interrupt source */
|
|
|
|
/* Main interrupt register */
|
|
#define ST25R3916_IRQ_MASK_OSC (uint32_t)(0x00000080U) /*!< ST25R3916 oscillator stable interrupt */
|
|
#define ST25R3916_IRQ_MASK_FWL (uint32_t)(0x00000040U) /*!< ST25R3916 FIFO water level interrupt */
|
|
#define ST25R3916_IRQ_MASK_RXS (uint32_t)(0x00000020U) /*!< ST25R3916 start of receive interrupt */
|
|
#define ST25R3916_IRQ_MASK_RXE (uint32_t)(0x00000010U) /*!< ST25R3916 end of receive interrupt */
|
|
#define ST25R3916_IRQ_MASK_TXE (uint32_t)(0x00000008U) /*!< ST25R3916 end of transmission interrupt */
|
|
#define ST25R3916_IRQ_MASK_COL (uint32_t)(0x00000004U) /*!< ST25R3916 bit collision interrupt */
|
|
#define ST25R3916_IRQ_MASK_RX_REST (uint32_t)(0x00000002U) /*!< ST25R3916 automatic reception restart interrupt */
|
|
#define ST25R3916_IRQ_MASK_RFU (uint32_t)(0x00000001U) /*!< ST25R3916 RFU interrupt */
|
|
|
|
/* Timer and NFC interrupt register */
|
|
#define ST25R3916_IRQ_MASK_DCT (uint32_t)(0x00008000U) /*!< ST25R3916 termination of direct command interrupt. */
|
|
#define ST25R3916_IRQ_MASK_NRE (uint32_t)(0x00004000U) /*!< ST25R3916 no-response timer expired interrupt */
|
|
#define ST25R3916_IRQ_MASK_GPE (uint32_t)(0x00002000U) /*!< ST25R3916 general purpose timer expired interrupt */
|
|
#define ST25R3916_IRQ_MASK_EON (uint32_t)(0x00001000U) /*!< ST25R3916 external field on interrupt */
|
|
#define ST25R3916_IRQ_MASK_EOF (uint32_t)(0x00000800U) /*!< ST25R3916 external field off interrupt */
|
|
#define ST25R3916_IRQ_MASK_CAC (uint32_t)(0x00000400U) /*!< ST25R3916 collision during RF collision avoidance interrupt */
|
|
#define ST25R3916_IRQ_MASK_CAT (uint32_t)(0x00000200U) /*!< ST25R3916 minimum guard time expired interrupt */
|
|
#define ST25R3916_IRQ_MASK_NFCT (uint32_t)(0x00000100U) /*!< ST25R3916 initiator bit rate recognised interrupt */
|
|
|
|
/* Error and wake-up interrupt register */
|
|
#define ST25R3916_IRQ_MASK_CRC (uint32_t)(0x00800000U) /*!< ST25R3916 CRC error interrupt */
|
|
#define ST25R3916_IRQ_MASK_PAR (uint32_t)(0x00400000U) /*!< ST25R3916 parity error interrupt */
|
|
#define ST25R3916_IRQ_MASK_ERR2 (uint32_t)(0x00200000U) /*!< ST25R3916 soft framing error interrupt */
|
|
#define ST25R3916_IRQ_MASK_ERR1 (uint32_t)(0x00100000U) /*!< ST25R3916 hard framing error interrupt */
|
|
#define ST25R3916_IRQ_MASK_WT (uint32_t)(0x00080000U) /*!< ST25R3916 wake-up interrupt */
|
|
#define ST25R3916_IRQ_MASK_WAM (uint32_t)(0x00040000U) /*!< ST25R3916 wake-up due to amplitude interrupt */
|
|
#define ST25R3916_IRQ_MASK_WPH (uint32_t)(0x00020000U) /*!< ST25R3916 wake-up due to phase interrupt */
|
|
#define ST25R3916_IRQ_MASK_WCAP (uint32_t)(0x00010000U) /*!< ST25R3916 wake-up due to capacitance measurement */
|
|
|
|
/* Passive Target Interrupt Register */
|
|
#define ST25R3916_IRQ_MASK_PPON2 (uint32_t)(0x80000000U) /*!< ST25R3916 PPON2 Field on waiting Timer interrupt */
|
|
#define ST25R3916_IRQ_MASK_SL_WL (uint32_t)(0x40000000U) /*!< ST25R3916 Passive target slot number water level interrupt */
|
|
#define ST25R3916_IRQ_MASK_APON (uint32_t)(0x20000000U) /*!< ST25R3916 Anticollision done and Field On interrupt */
|
|
#define ST25R3916_IRQ_MASK_RXE_PTA (uint32_t)(0x10000000U) /*!< ST25R3916 RXE with an automatic response interrupt */
|
|
#define ST25R3916_IRQ_MASK_WU_F (uint32_t)(0x08000000U) /*!< ST25R3916 212/424b/s Passive target interrupt: Active */
|
|
#define ST25R3916_IRQ_MASK_RFU2 (uint32_t)(0x04000000U) /*!< ST25R3916 RFU2 interrupt */
|
|
#define ST25R3916_IRQ_MASK_WU_A_X (uint32_t)(0x02000000U) /*!< ST25R3916 106kb/s Passive target state interrupt: Active* */
|
|
#define ST25R3916_IRQ_MASK_WU_A (uint32_t)(0x01000000U) /*!< ST25R3916 106kb/s Passive target state interrupt: Active */
|
|
|
|
/*
|
|
******************************************************************************
|
|
* GLOBAL FUNCTION PROTOTYPES
|
|
******************************************************************************
|
|
*/
|
|
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Wait until an ST25R3916 interrupt occurs
|
|
*
|
|
* This function is used to access the ST25R3916 interrupt flags. Use this
|
|
* to wait for max. \a tmo milliseconds for the \b first interrupt indicated
|
|
* with mask \a mask to occur.
|
|
*
|
|
* \param[in] mask : mask indicating the interrupts to wait for.
|
|
* \param[in] tmo : time in milliseconds until timeout occurs. If set to 0
|
|
* the functions waits forever.
|
|
*
|
|
* \return : 0 if timeout occured otherwise a mask indicating the cleared
|
|
* interrupts.
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
uint32_t st25r3916WaitForInterruptsTimed( uint32_t mask, uint16_t tmo );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Get status for the given interrupt
|
|
*
|
|
* This function is used to check whether the interrupt given by \a mask
|
|
* has occured. If yes the interrupt gets cleared. This function returns
|
|
* only status bits which are inside \a mask.
|
|
*
|
|
* \param[in] mask : mask indicating the interrupt to check for.
|
|
*
|
|
* \return the mask of the interrupts occurred
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
uint32_t st25r3916GetInterrupt( uint32_t mask );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Init the 3916 interrupt
|
|
*
|
|
* This function is used to check whether the interrupt given by \a mask
|
|
* has occured.
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916InitInterrupts( void );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Modifies the Interrupt
|
|
*
|
|
* This function modifies the interrupt
|
|
*
|
|
* \param[in] clr_mask : bit mask to be cleared on the interrupt mask
|
|
* \param[in] set_mask : bit mask to be set on the interrupt mask
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916ModifyInterrupts( uint32_t clr_mask, uint32_t set_mask );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Checks received interrupts
|
|
*
|
|
* Checks received interrupts and saves the result into global params
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916CheckForReceivedInterrupts( void );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief ISR Service routine
|
|
*
|
|
* This function modiefies the interupt
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916Isr( void );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Enable a given ST25R3916 Interrupt source
|
|
*
|
|
* This function enables all interrupts given by \a mask,
|
|
* ST25R3916_IRQ_MASK_ALL enables all interrupts.
|
|
*
|
|
* \param[in] mask: mask indicating the interrupts to be enabled
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916EnableInterrupts( uint32_t mask );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Disable one or more a given ST25R3916 Interrupt sources
|
|
*
|
|
* This function disables all interrupts given by \a mask. 0xff disables all.
|
|
*
|
|
* \param[in] mask: mask indicating the interrupts to be disabled.
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916DisableInterrupts( uint32_t mask );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Clear all ST25R3916 irq flags
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916ClearInterrupts( void );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Clears and then enables the given ST25R3916 Interrupt sources
|
|
*
|
|
* \param[in] mask: mask indicating the interrupts to be cleared and enabled
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916ClearAndEnableInterrupts( uint32_t mask );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Sets IRQ callback for the ST25R3916 interrupt
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916IRQCallbackSet( void (*cb)( void ) );
|
|
|
|
/*!
|
|
*****************************************************************************
|
|
* \brief Sets IRQ callback for the ST25R3916 interrupt
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
void st25r3916IRQCallbackRestore( void );
|
|
|
|
#endif /* ST25R3916_IRQ_H */
|
|
|
|
/**
|
|
* @}
|
|
*
|
|
* @}
|
|
*
|
|
* @}
|
|
*
|
|
* @}
|
|
*/
|