#ifndef __LKS32MC09X_SIF_H__
#define __LKS32MC09X_SIF_H__

#include "lks32mc09x_reg.h"

/**
 * @brief SIF初始化结构体定义
 */
typedef struct
{
    uint8_t SIF_DONE;       ///< 传输完成后默认电平 1：高电平 0：低电平
    uint8_t SIF_SYNC;       ///< 同步信号默认电平 1：高电平 0：低电平
    uint8_t SIF_SYNC_PULSE; ///< 同步信号是否有电平反转 1：有 0：无
    uint8_t SIF_DONE_VLD;   ///< 有无结束信号 1：有 0：无
    uint8_t SIF_SYNC_VLD;   ///< 有无同步信号 1：有 0：无
    uint8_t SIF_RATIO;      ///< 数据占空比 1：3：1 0：2：1
    uint8_t SIF_MSB;        ///< 数据传送顺序 1：高字节在前 0：低字节在前
    uint8_t SIF_EN;         ///< SIF模块使能，高有效
    uint16_t SIF_TOSC;      ///< 时基设置 SIF_TOSC+1 333NS为单位 最大 4096 * 333 = 1364US
    uint16_t SIF_TSTH1;     ///< 同步时长 （SIF_TSTH1 +1） * SIF_TOSC 最大1024 * SIF_TOSC * 32
    uint8_t SIF_TDTH1;      ///< 结束信号时长 （SIF_TDTH1 + 1）MS
    uint8_t SIF_IRQ_IF;     ///< SIF中断标志位 1：有 0：无
    uint8_t SIF_DMA_EN;     ///< DMA 传输使能 高有效
    uint8_t SIF_IRQ_EN;     ///< SIF中断使能 高有效
} SIF_InitTypeDef;

/**
 * @brief SIF中断使能定义
 */
#define SIF_IE_Enable  BIT0 ///< SIF中断使能开关。默认值为0
#define SIF_DMA_Enable BIT1 ///< SIF DMA请求使能开关。默认值为0

/**
 * @brief SIF中断标志定义
 */
#define SIF_IF_CLEAR BIT4 ///< SIF传输，完成事件。高电平有效，写1清除。

/**
 * @brief 初始化SIF结构体
 * @param SIFInitStruct 指向SIF_InitTypeDef结构体的指针
 */
void SIF_StructInit(SIF_InitTypeDef *SIFInitStruct);

/**
 * @brief 初始化SIF模块
 * @param SIFx 指向SIF_TypeDef结构体的指针，表示具体的SIF实例
 * @param SIFInitStruct 指向SIF_InitTypeDef结构体的指针，包含初始化参数
 */
void SIF_Init(SIF_TypeDef *SIFx, SIF_InitTypeDef *SIFInitStruct);

/**
 * @brief 设置SIF时基
 * @param tosc 时基值
 */
void SIF_Timebase_set(SIF_TypeDef *SIFx, uint32_t tosc);

/**
 * @brief 设置SIF同步和结束信号时长
 * @param tsh 同步信号时长
 * @param tdh 结束信号时长
 */
void SIF_TH_set(SIF_TypeDef *SIFx, uint32_t tsh, uint32_t tdh);

/**
 * @brief 发送数据
 * @param Data 要发送的数据
 */
void SIF_Senddata(SIF_TypeDef *SIFx, uint8_t Data);

/**
 * @brief 设置SIF DMA使能状态
 * @param state 使能状态，1表示使能，0表示禁用
 */
void SIF_DMA_IsEnable(SIF_TypeDef *SIFx, uint8_t state);

/**
 * @brief 设置SIF中断使能状态
 * @param state 使能状态，1表示使能，0表示禁用
 */
void SIF_Irq_IsEnable(SIF_TypeDef *SIFx, uint8_t state);

/**
 * @brief 清除SIF中断标志
 */
void SIF_Clear_Irq(SIF_TypeDef *SIFx);

#endif // __LKS32MC09X_SIF_H__
