doubao_chat/include_lib/driver/cpu/wl82/asm/gpio.h

314 lines
10 KiB
C

#ifndef ASM_PORT_IO_H
#define ASM_PORT_IO_H
#define IO_GROUP_NUM 16
#define IO_PORTA_BASE (ls_io_base + 0x00*4)
#define IO_PORTA_00 (IO_GROUP_NUM * 0 + 0)
#define IO_PORTA_01 (IO_GROUP_NUM * 0 + 1)
#define IO_PORTA_02 (IO_GROUP_NUM * 0 + 2)
#define IO_PORTA_03 (IO_GROUP_NUM * 0 + 3)
#define IO_PORTA_04 (IO_GROUP_NUM * 0 + 4)
#define IO_PORTA_05 (IO_GROUP_NUM * 0 + 5)
#define IO_PORTA_06 (IO_GROUP_NUM * 0 + 6)
#define IO_PORTA_07 (IO_GROUP_NUM * 0 + 7)
#define IO_PORTA_08 (IO_GROUP_NUM * 0 + 8)
#define IO_PORTA_09 (IO_GROUP_NUM * 0 + 9)
#define IO_PORTA_10 (IO_GROUP_NUM * 0 + 10)
#define IO_PORTA_11 (IO_GROUP_NUM * 0 + 11)
#define IO_PORTA_12 (IO_GROUP_NUM * 0 + 12)
#define IO_PORTA_13 (IO_GROUP_NUM * 0 + 13)
#define IO_PORTA_14 (IO_GROUP_NUM * 0 + 14)
#define IO_PORTA_15 (IO_GROUP_NUM * 0 + 15)
#define IO_PORTB_00 (IO_GROUP_NUM * 1 + 0)
#define IO_PORTB_01 (IO_GROUP_NUM * 1 + 1)
#define IO_PORTB_02 (IO_GROUP_NUM * 1 + 2)
#define IO_PORTB_03 (IO_GROUP_NUM * 1 + 3)
#define IO_PORTB_04 (IO_GROUP_NUM * 1 + 4)
#define IO_PORTB_05 (IO_GROUP_NUM * 1 + 5)
#define IO_PORTB_06 (IO_GROUP_NUM * 1 + 6)
#define IO_PORTB_07 (IO_GROUP_NUM * 1 + 7)
#define IO_PORTB_08 (IO_GROUP_NUM * 1 + 8)
#define IO_PORTB_09 (IO_GROUP_NUM * 1 + 9)
#define IO_PORTB_10 (IO_GROUP_NUM * 1 + 10)
#define IO_PORTB_11 (IO_GROUP_NUM * 1 + 11)
#define IO_PORTB_12 (IO_GROUP_NUM * 1 + 12)
#define IO_PORTB_13 (IO_GROUP_NUM * 1 + 13)
#define IO_PORTB_14 (IO_GROUP_NUM * 1 + 14)
#define IO_PORTB_15 (IO_GROUP_NUM * 1 + 15)
#define IO_PORTC_00 (IO_GROUP_NUM * 2 + 0)
#define IO_PORTC_01 (IO_GROUP_NUM * 2 + 1)
#define IO_PORTC_02 (IO_GROUP_NUM * 2 + 2)
#define IO_PORTC_03 (IO_GROUP_NUM * 2 + 3)
#define IO_PORTC_04 (IO_GROUP_NUM * 2 + 4)
#define IO_PORTC_05 (IO_GROUP_NUM * 2 + 5)
#define IO_PORTC_06 (IO_GROUP_NUM * 2 + 6)
#define IO_PORTC_07 (IO_GROUP_NUM * 2 + 7)
#define IO_PORTC_08 (IO_GROUP_NUM * 2 + 8)
#define IO_PORTC_09 (IO_GROUP_NUM * 2 + 9)
#define IO_PORTC_10 (IO_GROUP_NUM * 2 + 10)
#define IO_PORTC_11 (IO_GROUP_NUM * 2 + 11)
#define IO_PORTC_12 (IO_GROUP_NUM * 2 + 12)
#define IO_PORTC_13 (IO_GROUP_NUM * 2 + 13)
#define IO_PORTC_14 (IO_GROUP_NUM * 2 + 14)
#define IO_PORTC_15 (IO_GROUP_NUM * 2 + 15)
#define IO_PORTD_00 (IO_GROUP_NUM * 3 + 0)
#define IO_PORTD_01 (IO_GROUP_NUM * 3 + 1)
#define IO_PORTD_02 (IO_GROUP_NUM * 3 + 2)
#define IO_PORTD_03 (IO_GROUP_NUM * 3 + 3)
#define IO_PORTD_04 (IO_GROUP_NUM * 3 + 4)
#define IO_PORTD_05 (IO_GROUP_NUM * 3 + 5)
#define IO_PORTD_06 (IO_GROUP_NUM * 3 + 6)
#define IO_PORTD_07 (IO_GROUP_NUM * 3 + 7)
#define IO_PORTD_08 (IO_GROUP_NUM * 3 + 8)
#define IO_PORTD_09 (IO_GROUP_NUM * 3 + 9)
#define IO_PORTD_10 (IO_GROUP_NUM * 3 + 10)
#define IO_PORTD_11 (IO_GROUP_NUM * 3 + 11)
#define IO_PORTD_12 (IO_GROUP_NUM * 3 + 12)
#define IO_PORTD_13 (IO_GROUP_NUM * 3 + 13)
#define IO_PORTD_14 (IO_GROUP_NUM * 3 + 14)
#define IO_PORTD_15 (IO_GROUP_NUM * 3 + 15)
#define IO_PORTE_00 (IO_GROUP_NUM * 4 + 0)
#define IO_PORTE_01 (IO_GROUP_NUM * 4 + 1)
#define IO_PORTE_02 (IO_GROUP_NUM * 4 + 2)
#define IO_PORTE_03 (IO_GROUP_NUM * 4 + 3)
#define IO_PORTE_04 (IO_GROUP_NUM * 4 + 4)
#define IO_PORTE_05 (IO_GROUP_NUM * 4 + 5)
#define IO_PORTE_06 (IO_GROUP_NUM * 4 + 6)
#define IO_PORTE_07 (IO_GROUP_NUM * 4 + 7)
#define IO_PORTE_08 (IO_GROUP_NUM * 4 + 8)
#define IO_PORTE_09 (IO_GROUP_NUM * 4 + 9)
#define IO_PORTE_10 (IO_GROUP_NUM * 4 + 10)
#define IO_PORTE_11 (IO_GROUP_NUM * 4 + 11)
#define IO_PORTE_12 (IO_GROUP_NUM * 4 + 12)
#define IO_PORTE_13 (IO_GROUP_NUM * 4 + 13)
#define IO_PORTE_14 (IO_GROUP_NUM * 4 + 14)
#define IO_PORTE_15 (IO_GROUP_NUM * 4 + 15)
#define IO_PORTF_00 (IO_GROUP_NUM * 5 + 0)
#define IO_PORTF_01 (IO_GROUP_NUM * 5 + 1)
#define IO_PORTF_02 (IO_GROUP_NUM * 5 + 2)
#define IO_PORTF_03 (IO_GROUP_NUM * 5 + 3)
#define IO_PORTF_04 (IO_GROUP_NUM * 5 + 4)
#define IO_PORTF_05 (IO_GROUP_NUM * 5 + 5)
#define IO_PORTF_06 (IO_GROUP_NUM * 5 + 6)
#define IO_PORTF_07 (IO_GROUP_NUM * 5 + 7)
#define IO_PORTF_08 (IO_GROUP_NUM * 5 + 8)
#define IO_PORTF_09 (IO_GROUP_NUM * 5 + 9)
#define IO_PORTF_10 (IO_GROUP_NUM * 5 + 10)
#define IO_PORTF_11 (IO_GROUP_NUM * 5 + 11)
#define IO_PORTF_12 (IO_GROUP_NUM * 5 + 12)
#define IO_PORTF_13 (IO_GROUP_NUM * 5 + 13)
#define IO_PORTF_14 (IO_GROUP_NUM * 5 + 14)
#define IO_PORTF_15 (IO_GROUP_NUM * 5 + 15)
#define IO_PORTG_00 (IO_GROUP_NUM * 6 + 0)
#define IO_PORTG_01 (IO_GROUP_NUM * 6 + 1)
#define IO_PORTG_02 (IO_GROUP_NUM * 6 + 2)
#define IO_PORTG_03 (IO_GROUP_NUM * 6 + 3)
#define IO_PORTG_04 (IO_GROUP_NUM * 6 + 4)
#define IO_PORTG_05 (IO_GROUP_NUM * 6 + 5)
#define IO_PORTG_06 (IO_GROUP_NUM * 6 + 6)
#define IO_PORTG_07 (IO_GROUP_NUM * 6 + 7)
#define IO_PORTG_08 (IO_GROUP_NUM * 6 + 8)
#define IO_PORTG_09 (IO_GROUP_NUM * 6 + 9)
#define IO_PORTG_10 (IO_GROUP_NUM * 6 + 10)
#define IO_PORTG_11 (IO_GROUP_NUM * 6 + 11)
#define IO_PORTG_12 (IO_GROUP_NUM * 6 + 12)
#define IO_PORTG_13 (IO_GROUP_NUM * 6 + 13)
#define IO_PORTG_14 (IO_GROUP_NUM * 6 + 14)
#define IO_PORTG_15 (IO_GROUP_NUM * 6 + 15)
#define IO_PORTH_00 (IO_GROUP_NUM * 7 + 0)
#define IO_PORTH_01 (IO_GROUP_NUM * 7 + 1)
#define IO_PORTH_02 (IO_GROUP_NUM * 7 + 2)
#define IO_PORTH_03 (IO_GROUP_NUM * 7 + 3)
#define IO_PORTH_04 (IO_GROUP_NUM * 7 + 4)
#define IO_PORTH_05 (IO_GROUP_NUM * 7 + 5)
#define IO_PORTH_06 (IO_GROUP_NUM * 7 + 6)
#define IO_PORTH_07 (IO_GROUP_NUM * 7 + 7)
#define IO_PORTH_08 (IO_GROUP_NUM * 7 + 8)
#define IO_PORTH_09 (IO_GROUP_NUM * 7 + 9)
#define IO_PORTH_10 (IO_GROUP_NUM * 7 + 10)
#define IO_PORTH_11 (IO_GROUP_NUM * 7 + 11)
#define IO_PORTH_12 (IO_GROUP_NUM * 7 + 12)
#define IO_PORTH_13 (IO_GROUP_NUM * 7 + 13)
#define IO_PORTH_14 (IO_GROUP_NUM * 7 + 14)
#define IO_PORTH_15 (IO_GROUP_NUM * 7 + 15)
#define IO_PORTI_00 (IO_GROUP_NUM * 8 + 0)
#define IO_PORTI_01 (IO_GROUP_NUM * 8 + 1)
#define IO_PORTI_02 (IO_GROUP_NUM * 8 + 2)
#define IO_PORTI_03 (IO_GROUP_NUM * 8 + 3)
#define IO_PORTI_04 (IO_GROUP_NUM * 8 + 4)
#define IO_PORTI_05 (IO_GROUP_NUM * 8 + 5)
#define IO_PORTI_06 (IO_GROUP_NUM * 8 + 6)
#define IO_PORTI_07 (IO_GROUP_NUM * 8 + 7)
#define IO_PORTI_08 (IO_GROUP_NUM * 8 + 8)
#define IO_PORTI_09 (IO_GROUP_NUM * 8 + 9)
#define IO_PORTI_10 (IO_GROUP_NUM * 8 + 10)
#define IO_PORTI_11 (IO_GROUP_NUM * 8 + 11)
#define IO_PORTI_12 (IO_GROUP_NUM * 8 + 12)
#define IO_PORTI_13 (IO_GROUP_NUM * 8 + 13)
#define IO_PORTI_14 (IO_GROUP_NUM * 8 + 14)
#define IO_PORTI_15 (IO_GROUP_NUM * 8 + 15)
#define IO_MAX_NUM (IO_PORTI_15+1)
#define IO_PORT_PR_00 (IO_MAX_NUM + 0)
#define IO_PORT_PR_01 (IO_MAX_NUM + 1)
#define IO_PORT_PR_02 (IO_MAX_NUM + 2)
#define IO_PORT_PR_03 (IO_MAX_NUM + 3)
#define IO_PR_MAX (IO_PORT_PR_03 + 1)
#define IO_PORT_USB_DPA (IO_PR_MAX + 0)
#define IO_PORT_USB_DMA (IO_PR_MAX + 1)
#define IO_PORT_USB_DPB (IO_PR_MAX + 2)
#define IO_PORT_USB_DMB (IO_PR_MAX + 3)
#define IO_PORTA IO_PORTA_00
#define IO_PORTB IO_PORTB_00
#define IO_PORTC IO_PORTC_00
#define IO_PORTD IO_PORTD_00
#define IO_PORTE IO_PORTE_00
#define IO_PORTF IO_PORTF_00
#define IO_PORTG IO_PORTG_00
#define IO_PORTH IO_PORTH_00
#define USB_IO_OFFSET 4
#define IO_PORT_DP (IO_MAX_NUM + USB_IO_OFFSET)
#define IO_PORT_DM (IO_MAX_NUM + USB_IO_OFFSET + 1)
#define GPIOA (IO_GROUP_NUM * 0)
#define GPIOB (IO_GROUP_NUM * 1)
#define GPIOC (IO_GROUP_NUM * 2)
#define GPIOD (IO_GROUP_NUM * 3)
#define GPIOE (IO_GROUP_NUM * 4)
#define GPIOF (IO_GROUP_NUM * 5)
#define GPIOG (IO_GROUP_NUM * 6)
#define GPIOH (IO_GROUP_NUM * 7)
#define GPIOR (IO_MAX_NUM)
#define GPIOUSB (IO_MAX_NUM + USB_IO_OFFSET)
enum {
INPUT_CH0,
INPUT_CH1,
INPUT_CH2,
INPUT_CH3,
};
enum gpio_op_mode {
GPIO_SET = 1,
GPIO_AND,
GPIO_OR,
GPIO_XOR,
};
enum gpio_direction {
GPIO_OUT = 0,
GPIO_IN = 1,
};
enum gpio_out_channle {
CH0_UT0_TX,
CH0_UT1_TX,
CH0_T0_PWM_OUT,
CH0_T1_PWM_OUT,
CH0_RTOSL_CLK,
CH0_BTOSC_CLK,
CH0_PLL_12M,
CH0_UT2_TX,
CH0_CH0_PWM_H,
CH0_CH0_PWM_L,
CH0_CH1_PWM_H,
CH0_CH1_PWM_L,
CH0_CH3_PWM_H,
CH0_CH3_PWM_L,
CH0_PLNK0_SCLK_OUT,
CH0_T5_PWM_OUT,
CH1_UT0_TX = 0x10,
CH1_UT1_TX,
CH1_T0_PWM_OUT,
CH1_T1_PWM_OUT,
CH1_RTOSL_CLK,
CH1_BTOSC_CLK,
CH1_PLL_24M,
CH1_UT2_TX,
CH1_CH0_PWM_H,
CH1_CH0_PWM_L,
CH1_CH1_PWM_H,
CH1_CH1_PWM_L,
CH1_CH3_PWM_H,
CH1_CH3_PWM_L,
CH1_PLNK1_SCLK_OUT,
CH1_T4_PWM_OUT,
CH2_UT1_RTS = 0x20,
CH2_UT1_TX,
CH2_T0_PWM_OUT,
CH2_T1_PWM_OUT,
CH2_RTOSL_CLK,
CH2_BTOSC_CLK,
CH2_PLL_24M,
CH2_UT2_TX,
CH2_CH0_PWM_H,
CH2_CH0_PWM_L,
CH2_CH1_PWM_H,
CH2_CH1_PWM_L,
CH2_CH2_PWM_H,
CH2_CH2_PWM_L,
CH2_T2_PWM_OUT,
CH2_T3_PWM_OUT,
CH3_UT1_RTS = 0x30,
CH3_UT1_TX,
CH3_T0_PWM_OUT,
CH3_T1_PWM_OUT,
CH3_RTOSL_CLK,
CH3_BTOSC_CLK,
CH3_PLL_24M,
CH3_UT2_TX,
CH3_CH0_PWM_H,
CH3_CH0_PWM_L,
CH3_CH1_PWM_H,
CH3_CH1_PWM_L,
CH3_CH2_PWM_H,
CH3_CH2_PWM_L,
CH3_T2_PWM_OUT,
CH3_T3_PWM_OUT,
};
struct gpio_reg {
volatile unsigned long out;
volatile unsigned long in;
volatile unsigned long dir;
volatile unsigned long die;
volatile unsigned long pu;
volatile unsigned long pd;
volatile unsigned long hd0;
volatile unsigned long hd;
volatile unsigned long dieh;
};
#if 0
#define IO_DEBUG_0(i,x) {JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT &= ~BIT(x);}
#define IO_DEBUG_1(i,x) {JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT |= BIT(x);}
#define IO_DEBUG_TOGGLE(i,x) {JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT ^= BIT(x);}
#else
#define IO_DEBUG_0(i,x) {}
#define IO_DEBUG_1(i,x) {}
#define IO_DEBUG_TOGGLE(i,x) {}
#endif
#endif