394 lines
13 KiB
C
394 lines
13 KiB
C
/*********************************************************************************************************************
|
|
* Copyright (c) 2019, Infineon Technologies AG
|
|
*
|
|
*
|
|
* Distributed under the Boost Software License, Version 1.0.
|
|
*
|
|
*
|
|
* Boost Software License - Version 1.0 - August 17th, 2003
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person or organization
|
|
* obtaining a copy of the software and accompanying documentation covered by
|
|
* this license (the "Software") to use, reproduce, display, distribute,
|
|
* execute, and transmit the Software, and to prepare derivative works of the
|
|
* Software, and to permit third-parties to whom the Software is furnished to
|
|
* do so, all subject to the following:
|
|
*
|
|
* The copyright notices in the Software and this entire statement, including
|
|
* the above license grant, this restriction and the following disclaimer,
|
|
* must be included in all copies of the Software, in whole or in part, and
|
|
* all derivative works of the Software, unless such copies or derivative
|
|
* works are solely in the form of machine-executable object code generated by
|
|
* a source language processor.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*********************************************************************************************************************/
|
|
|
|
|
|
/****************************************************************************************************//**
|
|
* @file TLE94x1.h
|
|
*
|
|
* @brief Main header declaration file for TLE94x1 SBC family device
|
|
*
|
|
* @version V1.0.0
|
|
* @date 15. April 2019
|
|
* @author Markus Noll / markus.noll@infineon.com
|
|
* @author Yannek Micha Rixen / Yannek.Rixen@infineon.com
|
|
*******************************************************************************************************/
|
|
|
|
|
|
|
|
|
|
#ifndef TLE94x1_H
|
|
#define TLE94x1_H
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ================================================================================ */
|
|
/* ============================ HEADER FILES ================================ */
|
|
/* ================================================================================ */
|
|
|
|
|
|
|
|
#include "TLE94x1_DEFINES.h"
|
|
#include "TLE94x1_ISR.h"
|
|
#include "TLE94x1_SPI.h"
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
/* ================================================================================ */
|
|
/* ================================ MACROS ================================== */
|
|
/* ================================================================================ */
|
|
|
|
|
|
/**
|
|
* @def SBC_Write_Bit
|
|
*
|
|
* @brief This bit has to be set in order to write to a register.
|
|
*/
|
|
#define SBC_Write_Bit (0x80U)
|
|
|
|
/**
|
|
* @def SBC_Read_Mask
|
|
*
|
|
* @brief A mask to prevent the user from accidentally writing to a register.
|
|
*/
|
|
#define SBC_Read_Mask (0x7FU)
|
|
|
|
|
|
|
|
|
|
/* ================================================================================ */
|
|
/* =========================== Library Functions ============================ */
|
|
/* ================================================================================ */
|
|
|
|
struct __SBC_ErrorCode;
|
|
|
|
/**
|
|
* @brief A structure for simple error readout.
|
|
*
|
|
* flippedBitsMask is greater than 0 if the value read from the register at SBC_Register differs from expectedValue.
|
|
*/
|
|
typedef struct __SBC_ErrorCode {
|
|
uint8_t SBC_Register; //!< The register where an error occurred.
|
|
uint8_t flippedBitsMask; //!< Masks the bits that differ from the expected value. Is 0 if readout is as expected.
|
|
uint8_t expectedValue; //!< Expected readout of the register.
|
|
} SBC_ErrorCode;
|
|
|
|
/**
|
|
* @brief Typedef for interrupt callbacks.
|
|
*/
|
|
typedef void (*SBC_Func_Callback)(uint8_t callbackHandler);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* -------------------------------- Main Functions ------------------------------- */
|
|
|
|
|
|
/**
|
|
* @brief This method will trigger the watchdog.
|
|
*
|
|
* The function must be called periodically according to the configured watchdog-time.
|
|
*/
|
|
SBC_ErrorCode SBC_WD_Trigger(void);
|
|
|
|
|
|
/**
|
|
* @brief This method will proceed a readout of a register.
|
|
*
|
|
* @param SBC_Reg Address of the register to be read out. See TLE94x1_DEFINES.h for definitions
|
|
* @retval A 16 bit value will be returned.
|
|
* Bit[15:8] is the Status-Information-Field, Bit [7:0] is the read register-value.
|
|
* For furhter information of the Status-Information-Field see chapter 13.3 in the datasheet.
|
|
*/
|
|
uint16_t SBC_Read_Command(uint8_t SBC_Reg);
|
|
|
|
|
|
/**
|
|
* @brief This method will proceed a readout of a dedicated bitfield within a register
|
|
*
|
|
* @param SBC_Reg Address of the register to be readout. See TLE94x1_DEFINES.h for definitions
|
|
* @param SBC_FieldMsk Bit mask of the field to be readout. See TLE94x1_DEFINES.h for definitions
|
|
* @param SBC_FieldPos Bit position of the field to be readout. See TLE94x1_DEFINES.h for definitions
|
|
*
|
|
*
|
|
* @retval A 8 bit value will be returned and includes the data of the bitfield to be read out *
|
|
*/
|
|
uint8_t SBC_Read_RegField(uint8_t SBC_Reg, uint8_t SBC_FieldMsk, uint8_t SBC_FieldPos);
|
|
|
|
|
|
|
|
/**
|
|
* @brief Writes a whole byte to a register and verifies it.
|
|
*
|
|
* @param SBC_Reg Address of the register to be manipulated. See TLE94x1_DEFINES.h for definitions
|
|
* @param SBC_Val Byte to write to SBC_Reg
|
|
* @param *returnval A 16 bit value will be returned.
|
|
* Bit[15:8] is the Status-Information-Field, Bit [7:0] is the value of the manipulated register before write
|
|
* For furhter information of the Status-Information-Field see chapter 13.3 in the datasheet.
|
|
*
|
|
* @retval See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Write_Reg(uint8_t SBC_Reg, uint8_t SBC_Val, uint16_t * returnval);
|
|
|
|
|
|
/**
|
|
* @brief This method can be used for manipulating a single bit-field in a control-register.
|
|
*
|
|
* It will readout the old value of the registers, manipulate the desired bit-field and keep
|
|
* the other bit-configuration as it was.
|
|
* For usage examples have a look at the implementations of different API calls below.
|
|
*
|
|
* @param SBC_Reg Address of the register to be manipulated. See TLE94x1_DEFINES.h for definitions
|
|
* @param SBC_FieldMsk Bit mask of the field to manipulate. See TLE94x1_DEFINES.h for definitions
|
|
* @param SBC_FieldPos Bit position of the field to manipulate. See TLE94x1_DEFINES.h for definitions
|
|
* @param SBC_FieldVal New value which will be written to the bit-field. See TLE94x1_DEFINES.h for enumerations
|
|
* @param *returnval A 16 bit value will be returned.
|
|
* Bit[15:8] is the Status-Information-Field, Bit [7:0] is the value of the manipulated register before write
|
|
* For furhter information of the Status-Information-Field see chapter 13.3 in the datasheet.
|
|
*
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*
|
|
*/
|
|
SBC_ErrorCode SBC_Write_RegField(uint8_t SBC_Reg, uint8_t SBC_FieldMsk, uint8_t SBC_FieldPos, uint8_t SBC_FieldVal, uint16_t * returnval);
|
|
|
|
|
|
/**
|
|
* @brief This method must be called one time at startup of the microcontroller.
|
|
*
|
|
* This method will initialize all registers of the SBC with the configuration-data of SBC_TLE94x1.h.
|
|
* After this, the SBC can be used as normal.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Init(void);
|
|
|
|
/* -------------------------------- ISR Functions -------------------------------- */
|
|
|
|
|
|
/**
|
|
* @brief This function can register a self-defined function to a specific interrupt-event of the SBC.
|
|
*
|
|
* Everytime the SBC_ISR() method is called and the associated status-bit is set, it will consider to
|
|
* proceed a callback to this function later.
|
|
* See all the possible ISR_Vectors in the TLE94x1_ISR.h
|
|
*
|
|
*
|
|
* @param ISR_Vector Definition of the interrupt event. See all possible events in TLE94x1_ISR.h
|
|
*
|
|
* @param *Callback_Handler Pointer to the function which will be called back.
|
|
* The function must accept a uint8_t as first argument.
|
|
*/
|
|
void SBC_Register_Callback(uint32_t ISR_Vector, void (*Callback_Handler)(uint8_t callbackHandler));
|
|
|
|
|
|
/**
|
|
* @brief Interrupt Service Routine for handling interrupts.
|
|
*
|
|
* This method must be called automatically everytime a rising-edge on the INTN pin is recognized.
|
|
* In case, the INTN pin is not connected, this method can also be called periodically by the user during runtime.
|
|
* The ISR will proceed a readout of all registered interrupts. If a status-bit of a registered interrupt is set,
|
|
* it will initiate a callback to the registered function and give the registered function the status-register value
|
|
* as a parameter.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_ISR(void);
|
|
|
|
|
|
|
|
/* -------------------------------- API Calls ----------------------------------- */
|
|
|
|
/**
|
|
* @brief Enters SBC normal mode
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Mode_Normal(void);
|
|
|
|
|
|
/**
|
|
* @brief Enters SBC stop mode
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Mode_Stop(void);
|
|
|
|
|
|
/**
|
|
* @brief Clears all wake status registers and enter SBC sleep mode. Depending on configuration also the selective-wake feature will be initialized
|
|
* before entering sleep mode. In case, the SWK option is enabled and the internal CAN protocol handler is not in sync when calling this function,
|
|
* the sleep mode will be not entered.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Mode_Sleep(void);
|
|
|
|
|
|
/**
|
|
* @brief Sets the duty-cycle of the internal PWM generator
|
|
*
|
|
* @param PWM_DC Set the duty-cycle with values of 0-255 for 0% to 100%
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Set_DutyCycle_PWM(uint8_t PWM_DC);
|
|
|
|
|
|
/**
|
|
* @brief Sets the OnTime of the internal timer.
|
|
*
|
|
* @param OnTime On time which will be configured to the timer. See TLE94x1_DEFINES.h for enumerations.
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Set_Timer_On(uint8_t OnTime);
|
|
|
|
/**
|
|
* @brief Sets the Period time of the internal timer
|
|
*
|
|
* @param Period Period time which will be configured to the timer. See TLE94x1_DEFINES.h for enumerations.
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Set_Timer_Period(uint8_t Period);
|
|
|
|
|
|
/**
|
|
* @brief FO output activated by software for testing. Only working if FO/GPIO is configured as FO
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_FO_Test_On(void);
|
|
|
|
|
|
/**
|
|
* @brief FO output deactivated by software for testing. Only working if FO/GPIO is configured as FO
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_FO_Test_Off(void);
|
|
|
|
|
|
/**
|
|
* @brief Charge-Pump (VCP-Pin) is enabled. See chapter 5.3 in datasheet.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_CP_On(void);
|
|
|
|
|
|
/**
|
|
* @brief Charge-Pump (VCP-Pin) is disabled. See chapter 5.3 in datasheet.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_CP_Off(void);
|
|
|
|
|
|
/**
|
|
* @brief Enable Voltage Sensing. No wake-up events are generated. See chapter 9.2.4 in datasheet.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_WK_MEAS_On(void);
|
|
|
|
|
|
/**
|
|
* @brief Disable Voltage Sensing and enable wake-up functionality. See chapter 9.2.4 in datasheet.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_WK_MEAS_Off(void);
|
|
|
|
|
|
/**
|
|
* @brief WK is enabled as wake source. See chapter 5.2.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_TIMER_WK_EN_On(void);
|
|
|
|
|
|
/**
|
|
* @brief WK wake-up disabled. See chapter 5.2.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_TIMER_WK_EN_Off(void);
|
|
|
|
|
|
/**
|
|
* @brief Reads System Status Control, both lower and higher bits. See page 138 in datasheet.
|
|
*
|
|
* @retval Upper 8 bit are read from register SBC_SYS_STATUS_CTRL_1 and the lower 8 bit from SBC_SYS_STATUS_CTRL_0
|
|
*/
|
|
uint16_t SBC_SYS_STAT_Read(void);
|
|
|
|
|
|
/**
|
|
* @brief Writes System Status Control, both lower and higher bits. See page 138 in datasheet.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_SYS_STAT_Write(uint16_t SystemStatus);
|
|
|
|
|
|
/**
|
|
* @brief Locks CP_EN, GPIO configuration and 'rwl'-bits.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Lock_Configuration(void);
|
|
|
|
|
|
/**
|
|
* @brief Unlocks CP_EN, GPIO configuration and 'rwl'-bits.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Unlock_Configuration(void);
|
|
|
|
|
|
/**
|
|
* @brief Clears both Wake Status registers.
|
|
*
|
|
* @retval SBC_ErrorCode See description of SBC_ErrorCode.
|
|
*/
|
|
SBC_ErrorCode SBC_Clear_Wake_Status(void);
|
|
|
|
#endif /*TLE94x1_H*/
|