diff --git a/os/common/ext/RP/RP2040/rp2040.h b/os/common/ext/RP/RP2040/rp2040.h index 7dc12848a..49d1ed9ef 100644 --- a/os/common/ext/RP/RP2040/rp2040.h +++ b/os/common/ext/RP/RP2040/rp2040.h @@ -80,24 +80,231 @@ typedef enum { #include "core_cm0plus.h" #include "system_rp2040.h" +/** + * @name Peripheral structures + * @{ + */ typedef struct { - __IO uint32_t xxx; -} XXX_TypeDef; + __IO uint32_t TIMEHW; + __IO uint32_t TIMELW; + __I uint32_t TIMEHR; + __I uint32_t TIMELR; + __IO uint32_t ALARM0; + __IO uint32_t ALARM1; + __IO uint32_t ALARM2; + __IO uint32_t ALARM3; + __IO uint32_t ARMED; + __I uint32_t TIMERAWH; + __I uint32_t TIMERAWL; + __IO uint32_t DBGPAUSE; + __IO uint32_t PAUSE; + __IO uint32_t INTR; + __IO uint32_t INTE; + __IO uint32_t INTF; + __I uint32_t INTS; +} TIMER_TypeDef; -#define PERIPH_BASE 0x40000000U +typedef struct { + __IO uint32_t UARTDR; + __IO uint32_t UARTRSR; + __I uint32_t resvd8; + __I uint32_t resvdC; + __I uint32_t resvd10; + __I uint32_t resvd14; + __I uint32_t UARTFR; + __I uint32_t resvd1C; + __IO uint32_t UARTILPR; + __IO uint32_t UARTIBRD; + __IO uint32_t UARTFBRD; + __IO uint32_t UARTLCR_H; + __IO uint32_t UARTCR; + __IO uint32_t UARTIFLS; + __IO uint32_t UARTIMSC; + __I uint32_t UARTRIS; + __I uint32_t UARTMIS; + __IO uint32_t UARTICR; + __IO uint32_t UARTDMACR; + __I uint32_t resvd4C[997]; + __I uint32_t UARTPERIPHID0; + __I uint32_t UARTPERIPHID1; + __I uint32_t UARTPERIPHID2; + __I uint32_t UARTPERIPHID3; + __I uint32_t UARTPCELLID0; + __I uint32_t UARTPCELLID1; + __I uint32_t UARTPCELLID2; + __I uint32_t UARTPCELLID3; +} UART_TypeDef; +/** @} */ + +/** + * @name Base addresses + * @{ + */ +#define APBPERIPH_BASE 0x40000000U +#define AHBPERIPH_BASE 0x50000000U +#define __IOPORT_BASE 0xA0000000U +#define __TIMER_BASE (APBPERIPH_BASE + 0x00054000) +#define __UART0_BASE (APBPERIPH_BASE + 0x00034000) +#define __UART1_BASE (APBPERIPH_BASE + 0x00038000) +/** @} */ /** * @name Peripherals * @{ */ -#define XXX ((XXX_TypeDef *)(PERIPH_BASE + 0x00000000U)) -/** @{ */ +#define TIMER ((TIMER_TypeDef *)__TIMER_BASE) +#define UART0 ((UART_TypeDef *)__UART0_BASE) +#define UART1 ((UART_TypeDef *)__UART1_BASE) +/** @} */ /** - * @name Peripheral bits defitions + * @name TIMER bits definitions */ -#define XXX_REG_NAME_Pos 0U -#define XXX_REG_NAME_Msk (3U << XXX_REG_NAME_Pos) +#define TIMER_ARMED_ALARM0_Pos 0U +#define TIMER_ARMED_ALARM0_Msk (1U << TIMER_ARMED_ALARM0_Pos) +#define TIMER_ARMED_ALARM0 TIMER_ARMED_ALARM0_Msk +#define TIMER_ARMED_ALARM1_Pos 1U +#define TIMER_ARMED_ALARM1_Msk (1U << TIMER_ARMED_ALARM1_Pos) +#define TIMER_ARMED_ALARM1 TIMER_ARMED_ALARM1_Msk +#define TIMER_ARMED_ALARM2_Pos 2U +#define TIMER_ARMED_ALARM2_Msk (1U << TIMER_ARMED_ALARM2_Pos) +#define TIMER_ARMED_ALARM2 TIMER_ARMED_ALARM2_Msk +#define TIMER_ARMED_ALARM3_Pos 3U +#define TIMER_ARMED_ALARM3_Msk (1U << TIMER_ARMED_ALARM3_Pos) +#define TIMER_ARMED_ALARM3 TIMER_ARMED_ALARM3_Msk + +#define TIMER_DBGPAUSE_DBG0_Pos 1U +#define TIMER_DBGPAUSE_DBG0_Msk (1U << TIMER_DBGPAUSE_DBG0_Pos) +#define TIMER_DBGPAUSE_DBG0 TIMER_DBGPAUSE_DBG0_Msk +#define TIMER_DBGPAUSE_DBG1_Pos 2U +#define TIMER_DBGPAUSE_DBG1_Msk (1U << TIMER_DBGPAUSE_DBG1_Pos) +#define TIMER_DBGPAUSE_DBG1 TIMER_DBGPAUSE_DBG1_Msk + +#define TIMER_PAUSE_PAUSE_Pos 0U +#define TIMER_PAUSE_PAUSE_Msk (1U << TIMER_PAUSE_PAUSE_Pos) +#define TIMER_PAUSE_PAUSE TIMER_PAUSE_PAUSE_Msk + +#define TIMER_INTR_ALARM0_Pos 0U +#define TIMER_INTR_ALARM0_Msk (1U << TIMER_INTR_ALARM0_Pos) +#define TIMER_INTR_ALARM0 TIMER_INTR_ALARM0_Msk +#define TIMER_INTR_ALARM1_Pos 1U +#define TIMER_INTR_ALARM1_Msk (1U << TIMER_INTR_ALARM1_Pos) +#define TIMER_INTR_ALARM1 TIMER_INTR_ALARM1_Msk +#define TIMER_INTR_ALARM2_Pos 2U +#define TIMER_INTR_ALARM2_Msk (1U << TIMER_INTR_ALARM2_Pos) +#define TIMER_INTR_ALARM2 TIMER_INTR_ALARM2_Msk +#define TIMER_INTR_ALARM3_Pos 3U +#define TIMER_INTR_ALARM3_Msk (1U << TIMER_INTR_ALARM3_Pos) +#define TIMER_INTR_ALARM3 TIMER_INTR_ALARM3_Msk + +#define TIMER_INTE_ALARM0_Pos 0U +#define TIMER_INTE_ALARM0_Msk (1U << TIMER_INTE_ALARM0_Pos) +#define TIMER_INTE_ALARM0 TIMER_INTE_ALARM0_Msk +#define TIMER_INTE_ALARM1_Pos 1U +#define TIMER_INTE_ALARM1_Msk (1U << TIMER_INTE_ALARM1_Pos) +#define TIMER_INTE_ALARM1 TIMER_INTE_ALARM1_Msk +#define TIMER_INTE_ALARM2_Pos 2U +#define TIMER_INTE_ALARM2_Msk (1U << TIMER_INTE_ALARM2_Pos) +#define TIMER_INTE_ALARM2 TIMER_INTE_ALARM2_Msk +#define TIMER_INTE_ALARM3_Pos 3U +#define TIMER_INTE_ALARM3_Msk (1U << TIMER_INTE_ALARM3_Pos) +#define TIMER_INTE_ALARM3 TIMER_INTE_ALARM3_Msk + +#define TIMER_INTF_ALARM0_Pos 0U +#define TIMER_INTF_ALARM0_Msk (1U << TIMER_INTF_ALARM0_Pos) +#define TIMER_INTF_ALARM0 TIMER_INTF_ALARM0_Msk +#define TIMER_INTF_ALARM1_Pos 1U +#define TIMER_INTF_ALARM1_Msk (1U << TIMER_INTF_ALARM1_Pos) +#define TIMER_INTF_ALARM1 TIMER_INTF_ALARM1_Msk +#define TIMER_INTF_ALARM2_Pos 2U +#define TIMER_INTF_ALARM2_Msk (1U << TIMER_INTF_ALARM2_Pos) +#define TIMER_INTF_ALARM2 TIMER_INTF_ALARM2_Msk +#define TIMER_INTF_ALARM3_Pos 3U +#define TIMER_INTF_ALARM3_Msk (1U << TIMER_INTF_ALARM3_Pos) +#define TIMER_INTF_ALARM3 TIMER_INTF_ALARM3_Msk + +#define TIMER_INTS_ALARM0_Pos 0U +#define TIMER_INTS_ALARM0_Msk (1U << TIMER_INTS_ALARM0_Pos) +#define TIMER_INTS_ALARM0 TIMER_INTS_ALARM0_Msk +#define TIMER_INTS_ALARM1_Pos 1U +#define TIMER_INTS_ALARM1_Msk (1U << TIMER_INTS_ALARM1_Pos) +#define TIMER_INTS_ALARM1 TIMER_INTS_ALARM1_Msk +#define TIMER_INTS_ALARM2_Pos 2U +#define TIMER_INTS_ALARM2_Msk (1U << TIMER_INTS_ALARM2_Pos) +#define TIMER_INTS_ALARM2 TIMER_INTS_ALARM2_Msk +#define TIMER_INTS_ALARM3_Pos 3U +#define TIMER_INTS_ALARM3_Msk (1U << TIMER_INTS_ALARM3_Pos) +#define TIMER_INTS_ALARM3 TIMER_INTS_ALARM3_Msk +/** @} */ + +/** + * @name UART bits definitions + */ +#define UART_UARTDR_OE_Pos 11U +#define UART_UARTDR_OE_Msk (1U << UART_UARTDR_OE_Pos) +#define UART_UARTDR_OE UART_UARTDR_OE_Msk +#define UART_UARTDR_BE_Pos 10U +#define UART_UARTDR_BE_Msk (1U << UART_UARTDR_BE_Pos) +#define UART_UARTDR_BE UART_UARTDR_BE_Msk +#define UART_UARTDR_PE_Pos 9U +#define UART_UARTDR_PE_Msk (1U << UART_UARTDR_PE_Pos) +#define UART_UARTDR_PE UART_UARTDR_PE_Msk +#define UART_UARTDR_FE_Pos 8U +#define UART_UARTDR_FE_Msk (1U << UART_UARTDR_FE_Pos) +#define UART_UARTDR_FE UART_UARTDR_FE_Msk + +#define UART_UARTRSR_OE_Pos 3U +#define UART_UARTRSR_OE_Msk (1U << UART_UARTRSR_OE_Pos) +#define UART_UARTRSR_OE UART_UARTRSR_OE_Msk +#define UART_UARTRSR_BE_Pos 2U +#define UART_UARTRSR_BE_Msk (1U << UART_UARTRSR_BE_Pos) +#define UART_UARTRSR_BE UART_UARTRSR_BE_Msk +#define UART_UARTRSR_PE_Pos 1U +#define UART_UARTRSR_PE_Msk (1U << UART_UARTRSR_PE_Pos) +#define UART_UARTRSR_PE UART_UARTRSR_PE_Msk +#define UART_UARTRSR_FE_Pos 0U +#define UART_UARTRSR_FE_Msk (1U << UART_UARTRSR_FE_Pos) +#define UART_UARTRSR_FE UART_UARTRSR_FE_Msk + +#define UART_UARTFR_RI_Pos 8U +#define UART_UARTFR_RI_Msk (1U << UART_UARTFR_RI_Pos) +#define UART_UARTFR_RI UART_UARTFR_RI_Msk +#define UART_UARTFR_TXFE_Pos 7U +#define UART_UARTFR_TXFE_Msk (1U << UART_UARTFR_TXFE_Pos) +#define UART_UARTFR_TXFE UART_UARTFR_TXFE_Msk +#define UART_UARTFR_RXFF_Pos 6U +#define UART_UARTFR_RXFF_Msk (1U << UART_UARTFR_RXFF_Pos) +#define UART_UARTFR_RXFF UART_UARTFR_RXFF_Msk +#define UART_UARTFR_TXFF_Pos 5U +#define UART_UARTFR_TXFF_Msk (1U << UART_UARTFR_TXFF_Pos) +#define UART_UARTFR_TXFF UART_UARTFR_TXFF_Msk +#define UART_UARTFR_RXFE_Pos 4U +#define UART_UARTFR_RXFE_Msk (1U << UART_UARTFR_RXFE_Pos) +#define UART_UARTFR_RXFE UART_UARTFR_RXFE_Msk +#define UART_UARTFR_BUSY_Pos 3U +#define UART_UARTFR_BUSY_Msk (1U << UART_UARTFR_BUSY_Pos) +#define UART_UARTFR_BUSY UART_UARTFR_BUSY_Msk +#define UART_UARTFR_DCD_Pos 2U +#define UART_UARTFR_DCD_Msk (1U << UART_UARTFR_DCD_Pos) +#define UART_UARTFR_DCD UART_UARTFR_DCD_Msk +#define UART_UARTFR_DSR_Pos 1U +#define UART_UARTFR_DSR_Msk (1U << UART_UARTFR_DSR_Pos) +#define UART_UARTFR_DSR UART_UARTFR_DSR_Msk +#define UART_UARTFR_CTS_Pos 0U +#define UART_UARTFR_CTS_Msk (1U << UART_UARTFR_CTS_Pos) +#define UART_UARTFR_CTS UART_UARTFR_CTS_Msk + +#define UART_UARTILPR_ILPDVSR_Pos 0U +#define UART_UARTILPR_ILPDVSR_Msk (255U << UART_UARTILPR_ILPDVSR_Pos) +#define UART_UARTILPR_ILPDVSR(n) ((n) << UART_UARTILPR_ILPDVSR_Pos) + +#define UART_UARTIBRD_BAUD_DIVINT_Pos 0U +#define UART_UARTIBRD_BAUD_DIVINT_Msk (0xFFFFU << UART_UARTIBRD_BAUD_DIVINT_Pos) +#define UART_UARTIBRD_BAUD_DIVINT(n) ((n) << UART_UARTIBRD_BAUD_DIVINT_Pos) + +#define UART_UARTFBRD_BAUD_DIVFRAC_Pos 0U +#define UART_UARTFBRD_BAUD_DIVFRAC_Msk (63U << UART_UARTFBRD_BAUD_DIVFRAC_Pos) +#define UART_UARTFBRD_BAUD_DIVFRAC(n) ((n) << UART_UARTFBRD_BAUD_DIVFRAC_Pos) /** @} */ #ifdef __cplusplus diff --git a/os/hal/ports/RP/RP2040/hal_lld.h b/os/hal/ports/RP/RP2040/hal_lld.h index eecd73364..1a1935715 100644 --- a/os/hal/ports/RP/RP2040/hal_lld.h +++ b/os/hal/ports/RP/RP2040/hal_lld.h @@ -94,7 +94,16 @@ * @name Various clock points. * @{ */ +#define RP_GPOUT0_CLK hal_lld_get_clock(clk_gpout0) +#define RP_GPOUT1_CLK hal_lld_get_clock(clk_gpout1) +#define RP_GPOUT2_CLK hal_lld_get_clock(clk_gpout2) +#define RP_GPOUT3_CLK hal_lld_get_clock(clk_gpout3) +#define RP_REF_CLK hal_lld_get_clock(clk_ref) #define RP_CORE_CLK hal_lld_get_clock(clk_sys) +#define RP_PERI_CLK hal_lld_get_clock(clk_peri) +#define RP_USB_CLK hal_lld_get_clock(clk_usb) +#define RP_ADC_CLK hal_lld_get_clock(clk_adc) +#define RP_RTC_CLK hal_lld_get_clock(clk_rtc) /** @} */ /*===========================================================================*/ diff --git a/os/various/pico_bindings/pico-sdk.mk b/os/various/pico_bindings/pico-sdk.mk index f9beb08b5..d8e249004 100644 --- a/os/various/pico_bindings/pico-sdk.mk +++ b/os/various/pico_bindings/pico-sdk.mk @@ -15,8 +15,8 @@ PICOSDKINC = $(CHIBIOS)//os/various/pico_bindings/dumb/include \ $(PICOSDKROOT)/src/rp2_common/hardware_irq/include \ $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \ $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \ $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \ $(PICOSDKROOT)/src/rp2040/hardware_regs/include \ $(PICOSDKROOT)/src/rp2040/hardware_structs/include \ $(PICOSDKROOT)/src/boards/include