/**
******************************************************************************
* @file tsl_acq_stm8tl5x.h
* @author MCD Application Team
* @version V1.4.4
* @date 31-March-2014
* @brief This file contains all functions prototypes that manage the TSC
* acquisition on STM8TL5x products.
******************************************************************************
* @attention
*
*
© COPYRIGHT 2014 STMicroelectronics
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __TSL_ACQ_STM8TL5X_H
#define __TSL_ACQ_STM8TL5X_H
/* Includes ------------------------------------------------------------------*/
#include "stm8tl5x.h"
#include "tsl_conf_stm8tl5x.h"
#include "tsl_types.h"
/*==============================================================================
*** RECEIVERS AND TRANSMITTERS DESCRIPTION ***
ProxSense receiver and transmitter description for STM8TL5x
For more details please refer to the Proxsense
section in the reference manual
Txi
Group Ai Rx0a __/____ |
Rx1a __/____ |
Rx2a __/____ |
Rx3a __/____ |
Rx4a __/____ |
Rx5a __/____ |
Rx6a __/____ |
Rx7a __/____ |
Rx8a __/____ |
Rx9a __/____ |
Group Bi Rx0b __/____ |
Rx1b __/____ |
Rx2b __/____ |
Rx3b __/____ |
Rx4b __/____ |
Rx5b __/____ |
Rx6b __/____ |
Rx7b __/____ |
Rx8b __/____ |
Rx9b __/____ |
==============================================================================*/
/* Defines -------------------------------------------------------------------*/
// Receivers
#define RX0 (0+0x8000)
#define RX1 (1+0x8000)
#define RX2 (2+0x8000)
#define RX3 (3+0x8000)
#define RX4 (4+0x8000)
#define RX5 (5+0x8000)
#define RX6 (6+0x8000)
#define RX7 (7+0x8000)
#define RX8 (8+0x8000)
#define RX9 (9+0x8000)
// Transmitters
#define TX0 (0)
#define TX1 (1)
#define TX2 (2)
#define TX3 (3)
#define TX4 (4)
#define TX5 (5)
#define TX6 (6)
#define TX7 (7)
#define TX8 (8)
#define TX9 (9)
#define TX10 (10)
#define TX11 (11)
#define TX12 (12)
#define TX13 (13)
#define TX14 (14)
#define BIT_MASK_RX(N) ((uint16_t)1<<(uint8_t)(N & 0xFF))
#define BIT_MASK_TX(N) ((uint16_t)1<< N)
// Acquisition Bank
#define BANK01 1
#define BANK02 2
#define BANK03 3
#define BANK04 4
#define BANK05 5
#define BANK06 6
#define BANK07 7
#define BANK08 8
#define BANK09 9
#define BANK10 10
#define BANK11 11
#define BANK12 12
#define BANK13 13
#define BANK14 14
#define BANK15 15
#define BANK16 16
#define BANK17 17
#define BANK18 18
#define BANK19 19
#define BANK20 20
#define BANK21 21
#define BANK22 22
#define BANK23 23
#define BANK24 24
#define BANK25 25
#define BANK26 26
#define BANK27 27
#define BANK28 28
#define BANK29 29
#define BANK30 30
/* Exported types ------------------------------------------------------------*/
// For all devices/acquisitions
typedef uint16_t TSL_tMeas_T; /**< Measurement */
typedef uint16_t TSL_tRef_T; /**< Reference */
typedef int16_t TSL_tDelta_T; /**< Delta */
typedef uint8_t TSL_tIndexSrc_T; /**< Channel source index */
typedef uint16_t TSL_tIndexDest_T; /**< Channel destination index */
typedef uint8_t TSL_tRefRest_T; /**< Reference Rest (ECS) */
typedef uint16_t TSL_tKCoeff_T; /**< K coefficient (ECS) */
typedef uint8_t TSL_tIndex_T; /**< Generic index */
typedef uint16_t TSL_tNb_T; /**< Generic number */
typedef uint8_t TSL_tCounter_T; /**< Generic counter used for debounce */
typedef uint8_t TSL_tThreshold_T; /**< Delta threshold */
typedef int16_t TSL_tsignPosition_T; /**< Linear and Rotary sensors position */
typedef uint8_t TSL_tPosition_T; /**< Linear and Rotary sensors position */
typedef uint16_t TSL_tTick_ms_T; /**< Time in ms */
typedef uint8_t TSL_tTick_sec_T; /**< Time in sec */
// For STM8TL5X only
typedef uint16_t TSL_tMaskRX; /**< Receiver mask */
typedef uint16_t TSL_tMaskTX; /**< Transmitter mask */
//------------------------------------------------------------------------------
// Channel
//------------------------------------------------------------------------------
/** Channel destination index
*/
typedef struct
{
TSL_tIndexDest_T IdxDest; /**< Index in the Channel data array */
} TSL_ChannelDest_T;
/** Channel Source and Configuration
*/
typedef struct
{
TSL_tIndexSrc_T IdxSrc; /**< Index of the receivers (between 0 and 9) */
} TSL_ChannelSrc_T;
#define TSL_EPCC_CHANGE_MASK (0x04) /**< EPCC change mask */
/** EPCC status
*/
typedef enum
{
TSL_EPCC_STATUS_UNLOCKED = 0, /**< EPCC is unlocked */
TSL_EPCC_STATUS_LOCKED = 1, /**< EPCC is locked */
TSL_EPCC_STATUS_DECREASE = 4, /**< EPCC must decreased */
TSL_EPCC_STATUS_INCREASE = 6 /**< EPCC must be increased */
} TSL_EPCCStatus_enum_T;
/** Channel flags
*/
typedef struct
{
unsigned int DataReady : 1; /**< To identify a new measurement (TSL_DataReady_enum_T) */
unsigned int AcqStatus : 2; /**< Acquisition status (TSL_AcqStatus_enum_T) */
unsigned int EPCCStatus : 3; /**< Acquisition status (TSL_EPCCStatus_enum_T) */
unsigned int ObjStatus : 2; /**< Object status (TSL_ObjStatus_enum_T) */
} TSL_ChannelFlags_T;
/** Channel Data
*/
typedef struct
{
TSL_ChannelFlags_T Flags; /**< Flags */
TSL_tRef_T Ref; /**< Reference */
TSL_tRefRest_T RefRest; /**< Reference rest for ECS */
TSL_tDelta_T Delta; /**< Delta */
#if TSLPRM_USE_MEAS > 0
TSL_tMeas_T Meas; /**< Hold the last acquisition measure */
#endif
} TSL_ChannelData_T;
//------------------------------------------------------------------------------
// Bank
//------------------------------------------------------------------------------
/** Bank
*/
typedef struct
{
// Common to all acquisitions
CONST TSL_ChannelSrc_T *p_chSrc; /**< Pointer to the Channel Source and Configuration */
CONST TSL_ChannelDest_T *p_chDest; /**< Pointer to the Channel Destination */
TSL_ChannelData_T *p_chData; /**< Pointer to the Channel Data */
TSL_tNb_T NbChannels; /**< Number of channels in the bank */
// For stm8tl5x PXS acquisition only
TSL_tMaskRX msk_channels; /**< Mask of all receivers */
TSL_tMaskTX msk_TX; /**< Mask of Tx */
uint8_t msk_group; /**< Mask of group used (RX_GROUPA or RX_GROUPB) */
TSL_tMaskRX msk_RXEN; /**< Mask of all RX (receivers and transmitters) */
} TSL_Bank_T;
/** Bank Configuration
*/
typedef struct
{
uint8_t CSSEL[TSLPRM_HIGH_CHANNEL_NB+1]; /**< Array of CS values */
uint8_t EPCCSEL[TSLPRM_HIGH_CHANNEL_NB+1]; /**< Array of EPCC values */
} TSL_BankConfig_T;
/* Exported variables --------------------------------------------------------*/
/* Exported macros -----------------------------------------------------------*/
#define TSL_acq_ComputeDelta(Reference,Measure) (TSL_tDelta_T)(Measure - Reference) /**< Calculate the Delta */
#define TSL_acq_ComputeMeas(Reference,Delta) (TSL_tMeas_T)(Delta + Reference) /**< Calculate the Measure */
/* Exported functions ------------------------------------------------------- */
TSL_Status_enum_T TSL_acq_Init(void);
TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk);
TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh);
TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas);
TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh);
void TSL_acq_BankStartAcq(void);
TSL_Status_enum_T TSL_acq_BankWaitEOC(void);
TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void);
TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndexSrc_T index);
void TSL_acq_UpdateCS(uint8_t *pCSSEL, TSL_EPCCStatus_enum_T change);
#endif /* __TSL_ACQ_STM8TL5X_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/