SmartAudio/package/allwinner/tsc_demo/tsc_test/tsc/tsc_regs.h

374 lines
14 KiB
C
Raw Normal View History

2018-07-13 01:31:50 +00:00
#ifndef DTV_TSC_REGS_H
#define DTV_TSC_REGS_H
#include "tsc_type.h"
// 1689
#define TSC_BASE 0x01c04000
#define TSC_OFFSET 0x0
#define TSG_OFFSET 0x40
#define TSF0_OFFSET 0x80
#define TSD_OFFSET 0x180
//#define TSF1_OFFSET 0x100
//read and set register
#define SetValue(X, value) do { \
volatile void *p = (void *)(&(X)); \
(*(uint32_t *)p) = (value); \
} while(0)
#define GetValue(X, value) do { \
volatile void *p = (void *)(&(X)); \
(value) = (*(uint32_t *)p); \
} while(0)
//**************************** tsc register define ****************************/
//* tsc contrl register.
typedef struct TSC00_CTRL_REG {
volatile unsigned enable :1;
volatile unsigned reset :1;
volatile unsigned reserved :30;
} tsc00_ctrl_reg_t;
//* tsc status register.
typedef struct TSC04_STATUS_REG {
volatile unsigned reserved :32;
} tsc04_status_reg_t;
//* tsc port control register.
typedef struct TSC10_PORT_CTRL_REG {
volatile unsigned port0_input_ctrl :1; //* 0: spi, 1: ssi.
//uint32_t port1_input_ctrl :1; //* 0: spi, 1: ssi.
volatile unsigned reserved :31; //* 0: spi, 1: ssi.
} tsc10_port_ctrl_reg_t;
//* tsc port parameter register.
typedef struct TSC14_PORT_PARAM_REG {
volatile unsigned port0_psync_polarity :1; //* 0: high level active, 1: low level active;
volatile unsigned port0_dvalid_polarity :1; //* 0: high level active, 1: low level active;
volatile unsigned port0_error_polarity :1; //* 0: high level active, 1: low level active;
volatile unsigned port0_clock_polarity :1; //* 0: rise edge capture, 1: fall edge capture;
volatile unsigned port0_ssi_data_order :1; //* 0: MSB first for one byte data, 1: LSB first for one byte data;
volatile unsigned reserved :3;
volatile unsigned reserved1 :8;
volatile unsigned reserved2 :16;
} tsc14_port_param_reg_t;
//* tsc tsf input multeplex control register.
typedef struct TSC20_IN_MUX_CTRL_REG {
volatile unsigned tsf0_in_mux_ctrl :4; //* 0: from tsg, 1: from port 0, others: reserved;
volatile unsigned reserved :28;
} tsc20_in_mux_ctrl_reg_t;
//* tsc tsf output multiplex control register.
typedef struct TSC28_OUT_MUX_CTRL_REG {
volatile unsigned reserved :32;
} tsc28_out_mux_ctrl_reg_t;
//**************************** tsg register define ****************************/
//* tsg control register
typedef struct TSG00_CTRL_REG {
volatile unsigned start :1; //* write '1' to start tsg;
volatile unsigned stop :1; //* write '1' to stop tsg;
volatile unsigned pause :1; //* write '1' to pause or resume tsg;
volatile unsigned reserved0 :5; //*
volatile unsigned check_sync_byte :1; //* 0: disable, 1: enable, it will give an interrupt and go into pause state if unsync.
volatile unsigned loop_mode_enable :1; //* 0: disable, 1: tsg buffer in loop back mode.
volatile unsigned reserved1 :14; //*
volatile unsigned tsg_status :2; //* 0: idle, 1: running, 2: pause;
volatile unsigned reserved2 :6; //*
} tsg00_ctrl_reg_t;
//* tsg packet parameter register
typedef struct TSG04_PKT_PARAM_REG {
volatile unsigned pkt_size :2; //* packet size for tsg.0:188 bytes others:reserved
volatile unsigned reserved0 :5; //*
volatile unsigned sync_byte_pos :1; //* 0: the first byte is 0x47, 1: the fifth byte is 0x47.
volatile unsigned reserved1 :8; //*
volatile unsigned sync_byte_value :8; //* 0x47.
volatile unsigned reserved2 :8; //*
} tsg04_pkt_param_reg_t;
//* tsg status register
typedef struct TSG08_STATUS_REG {
volatile unsigned err_sync_byte :1; //* find error sync byte case, write '1' to clear.
volatile unsigned half_finish :1; //* half finished, write '1' to clear.
volatile unsigned full_finish :1; //* full finished, write '1' to clear.
volatile unsigned end :1; //* tsg end, write '1' to clear.
volatile unsigned reserved0 :12; //*
volatile unsigned err_sync_byte_intr_en :1; //* tsg error sync byte interrupt enable bit, 0: disable, 1: enable.
volatile unsigned half_finish_intr_en :1; //* tsg half finish interrupt enable bit, 0: disable, 1: enable.
volatile unsigned full_finish_intr_en :1; //* tsg full finish interrupt enable bit, 0: disable, 1: enable.
volatile unsigned end_intr_en :1; //* tsg end interrupt enable bit, 0: diable, 1: enable.
volatile unsigned reserved1 :12; //*
} tsg08_status_reg_t;
//* tsg clock control register
typedef struct TSG0c_CLK_CTRL_REG {
//* output frequency fo = (fi*(n+1))/(16*(d+1)), fi is the special input clock to tsc.
volatile unsigned clock_divid_factor_d :16; //* clock divid factor d.
volatile unsigned clock_divid_factor_n :16; //* clock divid factor n.
} tsg0c_clk_ctrl_reg_t;
//* tsg buffer base address register
typedef struct TSG10_BUF_ADDR_REG {
volatile unsigned addr :32; //* buffer base address, 16 bytes aligned.
} tsg10_buf_addr_reg_t;
//* tsg buffer size register
typedef struct TSG14_BUF_SIZE_REG {
volatile unsigned size :24; //* buffer size, 16 bytes aligned.
volatile unsigned reserved :8; //*
} tsg14_buf_size_reg_t;
//* tsg buffer pointer register
typedef struct TSG18_BUF_PTR_REG {
volatile unsigned cur_pos :24; //* tsg current sending position.
volatile unsigned reserved :8; //*
} tsg18_buf_ptr_reg_t;
//**************************** tsf register define ****************************/
//* tsf control register
typedef struct TSF00_CTRL_REG {
volatile unsigned reset :1; //* tsf global soft reset.
volatile unsigned mode :1; //* no use currently.
volatile unsigned enable :1; //* tsf enable control.
volatile unsigned reserve :29;
} tsf00_ctrl_reg_t;
//* tsf packet parameter register
typedef struct TSF04_PKT_PARAM_REG {
volatile unsigned pkt_size :2; //* packet size, 0:188, 1:192, 2:204;
volatile unsigned reserved0 :5; //*
volatile unsigned sync_byte_pos :1; //* 0: the first byte, 1: the fifth byte.
volatile unsigned sync_method :2; //* 0: byte psync signal, 1: by sync byte, 2: by both psync and sync byte.
volatile unsigned reserved1 :6; //*
volatile unsigned sync_byte_value :8; //* 0x47
volatile unsigned sync_pkt_threshold :4; //*
volatile unsigned lost_sync_pkt_threshold :4; //*
} tsf04_pkt_param_reg_t;
//* tsf status register
typedef struct TSF08_STATUS_REG {
volatile unsigned dma_status :1; //* it is a global status of all 32 channels
volatile unsigned overlap_status :1; //* it is a global status of all 32 channels
volatile unsigned pcr_found :1; //* a PCR packet is found, write '1' to clear
volatile unsigned fifo_overrun :1; //* tsf internal fifo overrun
volatile unsigned reserved0 :12; //*
volatile unsigned dma_intr_en :1; //* 0: disable, 1: enable
volatile unsigned overlap_intr_en :1; //* 0: disable, 1: enable
volatile unsigned pcr_intr_en :1; //* 0: disable, 1: enable
volatile unsigned fifo_overrun_intr_en :1; //* 0: disable, 1: enable
volatile unsigned reserved1 :12; //*
} tsf08_status_reg_t;
//* tsf dma interrupt enable register
typedef struct TSF10_DMA_INTR_EN_REG {
volatile unsigned en_ctrl_bits; //* dma intrrupt enable control bits, bits 0~31 for channel 0~31.
} tsf10_dma_intr_en_reg_t;
//* tsf overlap interrupt enable register
typedef struct TSF14_OVERLAP_INTR_EN_REG {
volatile unsigned en_ctrl_bits; //* overlap interrupt enable control bits, bits 0~31 for channel 0~31.
} tsf14_overlap_intr_en_reg_t;
//* tsf dma interrupt status register
typedef struct TSF18_DMA_STATUS_REG {
volatile unsigned dma_status; //* dma interrupt status, bits 0~31 for channel 0~31, write 1 to clear.
} tsf18_dma_status_reg_t;
//* tsf overlap interrupt status register
typedef struct TSF1c_OVERLAP_STATUS_REG {
volatile unsigned overlap_status; //* overlap interrupt status, bits 0~31 for channel 0~31, write 1 to clear.
} tsf1c_overlap_stauts_reg_t;
//* tsf pcr control register
typedef struct TSF20_PCR_CTRL_REG {
volatile unsigned pcr_lsb_bit :1; //* pcr contest LSB 1 bit.
volatile unsigned reserved0 :7; //*
volatile unsigned pcr_chan_idx :5; //* channel index for detecting PCR packet.
volatile unsigned reserved1 :3; //*
volatile unsigned pcr_detect_en :1; //* pcr detecting enable
volatile unsigned reserved2 :15; //*
} tsf20_pcr_ctrl_reg_t;
//* tsf pcr data register
typedef struct TSF24_PCR_DATA_REG {
volatile unsigned pcr_value; //* pcr bit 32~1
} tsf24_pcr_data_reg_t;
//* tsf channel enable register
typedef struct TSF30_CHAN_EN_REG {
volatile unsigned filter_en_ctrl_bits; //* 0: disable, 1: enable, bit 0~31 for channel 0~31.
} tsf30_chan_en_reg_t;
//* tsf channel pes enable register
typedef struct TSF34_CHAN_PES_EN_REG {
volatile unsigned pes_en_ctrl_bits; //* 0: disable, 1: enable, bit 0~31 for channel 0~31.
} tsf34_chan_pes_en_reg_t;
//* tsf channel descramble enable register
typedef struct TSF38_CHAN_DESCRAMBLE_EN_REG {
volatile unsigned descramble_en_ctrl_bits;
} tsf38_chan_descramble_en_reg_t;
//* tsf channel index register
typedef struct TSF3c_CHAN_IDX_REG {
volatile unsigned chan_idx :5; //* when you are writing pid, you have to write this reg to tell which
volatile unsigned reserved0 :27; //* channel you are setting.
} tsf3c_chan_idx_reg_t;
//* tsf channel control register
typedef struct TSF40_CHAN_CTRL_REG {
volatile unsigned reserved0;
} tsf40_chan_ctrl_reg_t;
//* tsf channel status register
typedef struct TSF44_CHAN_STATUS_REG {
volatile unsigned reserved0;
} tsf44_chan_status_reg_t;
//* tsf channel CW index register
typedef struct TSF48_CHAN_CW_IDX_REG {
volatile unsigned related_ctrl_word_idx :3; //*
volatile unsigned reserved :29; //*
} tsf48_chan_cw_idx_reg_t;
//* tsf channel pid register
typedef struct TSF4c_CHAN_PID_REG {
volatile unsigned pid :16; //* channel pid.
volatile unsigned mask :16; //* pid mask.
} tsf4c_chan_pid_reg_t;
//* tsf channel buffer base address register
typedef struct TSF50_CHAN_BUF_ADDR_REG {
volatile unsigned addr :32; //* data buffer base address for channel
} tsf50_chan_buf_addr_reg_t;
//* tsf channel buffer size register
typedef struct TSF54_CHAN_BUF_SIZE_REG {
volatile unsigned size :21; //* the exact buffer size is N+16 bytes.
volatile unsigned reserved0 :3; //* the size should be 16 bytes aligned.
volatile unsigned dma_intr_threshold :2; //* 0: 1/2, 1: 1/4, 2: 1/8, 3: 1/16.
volatile unsigned reserved1 :6; //*
} tsf54_chan_buf_size_reg_t;
//* tsf channel buffer write pointer register
typedef struct TSF58_CHAN_WRITE_POS_REG {
volatile unsigned wt_pos :21; //* data buffer write pos.
volatile unsigned reserved0 :11; //*
} tsf58_chan_wt_pos_reg_t;
//* tsf channel buffer read pointer register
typedef struct TSF5c_CHAN_READ_POS_REG {
volatile unsigned rd_pos :21; //* data buffer read pos.
volatile unsigned reserved0 :11; //*
} tsf5c_chan_rd_pos_reg_t;
//**************************** tsd register define ****************************/
//* tsdcontrol register
typedef struct TSD00_CTRL_REG {
volatile unsigned descramble_method :2; //* descramble arithmetic 0: DVD CSA V1.1 others: reserved;
volatile unsigned reserved :30;
} tsd00_ctrl_reg_t;
//* tsd status register
typedef struct TSD04_STATUS_REG {
volatile unsigned reserved :32; //*
} tsd04_status_reg_t;
//* tsd control Word Index register
typedef struct TSD1c_CW_INDEX_REG {
volatile unsigned cw_internal_idx :2; //*
volatile unsigned reserved0 :2; //*
volatile unsigned cw_idx :3; //*
volatile unsigned reserved1 :25; //*
} tsd1c_cw_index_reg_t;
//* tsd Control Word register
typedef struct TSD20_CW_REG {
volatile unsigned cw_content :32; //*
} tsd20_cw_reg_t;
//************************ ts controller register list ************************/
typedef struct TSC_TSC_REG_LIST {
volatile tsc00_ctrl_reg_t _00_ctrl;
volatile tsc04_status_reg_t _04_status;
volatile uint32_t _reserved0[2];
volatile tsc10_port_ctrl_reg_t _10_port_ctrl;
volatile tsc14_port_param_reg_t _14_port_param;
volatile uint32_t _reserved1[2];
volatile tsc20_in_mux_ctrl_reg_t _20_in_mux_ctrl;
volatile uint32_t _reserved2[1];
volatile tsc28_out_mux_ctrl_reg_t _28_out_mux_ctrl;
volatile uint32_t _reserved3[5];
} tsc_tsc_reg_list_t;
typedef struct TSC_TSG_REG_LIST {
volatile tsg00_ctrl_reg_t _00_ctrl;
volatile tsg04_pkt_param_reg_t _04_pkt_param;
volatile tsg08_status_reg_t _08_status;
volatile tsg0c_clk_ctrl_reg_t _0c_clk_ctrl;
volatile tsg10_buf_addr_reg_t _10_buf_addr;
volatile tsg14_buf_size_reg_t _14_buf_size;
volatile tsg18_buf_ptr_reg_t _18_buf_pos;
volatile uint32_t _reserved0[9];
} tsc_tsg_reg_list_t;
typedef struct TSC_TSF_REG_LIST {
volatile tsf00_ctrl_reg_t _00_ctrl;
volatile tsf04_pkt_param_reg_t _04_pkt_param;
volatile tsf08_status_reg_t _08_status;
volatile uint32_t _reserved0[1];
volatile tsf10_dma_intr_en_reg_t _10_dma_intr_en;
volatile tsf14_overlap_intr_en_reg_t _14_overlap_intr_en;
volatile tsf18_dma_status_reg_t _18_dma_status;
volatile tsf1c_overlap_stauts_reg_t _1c_overlap_status;
volatile tsf20_pcr_ctrl_reg_t _20_pcr_ctrl;
volatile tsf24_pcr_data_reg_t _24_pcr_data;
volatile uint32_t _reserved1[2];
volatile tsf30_chan_en_reg_t _30_chan_en;
volatile tsf34_chan_pes_en_reg_t _34_chan_pes_en;
volatile tsf38_chan_descramble_en_reg_t _38_chan_descramble_en;
volatile tsf3c_chan_idx_reg_t _3c_chan_idx;
volatile tsf40_chan_ctrl_reg_t _40_chan_ctrl;
volatile tsf44_chan_status_reg_t _44_chan_status;
volatile tsf48_chan_cw_idx_reg_t _48_chan_cw_idx;
volatile tsf4c_chan_pid_reg_t _4c_chan_pid;
volatile tsf50_chan_buf_addr_reg_t _50_chan_buf_addr;
volatile tsf54_chan_buf_size_reg_t _54_chan_buf_size;
volatile tsf58_chan_wt_pos_reg_t _58_chan_wt_pos;
volatile tsf5c_chan_rd_pos_reg_t _5c_chan_rd_pos;
volatile uint32_t _reserved2[8];
} tsc_tsf_reg_list_t;
typedef struct TSC_TSD_REG_LIST {
volatile tsd00_ctrl_reg_t _00_ctrl;
volatile tsd04_status_reg_t _04_status;
volatile uint32_t _reserved[5];
volatile tsd1c_cw_index_reg_t _1c_cw_idx;
volatile tsd20_cw_reg_t _20_cw;
} tsc_tsd_reg_list_t;
typedef struct TSC_REG_LIST {
//* tsc registers.
tsc_tsc_reg_list_t tsc;
//* tsg registers.
tsc_tsg_reg_list_t tsg;
//* tsf0 registers.
tsc_tsf_reg_list_t tsf;
tsc_tsf_reg_list_t reserved;//no use, just for align
//* tsd registers
tsc_tsd_reg_list_t tsd;
} tsc_reg_list_t;
#endif