800*320工程文件+初始demo提交
This commit is contained in:
236
SW/components/drivers/peripheral/Inc/driver_spdif.h
Normal file
236
SW/components/drivers/peripheral/Inc/driver_spdif.h
Normal file
@ -0,0 +1,236 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
* @file driver_spdif.h
|
||||
* @author FreqChip Firmware Team
|
||||
* @version V1.0.0
|
||||
* @date 2023
|
||||
* @brief Header file of SPDIF module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 FreqChip.
|
||||
* All rights reserved.
|
||||
******************************************************************************
|
||||
*/
|
||||
#ifndef __DRIVER_SPDIF_H__
|
||||
#define __DRIVER_SPDIF_H__
|
||||
|
||||
#include "fr30xx.h"
|
||||
|
||||
/** @addtogroup SPDIF_Registers_Section
|
||||
* @{
|
||||
*/
|
||||
/* ################################ Register Section Start ################################ */
|
||||
|
||||
/* SPDIF CTRL REG */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t TSAMPLERATE : 8;
|
||||
uint32_t SFR_ENABLE : 1;
|
||||
uint32_t SPDIF_ENABLE : 1;
|
||||
uint32_t FIFO_ENABLE : 1;
|
||||
uint32_t CLK_ENABLE : 1;
|
||||
uint32_t TR_MODE : 1;
|
||||
uint32_t PARITY_CHECK : 1;
|
||||
uint32_t PARITYGEN : 1;
|
||||
uint32_t VALIDITY_CHECK : 1;
|
||||
uint32_t CHANNEL_MODE : 1;
|
||||
uint32_t DUPLICATE : 1;
|
||||
uint32_t SETPREAMBB : 1;
|
||||
uint32_t rsv_0 : 2;
|
||||
uint32_t PARITY_MASK : 1;
|
||||
uint32_t UNDERR_MASK : 1;
|
||||
uint32_t OVERR_MASK : 1;
|
||||
uint32_t EMPTY_MASK : 1;
|
||||
uint32_t ALEMPTY_MASK : 1;
|
||||
uint32_t FULL_MASK : 1;
|
||||
uint32_t ALFULL_MASK : 1;
|
||||
uint32_t SYNCERR_MASK : 1;
|
||||
uint32_t LOCK_MASK : 1;
|
||||
uint32_t BEGIN_MASK : 1;
|
||||
uint32_t INTREQ_MASK : 1;
|
||||
} REG_SPDIF_CTRL_t;
|
||||
|
||||
/* SPDIF INT REG */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t RSAMPLERATE : 8;
|
||||
uint32_t PREAMBLEDEL : 4;
|
||||
uint32_t rsv_0 : 9;
|
||||
uint32_t PARITYO : 1;
|
||||
uint32_t TDATA_UNDERR : 1;
|
||||
uint32_t RDATA_OVERR : 1;
|
||||
uint32_t FIFO_EMPTY : 1;
|
||||
uint32_t FIFO_ALEMPTY : 1;
|
||||
uint32_t FIFO_FULL : 1;
|
||||
uint32_t FIFO_ALFULL : 1;
|
||||
uint32_t SYNC_ERR : 1;
|
||||
uint32_t LOCK : 1;
|
||||
uint32_t BLOCK_BEGIN : 1;
|
||||
uint32_t rsv_1 : 1;
|
||||
} REG_SPDIF_INT_t;
|
||||
|
||||
/* SPDIF FIFO CTRL REG */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t ALEMPTY_THRESHOLD : 7;
|
||||
uint32_t rsv_0 : 1;
|
||||
uint32_t HALFULL_THRESHOLD : 7;
|
||||
uint32_t rsv_1 : 1;
|
||||
uint32_t PARITY_INT_TYPE : 1;
|
||||
uint32_t UNDERR_INT_TYPE : 1;
|
||||
uint32_t OVERR_INT_TYPE : 1;
|
||||
uint32_t FF_EMPTY_INT_TYPE : 1;
|
||||
uint32_t FF_ALEMPTY_INT_TYPE : 1;
|
||||
uint32_t FF_FULL_INT_TYPE : 1;
|
||||
uint32_t FF_ALFULL_INT_TYPE : 1;
|
||||
uint32_t SYNCERR_INT_TYPE : 1;
|
||||
uint32_t LOCK_INT_TYPE : 1;
|
||||
uint32_t BLOCK_BEGIN_INT_TYPE : 1;
|
||||
uint32_t rsv_2 : 6;
|
||||
} REG_SPDIF_FIFO_CTRL_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
volatile REG_SPDIF_CTRL_t SPDIF_CTRL; /* Offset 0x00 */
|
||||
volatile uint32_t SPDIF_INT_CLEAR; /* Offset 0x04 */
|
||||
volatile REG_SPDIF_FIFO_CTRL_t SPDIF_FIFO_CTRL; /* Offset 0x08 */
|
||||
volatile uint32_t SPDIF_INT_STS; /* Offset 0x0C */
|
||||
volatile uint32_t SPDIF_FIFO_DATA; /* Offset 0x10 */
|
||||
}struct_SPDIF_t;
|
||||
|
||||
#define SPDIF ((struct_SPDIF_t *)SPDIF_BASE)
|
||||
|
||||
/* ################################ Register Section END ################################## */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup SPDIF_Initialization_Config_Section
|
||||
* @{
|
||||
*/
|
||||
/* ################################ Initialization_Config Section Start ################################ */
|
||||
|
||||
/* Interrupt Status */
|
||||
typedef enum
|
||||
{
|
||||
PARITY_FLAG = 0x200000,
|
||||
UNDERR_FLAG = 0x400000,
|
||||
OVERR_FLAG = 0x800000,
|
||||
EMPTY_FLAG = 0x1000000,
|
||||
ALEMPTY_FLAG = 0x2000000,
|
||||
FULL_FLAG = 0x4000000,
|
||||
ALFULL_FLAG = 0x8000000,
|
||||
SYNCERR_FLAG = 0x10000000,
|
||||
LOCK_FLAG = 0x20000000,
|
||||
BEGIN_FLAG = 0x40000000,
|
||||
RIGHT_LEFT = 0x80000000,
|
||||
}enum_SPDIF_INT_Index_t;
|
||||
|
||||
|
||||
/* MonoStere Select */
|
||||
typedef enum
|
||||
{
|
||||
SPDIF_STEREO,
|
||||
SPDIF_MONO,
|
||||
}enum_SPDIF_MonoStere_Sel_t;
|
||||
|
||||
/*
|
||||
* @brief SPDIF Init Structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t TxSampleRate; /*!< Specifies the internal Send sample rate.
|
||||
This parameter The value can be a value 0~0x7F*/
|
||||
|
||||
uint8_t CH_Mode; /*!< Specifies the internal Channel selection.
|
||||
This parameter can be a value of @ref enum_SPDIF_MonoStere_Sel_t*/
|
||||
|
||||
uint8_t RSAMPLERATE; /*!< Specifies the internal Send receive rate.
|
||||
This parameter The value can be a value 0~0x7F*/
|
||||
|
||||
uint8_t PREAMBLEDEL; /*!< Specifies the internal Leader B delay.
|
||||
This parameter The value can be a value 0~0xF*/
|
||||
|
||||
uint8_t ALFIFOEmpty_Threshold; /*!< Specifies the internal FIFO Almost EMPTY Level.
|
||||
This parameter The value can be a value 0~0x3F*/
|
||||
|
||||
uint8_t HALFIFOFull_Threshold; /*!< Specifies the internal FIFO Half FULL Level.
|
||||
This parameter The value can be a value 0~0x3F*/
|
||||
|
||||
}struct_SPDIF_Init_t;
|
||||
|
||||
/*
|
||||
* @brief SPDIF handle Structure definition
|
||||
*/
|
||||
typedef struct __SPDIF_HandleTypeDef
|
||||
{
|
||||
struct_SPDIF_Init_t Init; /*!< SPDIF communication parameters */
|
||||
|
||||
void (*TxCallback)(struct __SPDIF_HandleTypeDef *hspdif); /*!< Callback */
|
||||
void (*RxCallback)(struct __SPDIF_HandleTypeDef *hspdif); /*!< Callback */
|
||||
|
||||
volatile bool b_TxBusy; /*!< SPDIF Receive and Send parameters in interrupt */
|
||||
volatile bool b_RxBusy;
|
||||
|
||||
volatile uint32_t *p_TxData;
|
||||
volatile uint32_t u32_TxCount;
|
||||
volatile uint32_t u32_TxSize;
|
||||
|
||||
volatile uint32_t *p_RxData;
|
||||
volatile uint32_t u32_RxCount;
|
||||
}SPDIF_HandleTypeDef;
|
||||
|
||||
/* ################################ Initialization_Config Section END ################################## */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
|
||||
/* SPDIF Enable Diable */
|
||||
#define __SPDIF_ENABLE() (SPDIF->SPDIF_CTRL.SPDIF_ENABLE = 1)
|
||||
#define __SPDIF_DISABLE() (SPDIF->SPDIF_CTRL.SPDIF_ENABLE = 0)
|
||||
|
||||
/* FIFO/TxFIFO level */
|
||||
#define __SPDIF_FIFO_LEVEL(__LEVEL__) (SPDIF->SPDIF_FIFO_STS = __LEVEL__)
|
||||
|
||||
/* FIFO HALFULL and ALEMPTY Threshold level */
|
||||
#define __SPDIF_FIFO_HALF_FULL_LEVEL(__LEVEL__) (SPDIF->SPDIF_FIFO_CTRL.HALFULL_THRESHOLD = __LEVEL__)
|
||||
#define __SPDIF_FIFO_ALMOST_EMPTY_LEVEL(__LEVEL__) (SPDIF->SPDIF_FIFO_CTRL.ALEMPTY_THRESHOLD = __LEVEL__)
|
||||
|
||||
/* Get Interrupt Status */
|
||||
#define __SPDIF_GET_INT_STATUS() (SPDIF->SPDIF_INT_STS)
|
||||
|
||||
/* FIFO Interrupt ALEMPTY ALFULL Enable and Disable */
|
||||
#define __SPDIF_ENABLE_ALEMPTY_INT() do{ SPDIF->SPDIF_CTRL.INTREQ_MASK = 1; \
|
||||
SPDIF->SPDIF_CTRL.ALEMPTY_MASK = 1;}while(0)
|
||||
#define __SPDIF_DISABLE_ALEMPTY_INT() do{ SPDIF->SPDIF_CTRL.INTREQ_MASK = 0; \
|
||||
SPDIF->SPDIF_CTRL.ALEMPTY_MASK = 0;}while(0)
|
||||
|
||||
#define __SPDIF_ENABLE_ALFULL_INT() do{ SPDIF->SPDIF_CTRL.INTREQ_MASK = 1; \
|
||||
SPDIF->SPDIF_CTRL.SYNCERR_MASK = 1; \
|
||||
SPDIF->SPDIF_CTRL.ALFULL_MASK = 1;}while(0)
|
||||
|
||||
#define __SPDIF_DISABLE_ALFULL_INT() do{ SPDIF->SPDIF_CTRL.INTREQ_MASK = 0; \
|
||||
SPDIF->SPDIF_CTRL.SYNCERR_MASK = 0; \
|
||||
SPDIF->SPDIF_CTRL.ALFULL_MASK = 0;}while(0)
|
||||
/* Get FIFO Interrupt Enable */
|
||||
#define __SPDIF_IS_INT_ALEMPTY() (SPDIF->SPDIF_CTRL.ALEMPTY_MASK)
|
||||
#define __SPDIF_IS_INT_ALFULL() (SPDIF->SPDIF_CTRL.ALFULL_MASK)
|
||||
#define __SPDIF_IS_INT_SYNCERR() (SPDIF->SPDIF_CTRL.SYNCERR_MASK)
|
||||
|
||||
/* TR MODE */
|
||||
#define __SPDIF_Tx_MODE() (SPDIF->SPDIF_CTRL.TR_MODE = 1)
|
||||
#define __SPDIF_Rx_MODE() (SPDIF->SPDIF_CTRL.TR_MODE = 0)
|
||||
|
||||
/* Exported functions -------------------------------------------------------------------------*/
|
||||
|
||||
void spdif_init(SPDIF_HandleTypeDef *hspdif);
|
||||
bool spdif_msg_send(SPDIF_HandleTypeDef *hspdif, uint32_t *fp_Data, uint32_t fu32_Size);
|
||||
bool spdif_msg_send_IT(SPDIF_HandleTypeDef *hspdif, uint32_t *fp_Data, uint32_t fu32_Size);
|
||||
bool spdif_msg_receive(SPDIF_HandleTypeDef *hspdif, uint32_t *fp_Data);
|
||||
bool spdif_msg_receive_IT(SPDIF_HandleTypeDef *hspdif, uint32_t *fp_Data);
|
||||
void SPDIF_IRQHandler(SPDIF_HandleTypeDef *hspdif);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user