TLE5012B_spi.h 3.0 KB
#ifndef __TLE5012B_SPI_H__
#define __TLE5012B_SPI_H__

#include "stdint.h"

// TLE5012B Gun Configurtion
#include "TLE5012B_spi_Config.h"

/*_____________________TL5012 BSP PLE Setting Start____________________*/

// TLE5012B Angle Process Optimize Option (Use IQ) : Fast more than 20% (compare with hardwave FPV)
#define TLE5012B_BSP_SPI_USE_IQ TLE5012B_SPI_CONFIG_USE_IQ

#define TLE5012B_BSP_PLATFORM_SELECT TLE5012B_SPI_CONFIG_PLAFORM

/*‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾TL5012 BSP PLE Setting END‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾*/

#if TLE5012B_BSP_SPI_USE_IQ == TLE5012B_SPI_CONFIG_ENABLE
    #include "IQmathLib.h"
#endif

#if TLE5012B_BSP_PLATFORM_SELECT == TLE5012_SUPPORT_PLATFORM_F1
    #include "stm32f1xx_ll_spi.h"
    #include "stm32f1xx_ll_gpio.h"
#endif

#if TLE5012B_BSP_PLATFORM_SELECT == TLE5012_SUPPORT_PLATFORM_F4
    #include "stm32f4xx_ll_spi.h"
    #include "stm32f4xx_ll_gpio.h"
#endif

/*_____________________TL5012 BSP Hardware Setting START_____________________*/

// TLE5012 SPI Setting
#define TLE5012_SPIx_BASE       TLE5012_SPI_BASE

#define TLE5012_SPIx_CS_GPIO    TLE5012_SPI_CS_GPIO
#define TLE5012_SPIx_CS_GPIOPIN TLE5012_SPI_CS_GPIOPIN

#define TLE5012_SPIx_TX_GPIO    TLE5012_SPI_TX_GPIO
#define TLE5012_SPIx_TX_GPIOPIN TLE5012_SPI_TX_GPIOPIN

//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾TL5012 BSP Hardware Setting END‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾



/***********************************TL5012 BSP Content***************************/


// TLE5012 SPI Util
#define TLE5012_CS1_Enable  LL_GPIO_ResetOutputPin(TLE5012_SPIx_CS_GPIO,TLE5012_SPIx_CS_GPIOPIN);
#define TLE5012_CS1_Disable LL_GPIO_SetOutputPin(TLE5012_SPIx_CS_GPIO,TLE5012_SPIx_CS_GPIOPIN);

#define TLE5012_TX_OFF LL_GPIO_SetPinOutputType(TLE5012_SPIx_TX_GPIO,TLE5012_SPIx_TX_GPIOPIN,LL_GPIO_OUTPUT_OPENDRAIN);
#define TLE5012_TX_ON LL_GPIO_SetPinOutputType(TLE5012_SPIx_TX_GPIO,TLE5012_SPIx_TX_GPIOPIN,LL_GPIO_OUTPUT_PUSHPULL);

// TLE5012 SPI Comm Addr
#define TLE5012_CMD_READ_STATUS 0x8001      // 8000
#define TLE5012_CMD_READ_ANGLE_VALUE 0x8021 // 8020
#define TLE5012_CMD_READ_SPEED_VALUE 0x8031 // 8020

#define TLE5012_CMD_READ_MOD_2 0x8081
#define TLE5012_CMD_WRITE_MOD_2 0x5081
#define TLE5012_CMD_WRITE_STATUS 0x5011      // 8000

#define TLE5012_CMD_MOD_2_PREDIECTION_MASK 0x0008
#define TLE5012_CMD_MOD_2_PREDIECTION_UNMASK 0xFFF7


void tle5012b_spi_init(void);

uint16_t tle5012b_read_angleRAW(void);

#if TLE5012B_BSP_SPI_USE_IQ == TLE5012B_SPI_CONFIG_ENABLE
float tle5012b_read_angle_iq(void);
_iq14 tle5012b_read_angle_iqOut(void);
#endif

#define TLE5012B_RECAVG_BUFFLEN 5

float tle5012b_read_angle_f(void);
float tle5012b_read_angle_RecAVGF_f(void);

float tle5012b_read_angleAbs_f(void);
float tle5012b_read_angleAbs_AvgF_f(void);
// float tle5012b_read_angleAbs_InterF_f(uint32_t filterSelect);
float tle5012b_read_angleAbs_InterF_f();
float tle5012b_read_angleAbs_InterFPre_f(void);

#endif