| /****************************************************************************** |
| * @file register_8278.h |
| * |
| * @brief for TLSR chips |
| * |
| * @author public@telink-semi.com; |
| * @date Sep. 30, 2010 |
| * |
| * @attention |
| * |
| * Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *****************************************************************************/ |
| #pragma once |
| |
| #include "bsp.h" |
| |
| |
| /******************************************************************************************** |
| *****|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|***** |
| *****| Digital Register Table |***** |
| *****|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|***** |
| ********************************************************************************************/ |
| |
| /******************************* i2c registers: 0x00 ******************************/ |
| #define reg_i2c_set REG_ADDR32(0x00) |
| #define reg_i2c_speed REG_ADDR8(0x00) |
| #define reg_i2c_id REG_ADDR8(0x01) |
| enum{ |
| FLD_I2C_WRITE_READ_BIT = BIT(0), |
| FLD_I2C_ID = BIT_RNG(1,7), |
| }; |
| |
| #define reg_i2c_status REG_ADDR8(0x02) |
| enum{ |
| FLD_I2C_CMD_BUSY = BIT(0), |
| FLD_I2C_BUS_BUSY = BIT(1), |
| FLD_I2C_NAK = BIT(2), |
| }; |
| |
| #define reg_i2c_mode REG_ADDR8(0x03) |
| enum{ |
| FLD_I2C_ADDR_AUTO_ADD = BIT(0), |
| FLD_I2C_MASTER_EN = BIT(1), // 1: master, 0: slave |
| FLD_I2C_SLAVE_MAPPING = BIT(2), // write i2c data to predefined memory address which set by other register |
| FLD_I2C_HOLD_MASTER = BIT(3), |
| }; |
| |
| #define reg_i2c_adr_dat REG_ADDR16(0x04) |
| #define reg_i2c_dat_ctrl REG_ADDR32(0x04) |
| #define reg_i2c_di_ctrl REG_ADDR16(0x06) |
| #define reg_i2c_adr REG_ADDR8(0x04) |
| #define reg_i2c_do REG_ADDR8(0x05) |
| #define reg_i2c_di REG_ADDR8(0x06) |
| #define reg_i2c_ctrl REG_ADDR8(0x07) |
| enum{ |
| FLD_I2C_CMD_ID = BIT(0), |
| FLD_I2C_CMD_ADDR = BIT(1), |
| FLD_I2C_CMD_DO = BIT(2), |
| FLD_I2C_CMD_DI = BIT(3), |
| FLD_I2C_CMD_START = BIT(4), |
| FLD_I2C_CMD_STOP = BIT(5), |
| FLD_I2C_CMD_READ_ID = BIT(6), |
| FLD_I2C_CMD_ACK = BIT(7), |
| }; |
| /******************************* i2c address map registers: 0xe0 ******************************/ |
| #define reg_i2c_map_hadr REG_ADDR8(0xe0) |
| |
| #define reg_i2c_slave_map_addrl REG_ADDR8(0xe1) |
| #define reg_i2c_slave_map_addrm REG_ADDR8(0xe2) |
| #define reg_i2c_slave_map_addrh REG_ADDR8(0xe3) |
| |
| #define reg_i2c_slave_irq_status REG_ADDR8(0xe4) |
| #define reg_spi_slave_irq_status REG_ADDR8(0xe4) |
| #define reg_i2c_map_host_status REG_ADDR8(0xe4) |
| enum{ |
| FLD_HOST_CMD_IRQ = BIT(0), FLD_SLAVE_SPI_IRQ = FLD_HOST_CMD_IRQ, //both host write & read trigger this status |
| FLD_HOST_READ_IRQ = BIT(1), //only host read trigger this status |
| }; |
| |
| #define reg_i2c_map_read0 REG_ADDR8(0xe5) |
| #define reg_i2c_map_read1 REG_ADDR8(0xe6) |
| #define reg_i2c_map_read2 REG_ADDR8(0xe7) |
| |
| /******************************* spi registers: 0x08 ******************************/ |
| |
| #define reg_spi_data REG_ADDR8(0x08) |
| #define reg_spi_ctrl REG_ADDR8(0x09) |
| enum{ |
| FLD_SPI_CS = BIT(0), |
| FLD_SPI_MASTER_MODE_EN = BIT(1), |
| FLD_SPI_DATA_OUT_DIS = BIT(2), |
| FLD_SPI_RD = BIT(3), |
| FLD_SPI_ADDR_AUTO_ADD = BIT(4), |
| FLD_SPI_SHARE_MODE = BIT(5), |
| FLD_SPI_BUSY = BIT(6), // diff from doc, bit 6 working |
| }; |
| #define reg_spi_sp REG_ADDR8(0x0a) |
| enum{ |
| FLD_MSPI_CLK = BIT_RNG(0,6), |
| FLD_SPI_ENABLE = BIT(7), |
| }; |
| |
| #define reg_spi_inv_clk REG_ADDR8(0x0b) //spi supports four modes |
| enum { |
| FLD_SPI_MODE_WORK_MODE = BIT_RNG(0,1), |
| }; |
| |
| /******************************* mspi registers: 0x0c ******************************/ |
| |
| #define reg_mspi_data REG_ADDR8(0x0c) |
| #define reg_mspi_ctrl REG_ADDR8(0x0d) |
| |
| enum{ |
| FLD_MSPI_CS = BIT(0), |
| FLD_MSPI_SDO = BIT(1), |
| FLD_MSPI_CONT = BIT(2), |
| FLD_MSPI_RD = BIT(3), |
| FLD_MSPI_BUSY = BIT(4), |
| }; |
| |
| #define reg_mspi_mode REG_ADDR8(0x0f) |
| enum |
| { |
| FLD_MSPI_DUAL_DATA_MODE_EN = BIT(0), |
| FLD_MSPI_DUAL_ADDR_MODE_EN = BIT(1), |
| FLD_MSPI_CLK_DIV = BIT_RNG(2,7), |
| }; |
| |
| /******************************* reset registers: 0x60 ******************************/ |
| |
| #define reg_rst0 REG_ADDR8(0x60) |
| enum{ |
| FLD_RST0_SPI = BIT(0), |
| FLD_RST0_I2C = BIT(1), |
| FLD_RST0_UART = BIT(2), |
| FLD_RST0_USB = BIT(3), |
| FLD_RST0_PWM = BIT(4), |
| FLD_RST0_QDEC = BIT(5), |
| FLD_RST0_SWIRE = BIT(7), |
| }; |
| |
| #define reg_rst1 REG_ADDR8(0x61) |
| enum{ |
| FLD_RST1_ZB = BIT(0), |
| FLD_RST1_SYS_TIMER = BIT(1), |
| FLD_RST1_DMA = BIT(2), |
| FLD_RST1_ALGM = BIT(3), |
| FLD_RST1_AES = BIT(4), |
| FLD_RST1_ADC = BIT(5), |
| FLD_RST1_ALG = BIT(6), |
| }; |
| |
| #define reg_rst2 REG_ADDR8(0x62) |
| enum{ |
| FLD_RST2_AIF = BIT(0), |
| FLD_RST2_AUD = BIT(1), |
| FLD_RST2_DFIFO = BIT(2), |
| FLD_RST2_RISC = BIT(4), |
| FLD_RST2_MCIC = BIT(5), |
| FLD_RST2_RISC1 = BIT(6), |
| FLD_RST2_MCIC1 = BIT(7), |
| }; |
| |
| |
| #define reg_clk_en0 REG_ADDR8(0x63) |
| enum{ |
| FLD_CLK0_SPI_EN = BIT(0), |
| FLD_CLK0_I2C_EN = BIT(1), |
| FLD_CLK0_UART_EN = BIT(2), |
| FLD_CLK0_USB_EN = BIT(3), |
| FLD_CLK0_PWM_EN = BIT(4), |
| FLD_CLK0_QDEC_EN = BIT(5), |
| FLD_CLK0_SWIRE_EN = BIT(7), |
| }; |
| |
| #define reg_clk_en1 REG_ADDR8(0x64) |
| enum{ |
| FLD_CLK1_ZB_EN = BIT(0), |
| FLD_CLK1_SYS_TIMER_EN = BIT(1), |
| FLD_CLK1_DMA_EN = BIT(2), |
| FLD_CLK1_ALGM_EN = BIT(3), |
| FLD_CLK1_AES_EN = BIT(4), |
| |
| }; |
| |
| |
| #define reg_clk_en2 REG_ADDR8(0x65) |
| enum{ |
| FLD_CLK2_AIF_EN = BIT(0), |
| FLD_CLK2_AUD_EN = BIT(1), |
| FLD_CLK2_DFIFO_EN = BIT(2), |
| FLD_CLK2_MC_EN = BIT(4), |
| FLD_CLK2_MCIC_EN = BIT(5), |
| }; |
| |
| |
| #define reg_clk_sel REG_ADDR8(0x66) |
| enum{ |
| FLD_SCLK_DIV = BIT_RNG(0,4), |
| FLD_SCLK_SEL = BIT_RNG(5,6), |
| FLD_SCLK_HS_SEL = BIT(7), |
| }; |
| |
| #define reg_i2s_step REG_ADDR8(0x67) |
| enum{ |
| FLD_I2S_STEP = BIT_RNG(0,6), |
| FLD_I2S_CLK_EN = BIT(7), |
| }; |
| |
| #define reg_i2s_mod REG_ADDR8(0x68) |
| |
| #define reg_codec_clk_step REG_ADDR8(0x6c) |
| |
| #define reg_codec_clk_mod REG_ADDR8(0x6d) |
| |
| #define reg_wakeup_en REG_ADDR8(0x6e) |
| enum{ |
| FLD_WAKEUP_SRC_I2C = BIT(0), |
| FLD_WAKEUP_SRC_SPI = BIT(1), |
| FLD_WAKEUP_SRC_USB = BIT(2), |
| FLD_WAKEUP_SRC_GPIO = BIT(3), |
| FLD_WAKEUP_SRC_I2C_SYN = BIT(4), |
| FLD_WAKEUP_SRC_GPIO_RM = BIT(5), |
| FLD_WAKEUP_SRC_USB_RESM = BIT(6), |
| FLD_WAKEUP_SRC_RST_SYS = BIT(7), |
| }; |
| |
| #define reg_pwdn_ctrl REG_ADDR8(0x6f) |
| enum |
| { |
| FLD_PWDN_CTRL_REBOOT = BIT(5), |
| FLD_PWDN_CTRL_SLEEP = BIT(7), |
| }; |
| |
| |
| #define reg_mcu_wakeup_mask REG_ADDR32(0x78) |
| |
| /******************************* 7816 registers: 0x7b ******************************/ |
| |
| #define reg_7816_clk_div REG_ADDR8(0x7b) |
| |
| /******************************* uart registers: 0x90 ******************************/ |
| |
| #define reg_uart_data_buf0 REG_ADDR8(0x90) |
| #define reg_uart_data_buf1 REG_ADDR8(0x91) |
| #define reg_uart_data_buf2 REG_ADDR8(0x92) |
| #define reg_uart_data_buf3 REG_ADDR8(0x93) |
| |
| #define reg_uart_data_buf(i) REG_ADDR8(0x90 + (i)) //i = 0~3 |
| #define reg_uart_clk_div REG_ADDR16(0x94) |
| enum{ |
| FLD_UART_CLK_DIV = BIT_RNG(0,14), |
| FLD_UART_CLK_DIV_EN = BIT(15) |
| }; |
| |
| #define reg_uart_ctrl0 REG_ADDR8(0x96) |
| enum{ |
| FLD_UART_BPWC = BIT_RNG(0,3), |
| FLD_UART_RX_DMA_EN = BIT(4), |
| FLD_UART_TX_DMA_EN = BIT(5), |
| FLD_UART_RX_IRQ_EN = BIT(6), |
| FLD_UART_TX_IRQ_EN = BIT(7), |
| }; |
| |
| #define reg_uart_ctrl1 REG_ADDR8(0x97) |
| enum { |
| FLD_UART_CTRL1_CTS_SELECT = BIT(0), |
| FLD_UART_CTRL1_CTS_EN = BIT(1), |
| FLD_UART_CTRL1_PARITY_EN = BIT(2), |
| FLD_UART_CTRL1_PARITY_POLARITY = BIT(3), //1:odd parity 0:even parity |
| FLD_UART_CTRL1_STOP_BIT = BIT_RNG(4,5), |
| FLD_UART_CTRL1_TTL = BIT(6), |
| FLD_UART_CTRL1_LOOPBACK = BIT(7), |
| }; |
| |
| #define reg_uart_ctrl2 REG_ADDR16(0x98) |
| enum { |
| FLD_UART_CTRL2_RTS_TRIG_LVL = BIT_RNG(0,3), |
| FLD_UART_CTRL2_RTS_PARITY = BIT(4), |
| FLD_UART_CTRL2_RTS_MANUAL_VAL = BIT(5), |
| FLD_UART_CTRL2_RTS_MANUAL_EN = BIT(6), |
| FLD_UART_CTRL2_RTS_EN = BIT(7), |
| FLD_UART_CTRL3_RX_IRQ_TRIG_LEVEL = BIT_RNG(8,11), |
| FLD_UART_CTRL3_TX_IRQ_TRIG_LEVEL = BIT_RNG(12,15), |
| }; |
| |
| |
| #define reg_uart_ctrl3 REG_ADDR8(0x99) |
| enum { |
| FLD_UART_RX_IRQ_TRIG_LEV = BIT_RNG(0,3), |
| FLD_UART_TX_IRQ_TRIG_LEV = BIT_RNG(4,7), |
| }; |
| |
| #define reg_uart_rx_timeout0 REG_ADDR8(0x9a) |
| enum{ |
| FLD_UART_TIMEOUT_BW = BIT_RNG(0,7), |
| }; |
| |
| #define reg_uart_rx_timeout1 REG_ADDR8(0x9b) |
| enum{ |
| FLD_UART_TIMEOUT_MUL = BIT_RNG(0,1), |
| FLD_UART_P7816_EN = BIT(5), |
| FLD_UART_MASK_TXDONE_IRQ = BIT(6), |
| FLD_UART_MASK_ERR_IRQ = BIT(7), |
| }; |
| |
| |
| #define reg_uart_buf_cnt REG_ADDR8(0x9c) |
| |
| enum{ |
| FLD_UART_RX_BUF_CNT = BIT_RNG(0,3), |
| FLD_UART_TX_BUF_CNT = BIT_RNG(4,7), |
| }; |
| |
| #define reg_uart_status0 REG_ADDR8(0x9d) |
| enum{ |
| FLD_UART_RBCNT = BIT_RNG(0,2), |
| FLD_UART_IRQ_FLAG = BIT(3), |
| FLD_UART_WBCNT = BIT_RNG(4,6), |
| FLD_UART_CLEAR_RX_FLAG = BIT(6), |
| FLD_UART_RX_ERR_FLAG = BIT(7), |
| }; |
| |
| #define reg_uart_status1 REG_ADDR8(0x9e) |
| enum{ |
| FLD_UART_TX_DONE = BIT(0), |
| FLD_UART_TX_BUF_IRQ = BIT(1), |
| FLD_UART_RX_DONE = BIT(2), |
| FLD_UART_RX_BUF_IRQ = BIT(3), |
| }; |
| |
| |
| #define reg_uart_state REG_ADDR8(0x9f) |
| enum{ |
| FLD_UART_TSTATE_I = BIT_RNG(0,2), |
| FLD_UART_RSTATE_I = BIT_RNG(4,7), |
| }; |
| |
| |
| /******************************* swire registers: 0xb0 ******************************/ |
| |
| #define reg_swire_data REG_ADDR8(0xb0) |
| #define reg_swire_ctrl1 REG_ADDR8(0xb1) |
| enum{ |
| FLD_SWIRE_WR = BIT(0), |
| FLD_SWIRE_RD = BIT(1), |
| FLD_SWIRE_CMD = BIT(2), |
| FLD_SWIRE_USB_DET = BIT(6), |
| FLD_SWIRE_USB_EN = BIT(7), |
| }; |
| |
| #define reg_swire_clk_div REG_ADDR8(0xb2) |
| |
| enum |
| { |
| FLD_SWIRE_CLK_DIV = BIT_RNG(0,6), |
| }; |
| |
| #define reg_swire_id REG_ADDR8(0xb3) |
| |
| enum |
| { |
| FLD_SWIRE_ID_SLAVE_ID = BIT_RNG(0,6), |
| FLD_SWIRE_ID_SLAVE_FIFO_EN = BIT(7), |
| }; |
| |
| /******************************* analog control registers: 0xb8 ******************************/ |
| |
| #define reg_ana_ctrl32 REG_ADDR32(0xb8) |
| #define reg_ana_addr_data REG_ADDR16(0xb8) |
| #define reg_ana_addr REG_ADDR8(0xb8) |
| #define reg_ana_data REG_ADDR8(0xb9) |
| #define reg_ana_ctrl REG_ADDR8(0xba) |
| |
| enum{ |
| FLD_ANA_BUSY = BIT(0), |
| FLD_ANA_RSV = BIT(4), |
| FLD_ANA_RW = BIT(5), |
| FLD_ANA_START = BIT(6), |
| FLD_ANA_CYC = BIT(7), |
| }; |
| |
| |
| /******************************* usb registers: 0x100 ******************************/ |
| |
| #define reg_ctrl_ep_ptr REG_ADDR8(0x100) |
| #define reg_ctrl_ep_dat REG_ADDR8(0x101) |
| #define reg_ctrl_ep_ctrl REG_ADDR8(0x102) |
| |
| enum{ |
| FLD_EP_DAT_ACK = BIT(0), |
| FLD_EP_DAT_STALL = BIT(1), |
| FLD_EP_STA_ACK = BIT(2), |
| FLD_EP_STA_STALL = BIT(3), |
| }; |
| |
| #define reg_ctrl_ep_irq_sta REG_ADDR8(0x103) |
| enum{ |
| FLD_CTRL_EP_IRQ_TRANS = BIT_RNG(0,3), |
| FLD_CTRL_EP_IRQ_SETUP = BIT(4), |
| FLD_CTRL_EP_IRQ_DATA = BIT(5), |
| FLD_CTRL_EP_IRQ_STA = BIT(6), |
| FLD_CTRL_EP_IRQ_INTF = BIT(7), |
| }; |
| |
| #define reg_ctrl_ep_irq_mode REG_ADDR8(0x104) |
| enum{ |
| FLD_CTRL_EP_AUTO_ADDR = BIT(0), |
| FLD_CTRL_EP_AUTO_CFG = BIT(1), |
| FLD_CTRL_EP_AUTO_INTF = BIT(2), |
| FLD_CTRL_EP_AUTO_STA = BIT(3), |
| FLD_CTRL_EP_AUTO_SYN = BIT(4), |
| FLD_CTRL_EP_AUTO_DESC = BIT(5), |
| FLD_CTRL_EP_AUTO_FEAT = BIT(6), |
| FLD_CTRL_EP_AUTO_STD = BIT(7), |
| }; |
| |
| #define reg_usb_ctrl REG_ADDR8(0x105) |
| enum{ |
| FLD_USB_CTRL_AUTO_CLK = BIT(0), |
| FLD_USB_CTRL_LOW_SPD = BIT(1), |
| FLD_USB_CTRL_LOW_JITT = BIT(2), |
| FLD_USB_CTRL_TST_MODE = BIT(3), |
| }; |
| |
| #define reg_usb_cyc_cali REG_ADDR16(0x106) |
| #define reg_usb_mdev REG_ADDR8(0x10a) |
| #define reg_usb_host_conn REG_ADDR8(0x10b) |
| enum{ |
| FLD_USB_MDEV_SELF_PWR = BIT(0), |
| FLD_USB_MDEV_SUSP_STA = BIT(1), |
| }; |
| |
| #define reg_usb_sups_cyc_cali REG_ADDR8(0x10c) |
| #define reg_usb_intf_alt REG_ADDR8(0x10d) |
| #define reg_usb_ep_en REG_ADDR8(0x10e) |
| enum{ |
| FLD_USB_EDP8 = BIT(0), |
| FLD_USB_EDP1 = BIT(1), |
| FLD_USB_EDP2 = BIT(2), |
| FLD_USB_EDP3 = BIT(3), |
| FLD_USB_EDP4 = BIT(4), |
| FLD_USB_EDP5 = BIT(5), |
| FLD_USB_EDP6 = BIT(6), |
| FLD_USB_EDP7 = BIT(7), |
| }; |
| #define reg_usb_ep8123_ptr REG_ADDR32(0x110) |
| #define reg_usb_ep8_ptr REG_ADDR8(0x110) |
| #define reg_usb_ep1_ptr REG_ADDR8(0x111) |
| #define reg_usb_ep2_ptr REG_ADDR8(0x112) |
| #define reg_usb_ep3_ptr REG_ADDR8(0x113) |
| #define reg_usb_ep4567_ptr REG_ADDR32(0x114) |
| #define reg_usb_ep4_ptr REG_ADDR8(0x114) |
| #define reg_usb_ep5_ptr REG_ADDR8(0x115) |
| #define reg_usb_ep6_ptr REG_ADDR8(0x116) |
| #define reg_usb_ep7_ptr REG_ADDR8(0x117) |
| #define reg_usb_ep_ptr(i) REG_ADDR8(0x110+((i) & 0x07)) |
| |
| #define reg_usb_ep8123_dat REG_ADDR32(0x118) |
| #define reg_usb_ep8_dat REG_ADDR8(0x118) |
| #define reg_usb_ep1_dat REG_ADDR8(0x119) |
| #define reg_usb_ep2_dat REG_ADDR8(0x11a) |
| #define reg_usb_ep3_dat REG_ADDR8(0x11b) |
| #define reg_usb_ep4567_dat REG_ADDR32(0x11c) |
| #define reg_usb_ep4_dat REG_ADDR8(0x11c) |
| #define reg_usb_ep5_dat REG_ADDR8(0x11d) |
| #define reg_usb_ep6_dat REG_ADDR8(0x11e) |
| #define reg_usb_ep7_dat REG_ADDR8(0x11f) |
| #define reg_usb_ep_dat(i) REG_ADDR8(0x118+((i) & 0x07)) |
| #define reg_usb_mic_dat0 REG_ADDR16(0x1800) |
| #define reg_usb_mic_dat1 REG_ADDR16(0x1802) |
| |
| #define reg_usb_ep8_ctrl REG_ADDR8(0x120) |
| #define reg_usb_ep1_ctrl REG_ADDR8(0x121) |
| #define reg_usb_ep2_ctrl REG_ADDR8(0x122) |
| #define reg_usb_ep3_ctrl REG_ADDR8(0x123) |
| #define reg_usb_ep4_ctrl REG_ADDR8(0x124) |
| #define reg_usb_ep5_ctrl REG_ADDR8(0x125) |
| #define reg_usb_ep6_ctrl REG_ADDR8(0x126) |
| #define reg_usb_ep7_ctrl REG_ADDR8(0x127) |
| #define reg_usb_ep_ctrl(i) REG_ADDR8(0x120+((i) & 0x07)) |
| |
| enum{ |
| FLD_USB_EP_BUSY = BIT(0), |
| FLD_USB_EP_STALL = BIT(1), |
| FLD_USB_EP_DAT0 = BIT(2), |
| FLD_USB_EP_DAT1 = BIT(3), |
| FLD_USB_EP_MONO = BIT(6), |
| FLD_USB_EP_EOF_ISO = BIT(7), |
| }; |
| |
| #define reg_usb_ep8123_buf_addr REG_ADDR32(0x128) |
| #define reg_usb_ep8_buf_addr REG_ADDR8(0x128) |
| #define reg_usb_ep1_buf_addr REG_ADDR8(0x129) |
| #define reg_usb_ep2_buf_addr REG_ADDR8(0x12a) |
| #define reg_usb_ep3_buf_addr REG_ADDR8(0x12b) |
| #define reg_usb_ep4567_buf_addr REG_ADDR32(0x12c) |
| #define reg_usb_ep4_buf_addr REG_ADDR8(0x12c) |
| #define reg_usb_ep5_buf_addr REG_ADDR8(0x12d) |
| #define reg_usb_ep6_buf_addr REG_ADDR8(0x12e) |
| #define reg_usb_ep7_buf_addr REG_ADDR8(0x12f) |
| #define reg_usb_ep_buf_addr(i) REG_ADDR8(0x128+((i) & 0x07)) |
| |
| #define reg_usb_ram_ctrl REG_ADDR8(0x130) |
| enum{ |
| FLD_USB_CEN_PWR_DN = BIT(0), |
| FLD_USB_CLK_PWR_DN = BIT(1), |
| FLD_USB_WEN_PWR_DN = BIT(3), |
| FLD_USB_CEN_FUNC = BIT(4), |
| }; |
| |
| #define reg_usb_iso_mode REG_ADDR8(0x138) |
| #define reg_usb_irq REG_ADDR8(0x139) |
| #define reg_usb_mask REG_ADDR8(0x13a) |
| enum{ |
| FLD_USB_EDP8_IRQ = BIT(0), |
| FLD_USB_EDP1_IRQ = BIT(1), |
| FLD_USB_EDP2_IRQ = BIT(2), |
| FLD_USB_EDP3_IRQ = BIT(3), |
| FLD_USB_EDP4_IRQ = BIT(4), |
| FLD_USB_EDP5_IRQ = BIT(5), |
| FLD_USB_EDP6_IRQ = BIT(6), |
| FLD_USB_EDP7_IRQ = BIT(7), |
| }; |
| #define reg_usb_ep8_send_max REG_ADDR8(0x13b) |
| #define reg_usb_ep8_send_thre REG_ADDR8(0x13c) |
| #define reg_usb_ep8_fifo_mode REG_ADDR8(0x13d) |
| #define reg_usb_ep_max_size REG_ADDR8(0x13e) |
| |
| enum{ |
| FLD_USB_ENP8_FIFO_MODE = BIT(0), |
| FLD_USB_ENP8_FULL_FLAG = BIT(1), |
| }; |
| |
| #define reg_rf_acc_len REG_ADDR8(0x405) |
| enum{ |
| FLD_RF_ACC_LEN = BIT_RNG(0,2), |
| FLD_RF_LR_MAN_EN = BIT(3), //long range manual enable |
| FLD_RF_LR_TX_SEL = BIT(4), |
| FLD_RF_BLE_LR = BIT(5), |
| FLD_RF_LR_ACC_TRIG = BIT(7), |
| }; |
| |
| |
| #define reg_rf_timestamp REG_ADDR32(0x450) |
| |
| |
| /******************************* aes registers: 0x540 ******************************/ |
| |
| #define reg_aes_ctrl REG_ADDR8(0x540) |
| |
| enum { |
| FLD_AES_CTRL_CODEC_TRIG = BIT(0), |
| FLD_AES_CTRL_DATA_FEED = BIT(1), |
| FLD_AES_CTRL_CODEC_FINISHED = BIT(2), |
| }; |
| |
| #define reg_aes_data REG_ADDR32(0x548) |
| #define reg_aes_key(v) REG_ADDR8(0x550+v) |
| |
| |
| /******************************* audio registers: 0x560 ******************************/ |
| |
| #define reg_audio_ctrl REG_ADDR8(0x560) |
| enum{ |
| AUDIO_OUTPUT_OFF = 0, |
| FLD_AUDIO_MONO_MODE = BIT(0), |
| FLD_AUDIO_I2S_PLAYER_EN = BIT(1), |
| FLD_AUDIO_SDM_PLAYER_EN = BIT(2), |
| FLD_AUDIO_ISO_PLAYER_EN = BIT(3), |
| FLD_AUDIO_I2S_RECORDER_EN = BIT(4), |
| FLD_AUDIO_I2S_INTERFACE_EN = BIT(5), |
| FLD_AUDIO_GRP_EN = BIT(6), |
| FLD_AUDIO_HPF_EN = BIT(7), |
| }; |
| |
| #define reg_pwm_ctrl REG_ADDR8(0x563) |
| enum{ |
| FLD_PWM_MULTIPLY2 = BIT(0), |
| FLD_PWM_ENABLE = BIT(1), |
| FLD_LINER_INTERPOLATE_EN = BIT(2), |
| FLD_LEFT_SHAPING_EN = BIT(5), |
| FLD_RIGTH_SHAPING_EN = BIT(6) |
| }; |
| |
| #define reg_ascl_tune REG_ADDR32(0x564) |
| |
| #define reg_pn1_left REG_ADDR8(0x568) |
| enum{ |
| PN1_LEFT_CHN_BITS = BIT_RNG(0,4), |
| PN2_LEFT_CHN_EN = BIT(5), |
| PN1_LEFT_CHN_EN = BIT(6), |
| }; |
| |
| #define reg_pn2_left REG_ADDR8(0x569) |
| enum{ |
| PN2_LEFT_CHN_BITS = BIT_RNG(0,4), |
| PN2_RIGHT_CHN_EN = BIT(5), |
| PN1_RIGHT_CHN_EN = BIT(6), |
| }; |
| |
| #define reg_pn1_right REG_ADDR8(0x56a) |
| enum{ |
| PN1_RIGHT_CHN_BITS = BIT_RNG(0,4), |
| CLK2A_AUDIO_CLK_EN = BIT(5), |
| EXCHANGE_SDM_DATA_EN = BIT(6), |
| }; |
| |
| #define reg_pn2_right REG_ADDR8(0x56b) |
| enum{ |
| PN2_RIGHT_CHN_BITS = BIT_RNG(0,4), |
| SDM_LEFT_CHN_CONST_EN = BIT(5), |
| SDM_RIGHT_CHN_CONST_EN = BIT(6), |
| }; |
| |
| /******************************* gpio registers: 0x580 ******************************/ |
| |
| #define reg_gpio_pa_in REG_ADDR8(0x580) |
| #define reg_gpio_pa_ie REG_ADDR8(0x581) |
| #define reg_gpio_pa_oen REG_ADDR8(0x582) |
| #define reg_gpio_pa_out REG_ADDR8(0x583) |
| #define reg_gpio_pa_pol REG_ADDR8(0x584) |
| #define reg_gpio_pa_ds REG_ADDR8(0x585) |
| #define reg_gpio_pa_gpio REG_ADDR8(0x586) |
| #define reg_gpio_pa_irq_en REG_ADDR8(0x587) |
| |
| #define reg_gpio_pb_in REG_ADDR8(0x588) |
| #define reg_gpio_pb_ie REG_ADDR8(0x589) |
| #define reg_gpio_pb_oen REG_ADDR8(0x58a) |
| #define reg_gpio_pb_out REG_ADDR8(0x58b) |
| #define reg_gpio_pb_pol REG_ADDR8(0x58c) |
| #define reg_gpio_pb_ds REG_ADDR8(0x58d) |
| #define reg_gpio_pb_gpio REG_ADDR8(0x58e) |
| #define reg_gpio_pb_irq_en REG_ADDR8(0x58f) |
| |
| #define reg_gpio_pc_in REG_ADDR8(0x590) |
| #define areg_gpio_pc_ie 0xc0 |
| #define reg_gpio_pc_oen REG_ADDR8(0x592) |
| #define reg_gpio_pc_out REG_ADDR8(0x593) |
| #define reg_gpio_pc_pol REG_ADDR8(0x594) |
| #define areg_gpio_pc_ds 0xc2 |
| #define reg_gpio_pc_gpio REG_ADDR8(0x596) |
| #define reg_gpio_pc_irq_en REG_ADDR8(0x597) |
| |
| #define reg_gpio_pd_in REG_ADDR8(0x598) |
| #define reg_gpio_pd_ie REG_ADDR8(0x599) |
| #define reg_gpio_pd_oen REG_ADDR8(0x59a) |
| #define reg_gpio_pd_out REG_ADDR8(0x59b) |
| #define reg_gpio_pd_pol REG_ADDR8(0x59c) |
| #define reg_gpio_pd_ds REG_ADDR8(0x59d) |
| #define reg_gpio_pd_gpio REG_ADDR8(0x59e) |
| #define reg_gpio_pd_irq_en REG_ADDR8(0x59f) |
| |
| #define reg_gpio_pe_in REG_ADDR8(0x5a0) |
| #define reg_gpio_pe_ie REG_ADDR8(0x5a1) |
| #define reg_gpio_pe_oen REG_ADDR8(0x5a2) |
| #define reg_gpio_pe_out REG_ADDR8(0x5a3) |
| #define reg_gpio_pe_pol REG_ADDR8(0x5a4) |
| #define reg_gpio_pe_ds REG_ADDR8(0x5a5) |
| #define reg_gpio_pe_gpio REG_ADDR8(0x5a6) |
| #define reg_gpio_pe_irq_en REG_ADDR8(0x5a7) |
| |
| #define reg_gpio_pa_setting1 REG_ADDR32(0x580) |
| #define reg_gpio_pa_setting2 REG_ADDR32(0x584) |
| #define reg_gpio_pb_setting1 REG_ADDR32(0x588) |
| #define reg_gpio_pb_setting2 REG_ADDR32(0x58c) |
| #define reg_gpio_pd_setting1 REG_ADDR32(0x598) |
| #define reg_gpio_pd_setting2 REG_ADDR32(0x59c) |
| |
| #define reg_gpio_in(i) REG_ADDR8(0x580+((i>>8)<<3)) |
| #define reg_gpio_ie(i) REG_ADDR8(0x581+((i>>8)<<3)) |
| #define reg_gpio_oen(i) REG_ADDR8(0x582+((i>>8)<<3)) |
| #define reg_gpio_out(i) REG_ADDR8(0x583+((i>>8)<<3)) |
| #define reg_gpio_pol(i) REG_ADDR8(0x584+((i>>8)<<3)) |
| #define reg_gpio_ds(i) REG_ADDR8(0x585+((i>>8)<<3)) |
| |
| |
| #define reg_gpio_func(i) REG_ADDR8(0x586+((i>>8)<<3)) |
| |
| #define reg_gpio_irq_wakeup_en(i) REG_ADDR8(0x587+((i>>8)<<3)) // reg_irq_mask: FLD_IRQ_GPIO_EN |
| |
| #define reg_gpio_irq_risc0_en(i) REG_ADDR8(0x5b8 + (i >> 8)) // reg_irq_mask: FLD_IRQ_GPIO_RISC0_EN |
| #define reg_gpio_irq_risc1_en(i) REG_ADDR8(0x5c0 + (i >> 8)) // reg_irq_mask: FLD_IRQ_GPIO_RISC1_EN |
| #define reg_gpio_irq_risc2_en(i) REG_ADDR8(0x5c8 + (i >> 8)) |
| |
| #define reg_mux_func_a1 REG_ADDR8(0x5a8) |
| #define reg_mux_func_a2 REG_ADDR8(0x5a9) |
| #define reg_mux_func_b1 REG_ADDR8(0x5aa) |
| #define reg_mux_func_b2 REG_ADDR8(0x5ab) |
| #define reg_mux_func_c1 REG_ADDR8(0x5ac) |
| #define reg_mux_func_c2 REG_ADDR8(0x5ad) |
| #define reg_mux_func_d1 REG_ADDR8(0x5ae) |
| #define reg_mux_func_d2 REG_ADDR8(0x5af) |
| |
| #define reg_gpio_wakeup_irq REG_ADDR8(0x5b5) |
| enum{ |
| FLD_GPIO_CORE_WAKEUP_EN = BIT(2), |
| FLD_GPIO_CORE_INTERRUPT_EN = BIT(3), |
| }; |
| |
| #define reg_pin_i2c_spi_out_en REG_ADDR8(0x5b6) |
| enum{ |
| FLD_PIN_PAGROUP_SPI_EN = BIT_RNG(4,5), |
| FLD_PIN_PBGROUP_SPI_EN = BIT(6), |
| FLD_PIN_PDGROUP_SPI_EN = BIT(7), |
| }; |
| |
| |
| #define reg_pin_i2c_spi_en REG_ADDR8(0x5b7) //poweron default 0xff |
| enum{ |
| FLD_PIN_PA3_SPI_EN = BIT(0), |
| FLD_PIN_PA4_SPI_EN = BIT(1), |
| FLD_PIN_PB6_SPI_EN = BIT(2), |
| FLD_PIN_PD7_SPI_EN = BIT(3), |
| FLD_PIN_PA3_I2C_EN = BIT(4), |
| FLD_PIN_PA4_I2C_EN = BIT(5), |
| FLD_PIN_PB6_I2C_EN = BIT(6), |
| FLD_PIN_PD7_I2C_EN = BIT(7), |
| }; |
| |
| |
| /******************************* timer registers: 0x620 ******************************/ |
| #define WATCHDOG_TIMEOUT_COEFF 18 // check register definition, 0x622 |
| #define reg_tmr_ctrl REG_ADDR32(0x620) |
| #define reg_tmr_ctrl16 REG_ADDR16(0x620) |
| #define reg_tmr_ctrl8 REG_ADDR8(0x620) |
| enum{ |
| FLD_TMR0_EN = BIT(0), |
| FLD_TMR0_MODE = BIT_RNG(1,2), |
| FLD_TMR1_EN = BIT(3), |
| FLD_TMR1_MODE = BIT_RNG(4,5), |
| FLD_TMR2_EN = BIT(6), |
| FLD_TMR2_MODE = BIT_RNG(7,8), |
| FLD_TMR_WD_CAPT = BIT_RNG(9,22), |
| FLD_TMR_WD_EN = BIT(23), |
| FLD_TMR0_STA = BIT(24), |
| FLD_TMR1_STA = BIT(25), |
| FLD_TMR2_STA = BIT(26), |
| FLD_CLR_WD = BIT(27), |
| }; |
| |
| #define reg_tmr_sta REG_ADDR8(0x623) |
| enum{ |
| FLD_TMR_STA_TMR0 = BIT(0), |
| FLD_TMR_STA_TMR1 = BIT(1), |
| FLD_TMR_STA_TMR2 = BIT(2), |
| FLD_TMR_STA_WD = BIT(3), |
| }; |
| |
| #define reg_tmr0_capt REG_ADDR32(0x624) |
| #define reg_tmr1_capt REG_ADDR32(0x628) |
| #define reg_tmr2_capt REG_ADDR32(0x62c) |
| #define reg_tmr_capt(i) REG_ADDR32(0x624 + ((i) << 2)) |
| #define reg_tmr0_tick REG_ADDR32(0x630) |
| #define reg_tmr1_tick REG_ADDR32(0x634) |
| #define reg_tmr2_tick REG_ADDR32(0x638) |
| #define reg_tmr_tick(i) REG_ADDR32(0x630 + ((i) << 2)) |
| |
| /******************************* irq registers: 0x640 ******************************/ |
| |
| #define reg_irq_mask REG_ADDR32(0x640) |
| #define reg_irq_pri REG_ADDR32(0x644) |
| #define reg_irq_src REG_ADDR32(0x648) |
| #define reg_irq_src3 REG_ADDR8(0x64a) |
| enum{ |
| FLD_IRQ_TMR0_EN = BIT(0), |
| FLD_IRQ_TMR1_EN = BIT(1), |
| FLD_IRQ_TMR2_EN = BIT(2), |
| FLD_IRQ_USB_PWDN_EN = BIT(3), |
| FLD_IRQ_DMA_EN = BIT(4), |
| FLD_IRQ_DAM_FIFO_EN = BIT(5), |
| FLD_IRQ_UART_EN = BIT(6), |
| FLD_IRQ_MIX_CMD_EN = BIT(7), FLD_IRQ_HOST_CMD_EN = BIT(7),//< MIX = I2C/QDEC/SPI |
| |
| FLD_IRQ_EP0_SETUP_EN = BIT(8), |
| FLD_IRQ_EP0_DAT_EN = BIT(9), |
| FLD_IRQ_EP0_STA_EN = BIT(10), |
| FLD_IRQ_SET_INTF_EN = BIT(11), |
| FLD_IRQ_EP_DATA_EN = BIT(12), FLD_IRQ_IRQ4_EN = BIT(12), |
| FLD_IRQ_ZB_RT_EN = BIT(13), |
| FLD_IRQ_SW_PWM_EN = BIT(14), //irq_software | irq_pwm |
| FLD_IRQ_PKE_EN = BIT(15),// RSVD = BIT(15), |
| |
| FLD_IRQ_USB_250US_EN = BIT(16), |
| FLD_IRQ_USB_RST_EN = BIT(17), |
| FLD_IRQ_GPIO_EN = BIT(18), |
| FLD_IRQ_PM_EN = BIT(19), |
| FLD_IRQ_SYSTEM_TIMER = BIT(20), |
| FLD_IRQ_GPIO_RISC0_EN = BIT(21), |
| FLD_IRQ_GPIO_RISC1_EN = BIT(22), |
| // RSVD = BIT(23), |
| |
| FLD_IRQ_EN = BIT_RNG(24,31), |
| FLD_IRQ_ALL = 0XFFFFFFFF, |
| }; |
| #define reg_irq_en REG_ADDR8(0x643) |
| |
| |
| |
| |
| /******************************* system timer registers: 0x740 ******************************/ |
| |
| #define reg_system_tick REG_ADDR32(0x740) |
| #define reg_system_tick_irq REG_ADDR32(0x744)//reg_system_tick_irq_level |
| #define reg_system_irq_mask REG_ADDR8(0x748) |
| #define reg_system_cal_irq REG_ADDR8(0x749) |
| #define reg_system_ctrl REG_ADDR8(0x74a) |
| enum{ |
| FLD_SYSTEM_32K_CAL_MODE = BIT_RNG(4,7), |
| FLD_SYSTEM_32K_CAL_EN = BIT(3), |
| FLD_SYSTEM_TIMER_AUTO_EN = BIT(2), |
| FLD_SYSTEM_TIMER_MANUAL_EN = BIT(1), |
| FLD_SYSTEM_32K_WR_EN = BIT(0), |
| }; |
| |
| #define reg_system_status REG_ADDR8(0x74b) |
| enum{ |
| FLD_SYSTEM_32K_TIMER_BUSY = BIT(6), |
| FLD_SYSTEM_32K_TIMER_UPDATE_RD = BIT(5), FLD_SYSTEM_32K_TIMER_CLEAR_RD = BIT(5), |
| FLD_SYSTEM_STATE_MACHINE_STATUS = BIT_RNG(3,4), FLD_SYSTEM_32K_TIMER_SYCN_TRIG = BIT(3), |
| FLD_SYSTEM_CMD_SET_TRIG = BIT(2), |
| FLD_SYSTEM_CMD_SYCN_TRIG = BIT(1), |
| FLD_SYSTEM_TIMER_STATUS = BIT(0), |
| }; |
| |
| #define reg_system_32k_tick_wt REG_ADDR32(0x74c) |
| #define reg_system_32k_tick_rd REG_ADDR32(0x750) |
| #define reg_system_32k_tick_cal REG_ADDR32(0x754) |
| |
| /******************************* pwm registers: 0x780 ******************************/ |
| |
| #define reg_pwm_enable REG_ADDR8(0x780) |
| #define reg_pwm0_enable REG_ADDR8(0x781) |
| #define reg_pwm_clk REG_ADDR8(0x782) |
| |
| #define reg_pwm0_mode REG_ADDR8(0x783) |
| |
| |
| #define reg_pwm_invert REG_ADDR8(0x784) |
| #define reg_pwm_n_invert REG_ADDR8(0x785) |
| #define reg_pwm_pol REG_ADDR8(0x786) |
| |
| #define reg_pwm_cycle(i) REG_ADDR32(0x794 + (i << 2)) //<15:0>: TCMP 0~5 <31:16>: TMAX 0~5 |
| #define reg_pwm_cmp(i) REG_ADDR16(0x794 + (i << 2)) //TCMP 0~5 |
| #define reg_pwm_max(i) REG_ADDR16(0x796 + (i << 2)) //TMAX 0~5 |
| enum{ |
| FLD_PWM_CMP = BIT_RNG(0,15), |
| FLD_PWM_MAX = BIT_RNG(16,31), |
| }; |
| |
| #define reg_pwm0_pulse_num REG_ADDR16(0x7ac) |
| |
| #define reg_pwm_irq_mask REG_ADDR8(0x7b0) |
| #define reg_pwm_irq_sta REG_ADDR8(0x7b1) |
| enum{ |
| FLD_IRQ_PWM0_PNUM = BIT(0), |
| FLD_IRQ_PWM0_IR_DMA_FIFO_DONE = BIT(1), |
| FLD_IRQ_PWM0_FRAME = BIT(2), |
| FLD_IRQ_PWM1_FRAME = BIT(3), |
| FLD_IRQ_PWM2_FRAME = BIT(4), |
| FLD_IRQ_PWM3_FRAME = BIT(5), |
| FLD_IRQ_PWM4_FRAME = BIT(6), |
| FLD_IRQ_PWM5_FRAME = BIT(7), |
| }; |
| |
| |
| |
| #define reg_pwm0_fifo_mode_irq_mask REG_ADDR8(0x7b2) |
| |
| enum{ |
| FLD_PWM0_IRQ_IR_FIFO_EN = BIT(0), |
| }; |
| |
| #define reg_pwm0_fifo_mode_irq_sta REG_ADDR8(0x7b3) |
| |
| enum{ |
| FLD_PWM0_IRQ_IR_FIFO_CNT = BIT(0), |
| }; |
| |
| |
| |
| #define reg_pwm_tcmp0_shadow REG_ADDR16(0x7c4) //<15:0>: TCMP 0~5 <31:16>: TMAX 0~5 |
| #define reg_pwm_tmax0_shadow REG_ADDR16(0x7c6) //TCMP 0~5 |
| |
| #define reg_pwm_ir_fifo_dat(i) REG_ADDR16(0x7c8+i*2) |
| #define reg_pwm_ir_fifo_irq_trig_level REG_ADDR8(0x7cc) |
| |
| #define reg_pwm_ir_fifo_data_status REG_ADDR8(0x7cd) |
| enum{ |
| FLD_PWM0_IR_FIFO_DATA_NUM = BIT_RNG(0,3), |
| FLD_PWM0_IR_FIFO_EMPTY = BIT(4), |
| FLD_PWM0_IR_FIFO_FULL = BIT(5), |
| }; |
| |
| #define reg_pwm_ir_clr_fifo_data REG_ADDR8(0x7ce) |
| |
| enum{ |
| FLD_PWM0_IR_FIFO_CLR_DATA = BIT(0), |
| }; |
| |
| /******************************* fifo registers: 0x800 ******************************/ |
| |
| #define reg_fifo0_data REG_ADDR32(0x800) |
| #define reg_fifo1_data REG_ADDR32(0x900) |
| #define reg_fifo2_data REG_ADDR32(0xa00) |
| |
| /******************************* dfifo registers: 0xb00 ******************************/ |
| |
| #define reg_dfifo0_addr REG_ADDR16(0xb00) |
| #define reg_dfifo0_size REG_ADDR8(0xb02) |
| #define reg_dfifo0_addHi REG_ADDR8(0xb03) //default 0x04, no need set |
| |
| #define reg_dfifo1_addr REG_ADDR16(0xb04) |
| #define reg_dfifo1_size REG_ADDR8(0xb06) |
| #define reg_dfifo1_addHi REG_ADDR8(0xb07) //default 0x04, no need set |
| |
| //misc channel only use dfifo2 |
| #define reg_dfifo2_addr REG_ADDR16(0xb08) |
| #define reg_dfifo2_size REG_ADDR8(0xb0a) |
| #define reg_dfifo2_addHi REG_ADDR8(0xb0b) //default 0x04, no need set |
| |
| #define reg_dfifo_audio_addr reg_dfifo0_addr |
| #define reg_dfifo_audio_size reg_dfifo0_size |
| |
| #define reg_dfifo_misc_chn_addr reg_dfifo2_addr |
| #define reg_dfifo_misc_chn_size reg_dfifo2_size |
| |
| |
| #define reg_dfifo0_l_level REG_ADDR8(0xb0c) //dfifo0 low int threshold(wptr - rptr) |
| #define reg_dfifo0_h_level REG_ADDR8(0xb0d) //dfifo0 high int threshold(wptr - rptr) |
| #define reg_dfifo1_h_level REG_ADDR8(0xb0e) //dfifo1 high int threshold(wptr - rptr) |
| #define reg_dfifo2_h_level REG_ADDR8(0xb0f) //dfifo2 high int threshold(wptr - rptr) |
| |
| |
| #define reg_dfifo_mode REG_ADDR8(0xb10) |
| enum{ |
| FLD_AUD_DFIFO0_IN = BIT(0), |
| FLD_AUD_DFIFO1_IN = BIT(1), |
| FLD_AUD_DFIFO2_IN = BIT(2), |
| FLD_AUD_DFIFO0_OUT = BIT(3), |
| FLD_AUD_DFIFO0_L_INT = BIT(4), |
| FLD_AUD_DFIFO0_H_INT = BIT(5), |
| FLD_AUD_DFIFO1_H_INT = BIT(6), |
| FLD_AUD_DFIFO2_H_INT = BIT(7), |
| }; |
| |
| #define reg_dfifo_ain REG_ADDR8(0xb11) |
| enum{ |
| FLD_AUD_SAMPLE_TIME_CONFIG = BIT_RNG(0,1), |
| FLD_AUD_FIFO0_INPUT_SELECT = BIT_RNG(2,3), |
| FLD_AUD_FIFO1_INPUT_SELECT = BIT_RNG(4,5), |
| FLD_AUD_MIC_LEFT_CHN_SELECT = BIT(6), |
| FLD_AUD_MIC_RIGHT_CHN_SELECT = BIT(7), |
| }; |
| |
| enum{ //core_b11<3:2> audio input select |
| AUDIO_FIFO0_INPUT_SELECT_USB = 0x00, |
| AUDIO_FIFO0_INPUT_SELECT_I2S = 0x01, |
| AUDIO_FIFO0_INPUT_SELECT_16BIT = 0x02, |
| AUDIO_FIFO0_INPUT_SELECT_20BIT = 0x03, |
| }; |
| |
| enum{ //core_b11<5:4> audio input select |
| AUDIO_FIFO1_INPUT_SELECT_USB = 0x00, |
| AUDIO_FIFO1_INPUT_SELECT_I2S = 0x01, |
| AUDIO_FIFO1_INPUT_SELECT_16BIT = 0x02, |
| AUDIO_FIFO1_INPUT_SELECT_20BIT = 0x03, |
| }; |
| |
| |
| #define reg_mic_ctrl REG_ADDR8(0xb12) |
| enum{ |
| FLD_AUD_MIC_VOL_CONTROL = BIT_RNG(0,5), |
| FLD_AUD_MIC_MONO_EN = BIT(6), |
| FLD_AUD_AMIC_DMIC_SELECT = BIT(7), |
| }; |
| |
| enum{ |
| MIC_VOL_CONTROL_m48DB = 0x00, |
| MIC_VOL_CONTROL_m42DB = 0x04, |
| MIC_VOL_CONTROL_m36DB = 0x08, |
| MIC_VOL_CONTROL_m30DB = 0x0c, |
| MIC_VOL_CONTROL_m24DB = 0x10, |
| MIC_VOL_CONTROL_m18DB = 0x14, |
| MIC_VOL_CONTROL_m16DB = 0x15, |
| MIC_VOL_CONTROL_m12DB = 0x18, |
| MIC_VOL_CONTROL_m6DB = 0x1c, |
| MIC_VOL_CONTROL_0DB = 0x20, |
| MIC_VOL_CONTROL_6DB = 0x24, |
| MIC_VOL_CONTROL_12DB = 0x28, |
| MIC_VOL_CONTROL_18DB = 0x2c, |
| MIC_VOL_CONTROL_24DB = 0x30, |
| MIC_VOL_CONTROL_30DB = 0x34, |
| MIC_VOL_CONTROL_36DB = 0x38, |
| MIC_VOL_CONTROL_42DB = 0x3c, |
| }; |
| |
| |
| #define reg_set_filter_para REG_ADDR8(0xb80) |
| |
| #define reg_dfifo_dec_ratio REG_ADDR8(0xb8a) |
| |
| #define reg_codec_dec_en REG_ADDR8(0xb8b) |
| enum{ |
| FLD_AUD_CODEC_DEC_EN = BIT(0), |
| }; |
| |
| #define reg_dfifo_irq_status REG_ADDR8(0xb13) |
| enum{ |
| FLD_AUD_DFIFO0_L_IRQ = BIT(4), |
| FLD_AUD_DFIFO0_H_IRQ = BIT(5), |
| FLD_AUD_DFIFO1_L_IRQ = BIT(6), |
| FLD_AUD_DFIFO1_H_IRQ = BIT(7), |
| }; |
| #define reg_dfifo0_rptr REG_ADDR16(0xb14) |
| #define reg_dfifo0_wptr REG_ADDR16(0xb16) |
| |
| #define reg_dfifo1_rptr REG_ADDR16(0xb18) |
| #define reg_dfifo1_wptr REG_ADDR16(0xb1a) |
| |
| #define reg_dfifo2_rptr REG_ADDR16(0xb1c) |
| #define reg_dfifo2_wptr REG_ADDR16(0xb1e) |
| |
| |
| #define reg_audio_wptr reg_dfifo0_wptr |
| |
| #define reg_dfifo0_num REG_ADDR16(0xb20) |
| #define reg_dfifo1_num REG_ADDR16(0xb24) |
| #define reg_dfifo2_num REG_ADDR16(0xb28) |
| |
| #define reg_dfifo_manual_mode REG_ADDR8(0xb2c) |
| enum{ |
| FLD_DFIFO_MANUAL_MODE_EN = BIT(0), |
| }; |
| |
| #define reg_dfifo0_man_dat REG_ADDR32(0xb30) |
| |
| |
| /******************************* dma registers: 0xc00 ******************************/ |
| |
| //uart rx |
| #define reg_dma0_addr REG_ADDR16(0xc00) |
| #define reg_dma0_size REG_ADDR8(0xc02) |
| #define reg_dma0_mode REG_ADDR8(0xc03) |
| enum{ |
| FLD_DMA_WR_MEM = BIT(0), |
| FLD_DMA_PINGPONG_EN = BIT(1), |
| FLD_DMA_FIFO_EN = BIT(2), |
| FLD_DMA_AUTO_MODE = BIT(3), |
| FLD_DMA_READ_MODE = BIT(4), |
| FLD_DMA_BYTE_MODE = BIT(5) |
| }; |
| |
| |
| //uart tx |
| #define reg_dma1_addr REG_ADDR16(0xc04) |
| #define reg_dma1_size REG_ADDR8(0xc06) |
| #define reg_dma1_mode REG_ADDR8(0xc07) |
| |
| //rf rx dma |
| #define reg_dma2_addr REG_ADDR16(0xc08) |
| #define reg_dma2_size REG_ADDR8(0xc0a) |
| #define reg_dma2_mode REG_ADDR8(0xc0b) |
| |
| //rf tx dma |
| #define reg_dma3_addr REG_ADDR16(0xc0c) |
| #define reg_dma3_size REG_ADDR8(0xc0e) |
| #define reg_dma3_mode REG_ADDR8(0xc0f) |
| |
| #define reg_dma4_addr REG_ADDR16(0xc10) |
| #define reg_dma4_size REG_ADDR8(0xc12) |
| #define reg_dma4_mode REG_ADDR8(0xc13) |
| |
| #define reg_dma5_addr REG_ADDR16(0xc14) |
| #define reg_dma5_size REG_ADDR8(0xc16) |
| #define reg_dma5_mode REG_ADDR8(0xc17) |
| |
| //pwm tx dma |
| #define reg_dma7_addr REG_ADDR16(0xc18) |
| #define reg_dma7_size REG_ADDR8(0xc1a) |
| #define reg_dma7_mode REG_ADDR8(0xc1b) |
| |
| |
| #define reg_dma_t_addr REG_ADDR16(0xc1c) |
| #define reg_dma_t_size REG_ADDR8(0xc1e) |
| |
| #define reg_dma_size(v) REG_ADDR8(0xc02+4*v) |
| |
| // The default channel assignment |
| #define reg_dma_uart_rx_addr reg_dma0_addr |
| #define reg_dma_uart_rx_size reg_dma0_size |
| #define reg_dma_uart_rx_mode reg_dma0_mode |
| |
| #define reg_dma_uart_tx_addr reg_dma1_addr |
| #define reg_dma_uart_tx_size reg_dma1_size |
| #define reg_dma_uart_tx_mode reg_dma1_mode |
| |
| #define reg_dma_rf_rx_addr reg_dma2_addr |
| #define reg_dma_rf_rx_size reg_dma2_size |
| #define reg_dma_rf_rx_mode reg_dma2_mode |
| |
| #define reg_dma_rf_tx_addr reg_dma3_addr |
| #define reg_dma_rf_tx_size reg_dma3_size |
| #define reg_dma_rf_tx_mode reg_dma3_mode |
| |
| #define reg_dma_pwm_addr reg_dma7_addr |
| #define reg_dma_pwm_size reg_dma7_size |
| #define reg_dma_pwm_mode reg_dma7_mode |
| |
| |
| |
| #define reg_dma_chn_en REG_ADDR8(0xc20) |
| #define reg_dma_chn_irq_msk REG_ADDR8(0xc21) |
| #define reg_dma_tx_rdy0 REG_ADDR8(0xc24) |
| #define reg_dma_tx_rdy1 REG_ADDR8(0xc25) |
| #define reg_dma_rx_rdy0 REG_ADDR8(0xc26) |
| #define reg_dma_rx_rdy1 REG_ADDR8(0xc27) |
| |
| #define reg_dma_irq_status reg_dma_rx_rdy0 |
| |
| enum{ |
| FLD_DMA_CHN0 = BIT(0), FLD_DMA_CHN_UART_RX = BIT(0), |
| FLD_DMA_CHN1 = BIT(1), FLD_DMA_CHN_UART_TX = BIT(1), |
| FLD_DMA_CHN2 = BIT(2), FLD_DMA_CHN_RF_RX = BIT(2), |
| FLD_DMA_CHN3 = BIT(3), FLD_DMA_CHN_RF_TX = BIT(3), |
| FLD_DMA_CHN4 = BIT(4), FLD_DMA_CHN_AES_DECO = BIT(4), |
| FLD_DMA_CHN5 = BIT(5), FLD_DMA_CHN_AES_CODE = BIT(5), |
| FLD_DMA_CHN7 = BIT(7), FLD_DMA_CHN_PWM = BIT(7), |
| }; |
| |
| typedef enum { |
| FLD_DMA_IRQ_UART_RX = BIT(0), |
| FLD_DMA_IRQ_UART_TX = BIT(1), |
| FLD_DMA_IRQ_RF_RX = BIT(2), |
| FLD_DMA_IRQ_RF_TX = BIT(3), |
| FLD_DMA_IRQ_AES_DECO = BIT(4), |
| FLD_DMA_IRQ_AES_CODE = BIT(5), |
| FLD_DMA_IRQ_PWM = BIT(7), |
| FLD_DMA_IRQ_ALL = 0xff, |
| } IRQ_DMAIrqTypeDef; |
| |
| |
| #define reg_dma_rx_rptr REG_ADDR8(0xc28) |
| #define reg_dma_rx_wptr REG_ADDR8(0xc29) |
| |
| #define reg_dma_tx_rptr REG_ADDR8(0xc2a) |
| #define reg_dma_tx_wptr REG_ADDR8(0xc2b) |
| #define reg_dma_tx_fifo REG_ADDR16(0xc2c) |
| enum{ |
| FLD_DMA_RPTR_CLR = BIT(4), |
| FLD_DMA_RPTR_NEXT = BIT(5), |
| FLD_DMA_RPTR_SET = BIT(6), |
| }; |
| |
| #define reg_dma0_addrHi REG_ADDR8(0xc40) |
| #define reg_dma1_addrHi REG_ADDR8(0xc41) |
| #define reg_dma2_addrHi REG_ADDR8(0xc42) |
| #define reg_dma3_addrHi REG_ADDR8(0xc43) |
| #define reg_dma4_addrHi REG_ADDR8(0xc44) |
| #define reg_dma5_addrHi REG_ADDR8(0xc45) |
| #define reg_dma_ta_addrHi REG_ADDR8(0xc46) |
| #define reg_dma_a3_addrHi REG_ADDR8(0xc47) |
| #define reg_dma7_addrHi REG_ADDR8(0xc48) |
| |
| /******************************* linklayer registers: 0xf00 ******************************/ |
| |
| #define reg_rf_ll_ctrl_0 REG_ADDR8(0xf02) |
| |
| #define reg_rf_ll_ctrl_1 REG_ADDR8(0xf03) |
| enum{ |
| FLD_RF_FSM_TIMEOUT_EN = BIT(0), |
| FLD_RF_RX_FIRST_TIMEOUT_EN = BIT(1), |
| FLD_RF_RX_TIMEOUT_EN = BIT(2), |
| FLD_RF_CRC_2_EN = BIT(3), |
| |
| //BLE mode |
| FLD_RF_BRX_SN_INIT = BIT(4), |
| FLD_RF_BRX_NESN_INIT = BIT(5), |
| FLD_RF_BTX_SN_INIT = BIT(6), |
| FLD_RF_BTX_NESN_INIT = BIT(7), |
| }; |
| |
| #define FSM_TIMEOUT_ENABLE ( reg_rf_ll_ctrl_1 |= FLD_RF_FSM_TIMEOUT_EN ) |
| #define FSM_TIMEOUT_DISABLE ( reg_rf_ll_ctrl_1 &= (~FLD_RF_FSM_TIMEOUT_EN) ) |
| |
| #define reg_rf_rx_timeout REG_ADDR16(0xf0a) |
| |
| #define reg_rf_ll_ctrl_2 REG_ADDR8(0xf15) |
| |
| #define reg_rf_ll_ctrl_3 REG_ADDR8(0xf16) |
| enum{ |
| FLD_RF_TX_EN_DLY_EN = BIT(0), |
| FLD_RF_PLL_RST_EN = BIT(1), |
| FLD_RF_CMD_SCHEDULE_EN = BIT(2), |
| FLD_RF_R_TX_EN_DLY = BIT_RNG(4,7), |
| }; |
| |
| |
| #define reg_rf_irq_mask REG_ADDR16(0xf1c) |
| #define reg_rf_irq_status REG_ADDR16(0xf20) |
| #define reg_rf_fsm_timeout REG_ADDR32(0xf2c) |
| |
| #define CLEAR_ALL_RFIRQ_STATUS ( reg_rf_irq_status = 0xffff ) |
| |
| enum{ |
| FLD_RF_IRQ_RX = BIT(0), |
| FLD_RF_IRQ_TX = BIT(1), |
| FLD_RF_IRQ_RX_TIMEOUT = BIT(2), |
| FLD_RF_IRQ_RX_CRC_2 = BIT(4), |
| FLD_RF_IRQ_CMD_DONE = BIT(5), |
| FLD_RF_IRQ_FSM_TIMEOUT = BIT(6), |
| FLD_RF_IRQ_RETRY_HIT = BIT(7), |
| FLD_RF_IRQ_TX_DS = BIT(8), |
| FLD_RF_IRQ_RX_DR = BIT(9), |
| FLD_RF_IRQ_FIRST_TIMEOUT = BIT(10), |
| FLD_RF_IRQ_INVALID_PID = BIT(11), |
| FLD_RF_IRQ_STX_TIMEOUT = BIT(12), |
| FLD_RF_IRQ_ALL = 0X1FFF, |
| }; |
| |
| /******************************* pke registers: 0x2000 ******************************/ |
| #define reg_pke_ctrl REG_ADDR32(0x2000) |
| enum{ |
| FLD_PKE_CTRL_START = BIT(0), |
| FLD_PKE_CTRL_STOP = BIT(16), |
| }; |
| |
| #define reg_pke_conf REG_ADDR32(0x2004) |
| enum{ |
| FLD_PKE_CONF_IRQ_EN = BIT(8), |
| FLD_PKE_CONF_PARTIAL_RADIX = BIT_RNG(16,23), |
| FLD_PKE_CONF_BASE_RADIX = BIT_RNG(24,26), |
| }; |
| |
| #define reg_pke_mc_ptr REG_ADDR32(0x2010) |
| |
| #define reg_pke_stat REG_ADDR32(0x2020) |
| enum{ |
| FLD_PKE_STAT_DONE = BIT(0), |
| }; |
| |
| #define reg_pke_rt_code REG_ADDR32(0x2024) |
| enum{ |
| FLD_PKE_RT_CODE_STOP_LOG = BIT_RNG(0,3), |
| }; |
| |
| #define reg_pke_exe_conf REG_ADDR32(0x2050) |
| enum{ |
| FLD_PKE_EXE_CONF_IAFF_R0 = BIT(0), |
| FLD_PKE_EXE_CONF_IMON_R0 = BIT(1), |
| FLD_PKE_EXE_CONF_IAFF_R1 = BIT(2), |
| FLD_PKE_EXE_CONF_IMON_R1 = BIT(3), |
| FLD_PKE_EXE_CONF_OAFF = BIT(4), |
| FLD_PKE_EXE_CONF_OMON = BIT(5), |
| FLD_PKE_EXE_CONF_ME_SCA_EN = BIT_RNG(8,9), |
| }; |
| |
| /******************************************************************************************** |
| *****|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|***** |
| *****| Aanlog Register Table |***** |
| *****|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|***** |
| ********************************************************************************************/ |
| |
| /******************************* analog registers(3v3): 0x00 ***************************/ |
| |
| #define areg_06_pll_bg 0x06 |
| enum{ |
| FLD_PLL_BG_POWER_DOWN = BIT(4), // 1: Power down; 0: Power up |
| }; |
| |
| #define areg_0e_pa0_pa3_pull 0x0E |
| #define areg_0f_pa4_pa7_pull 0x0F |
| #define areg_10_pb0_pb3_pull 0x10 |
| #define areg_11_pb4_pb7_pull 0x11 |
| #define areg_12_pc0_pc3_pull 0x12 |
| #define areg_13_pc4_pc7_pull 0x13 |
| #define areg_14_pd0_pd3_pull 0x14 |
| #define areg_15_pd4_pd7_pull 0x15 |
| |
| |
| /******************************* mdec register ***************************/ |
| |
| #define mdec_rst_addr 0x16 |
| enum{ |
| FLD_SELE_PA0 = BIT(0), |
| FLD_SELE_PB7 = BIT(1), |
| FLD_SELE_PC4 = BIT(2), |
| FLD_SELE_PD0 = BIT(3), |
| FLD_RST_MDEC = BIT(4), |
| FLD_CLS_MDEC = BIT_RNG(0,4), |
| }; |
| |
| #define mdec_match_addr 0x17 |
| enum{ |
| FLD_CLS_MATCH_ADDR = BIT_RNG(0,3), |
| }; |
| |
| |
| /******************************* analog registers(1v8): 0x80 ***************************/ |
| #define areg_auto_pd_ctrl_0 0x2B |
| enum{ |
| FLD_AUTO_PD_PL_ALL = BIT(0), |
| FLD_AUTO_PD_PL_DCDC = BIT(1), |
| |
| }; |
| |
| #define areg_auto_pd_ctrl_1 0x2C |
| enum{ |
| FLD_AUTO_PD_RC_32K = BIT(0), |
| FLD_AUTO_PD_XTAL_32K = BIT(1), |
| FLD_AUTO_PD_XTAL_24M = BIT(2), |
| FLD_AUTO_PD_LC_COMP = BIT(3), |
| FLD_AUTO_PD_MISC = BIT(4), |
| FLD_AUTO_PD_XTAL_QUICK_RST = BIT(5), |
| FLD_AUTO_PD_OTP = BIT(6), |
| // <7> rsvd |
| }; |
| |
| |
| |
| #define areg_clk_setting 0x82 |
| enum{ |
| FLD_DCCC_DOUBLER_POWER_DOWN = BIT(3), |
| FLD_CLK_48M_TO_RX_EN = BIT(4), |
| FLD_CLK_48M_TO_DIG_EN = BIT(5), |
| FLD_CLK_24M_TO_SAR_EN = BIT(6), |
| FLD_CLK_48M_TO_CAL_DIG_MAN_EN = BIT(7), |
| }; |
| |
| #define areg_xo_setting 0x8a |
| enum{ |
| FLD_XO_CDAC_ANA = BIT_RNG(0,5), |
| FLD_XO_MODE_ANA = BIT(6), |
| FLD_XO_CAP_OFF_ANA = BIT(7), |
| }; |
| |
| /******************************* analog registers(PGA) ***************************/ |
| #define codec_ana_cfg2 0xe6 |
| #define codec_ana_cfg3 0xe7 |
| #define codec_ana_cfg4 0xe8 |
| |
| #define pga_audio_enable 0x34 |
| |
| |
| #if defined(__cplusplus) |
| } |
| #endif |
| |
| |
| |
| |