VSF Documented
device.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18/*============================ INCLUDES ======================================*/
19
20#include "hal/vsf_hal_cfg.h"
21
22/*============================ MACROS ========================================*/
23
24#if defined(__VSF_HEADER_ONLY_SHOW_ARCH_INFO__)
25
26/*\note first define basic info for arch. */
28# define VSF_ARCH_PRI_NUM 4
29# define VSF_ARCH_PRI_BIT 2
30
31// Software interrupts provided by dedicated device IRQs. RP2040 NVIC slots
32// 26..31 (SPARE_IRQ_0..5) are not wired to any peripheral and are usable as
33// software interrupts. Each one gives the EDA scheduler an extra preemption
34// level on top of PendSV.
35//
36// Cortex-M0+ implements only VSF_ARCH_PRI_BIT==2 priority bits => 4 distinct
37// NVIC priorities (VSF_ARCH_PRI_NUM==4). The kernel can therefore use at most
38// 4 preemptible levels (PendSV + 3 device SWIs); with 4 in use the systimer
39// shares the top level. That is the hardware ceiling: more device SWIs cannot
40// become additional preemption levels (unlike Cortex-M4 parts such as
41// AT32F405 with 3 priority bits / 8 levels). We expose exactly 3 here.
42//
43// The IRQ numbers are listed in VSF_DEV_SWI_LIST (main section below) and
44// routed to SWIn_IRQHandler in the vector table (startup_RP2040.c).
45# define VSF_DEV_SWI_NUM 3
46
47#elif defined(__VSF_HAL_SHOW_VENDOR_INFO__)
48
49# define __VSF_HEADER_ONLY_SHOW_VENDOR_INFO__
50# include "RP2040.h"
51
52#else
53
54#ifndef __HAL_DEVICE_RASPBERRYPI_RP2040_H__
55#define __HAL_DEVICE_RASPBERRYPI_RP2040_H__
56
57// NVIC IRQ numbers backing the device software interrupts declared by
58// VSF_DEV_SWI_NUM, in SWI0,SWI1,SWI2 order. SPARE_IRQ_0..2 == 26,27,28 (CMSIS
59// IRQn_Type stops at RTC_IRQ=25, so the spare slots have no symbolic name —
60// use the literals).
61#define VSF_DEV_SWI_LIST 26, 27, 28
62
63/*============================ INCLUDES ======================================*/
64
65// for XXXX_BASE
66#include "hardware/regs/addressmap.h"
67#include "hardware/regs/resets.h"
68
69// Vendor peripheral headers — centralized here so individual driver .c files
70// don't pull them in directly. Anything a driver reaches for as `xxx_hw` /
71// `XXX_<FIELD>_BITS` is provided through this block.
72#include "hardware/structs/adc.h"
73#include "hardware/structs/clocks.h"
74#include "hardware/structs/dma.h"
75#include "hardware/structs/io_bank0.h"
76#include "hardware/structs/pads_bank0.h"
77#include "hardware/structs/pwm.h"
78#include "hardware/structs/resets.h"
79#include "hardware/structs/rosc.h"
80#include "hardware/structs/rtc.h"
81#include "hardware/structs/sio.h"
82#include "hardware/structs/spi.h"
83#include "hardware/structs/timer.h"
84#include "hardware/structs/watchdog.h"
85
86#include "hardware/regs/adc.h"
87#include "hardware/regs/dma.h"
88#include "hardware/regs/psm.h"
89#include "hardware/regs/pwm.h"
90#include "hardware/regs/rtc.h"
91#include "hardware/regs/spi.h"
92#include "hardware/regs/timer.h"
93#include "hardware/regs/watchdog.h"
94
95/*============================ MACROS ========================================*/
96
97#define USB_OTG_COUNT 1
98// required by dwcotg, define the max ep number of dwcotg include ep0
99#define USB_DWCOTG_MAX_EP_NUM 16
100
101#define USB_OTG0_IRQHandler USBDMA_IRQHandler
102#define USB_OTG0_CONFIG \
103 .dc_ep_num = 4 << 1, .hc_ep_num = 5, \
104 .reg = (void *)0, /* vk_dwcotg_hw_info_t */ \
105 .buffer_word_size = 948, .speed = USB_SPEED_FULL, .dma_en = true, \
106 .ulpi_en = true, .utmi_en = false, .vbus_en = false,
107
108#define VSF_HW_I2C_COUNT 2
109#define VSF_HW_I2C0_IRQN I2C0_IRQ_IRQn
110#define VSF_HW_I2C0_IRQHandler I2C0_IRQHandler
111#define VSF_HW_I2C0_REG I2C0_BASE
112#define VSF_HW_I2C0_RST_BIT (1u << RESET_I2C0)
113#define VSF_HW_I2C1_IRQN I2C1_IRQ_IRQn
114#define VSF_HW_I2C1_IRQHandler I2C1_IRQHandler
115#define VSF_HW_I2C1_REG I2C1_BASE
116#define VSF_HW_I2C1_RST_BIT (1u << RESET_I2C1)
117
118#define VSF_HW_USART_COUNT 2
119#define VSF_HW_USART0_IRQN UART0_IRQ_IRQn
120#define VSF_HW_USART0_IRQHandler UART0_IRQHandler
121#define VSF_HW_USART0_REG UART0_BASE
122#define VSF_HW_USART0_RST_BIT (1u << RESET_UART0)
123#define VSF_HW_USART1_IRQN UART1_IRQ_IRQn
124#define VSF_HW_USART1_IRQHandler UART1_IRQHandler
125#define VSF_HW_USART1_REG UART1_BASE
126#define VSF_HW_USART1_RST_BIT (1u << RESET_UART1)
127
128/* DMA DREQ (data request) signals for RP2040 peripherals.
129 * Values from RP2040 datasheet Table 124. */
130#define VSF_HW_USART0_TX_DREQ 20
131#define VSF_HW_USART0_RX_DREQ 21
132#define VSF_HW_USART1_TX_DREQ 22
133#define VSF_HW_USART1_RX_DREQ 23
134
135// RP2040 has a single GPIO bank (BANK0) with 30 pins (GP0..GP29).
136// EXTI lives inside IO_BANK0 (per-pin INTR/PROC0_INTE), not a separate IP.
137// The minimal driver implements the digital GPIO subset; exti_irq_* return
138// VSF_ERR_NOT_SUPPORT until EXTI support is added.
139#define VSF_HW_GPIO_PORT_COUNT 1
140#define VSF_HW_GPIO_PIN_COUNT 30
141#define VSF_HW_GPIO_PIN_MASK 0x3FFFFFFFu
142#define VSF_HW_GPIO0_IRQN IO_IRQ_BANK0_IRQn
143
144// Enable VSF_GPIO_PORT_PIN macros (VSF_PA0..VSF_PA29) and the
145// vsf_hw_gpio_ports_config_pin batch API.
146#define VSF_GPIO_CFG_PORT0
147#define VSF_GPIO_CFG_PIN_COUNT 30
148
149#define VSF_HW_RTC_COUNT 1
150#define VSF_HW_RTC0_IRQN RTC_IRQ_IRQn
151#define VSF_HW_RTC0_IRQHandler RTC_IRQHandler
152#define VSF_HW_RTC0_REG RTC_BASE
153#define VSF_HW_RTC0_RST_BIT (1u << RESET_RTC)
154
155#define VSF_HW_FLASH_COUNT 1
156#define VSF_HW_FLASH0_SIZE (2 * 1024 * 1024)
157#define VSF_HW_FLASH0_SECTOR_SIZE 4096
158#define VSF_HW_FLASH0_PAGE_SIZE 256
159#define VSF_HW_FLASH0_SECTOR_NUM 512
160#define VSF_HW_FLASH0_BLOCK_SIZE 65536
161#define VSF_HW_FLASH0_XIP_BASE XIP_BASE
162
163#define VSF_HW_WDT_COUNT 1
164#define VSF_HW_WDT0_REG WATCHDOG_BASE
165
166#define VSF_HW_ADC_COUNT 1
167#define VSF_HW_ADC0_REG ADC_BASE
168#define VSF_HW_ADC0_RST_BIT (1u << RESET_ADC)
169#define VSF_HW_ADC0_IRQN ADC_IRQ_FIFO_IRQn
170#define VSF_HW_ADC0_IRQHandler ADC_IRQ_FIFO_IRQHandler
171#define VSF_HW_ADC_CHANNEL_COUNT 5
172#define VSF_HW_ADC_TEMP_SENSOR_CHANNEL 4
173#define VSF_HW_ADC_MAX_DATA_BITS 12
174
175#define VSF_HW_PWM_COUNT 8
176#define VSF_HW_PWM0_IRQN PWM_IRQ_WRAP_IRQn
177#define VSF_HW_PWM_IRQHandler PWM_IRQ_WRAP_IRQHandler
178#define VSF_HW_PWM0_REG PWM_BASE
179#define VSF_HW_PWM0_RST_BIT (1u << RESET_PWM)
180#define VSF_HW_PWM1_IRQN VSF_HW_PWM0_IRQN
181#define VSF_HW_PWM1_REG PWM_BASE
182#define VSF_HW_PWM1_RST_BIT VSF_HW_PWM0_RST_BIT
183#define VSF_HW_PWM2_IRQN VSF_HW_PWM0_IRQN
184#define VSF_HW_PWM2_REG PWM_BASE
185#define VSF_HW_PWM2_RST_BIT VSF_HW_PWM0_RST_BIT
186#define VSF_HW_PWM3_IRQN VSF_HW_PWM0_IRQN
187#define VSF_HW_PWM3_REG PWM_BASE
188#define VSF_HW_PWM3_RST_BIT VSF_HW_PWM0_RST_BIT
189#define VSF_HW_PWM4_IRQN VSF_HW_PWM0_IRQN
190#define VSF_HW_PWM4_REG PWM_BASE
191#define VSF_HW_PWM4_RST_BIT VSF_HW_PWM0_RST_BIT
192#define VSF_HW_PWM5_IRQN VSF_HW_PWM0_IRQN
193#define VSF_HW_PWM5_REG PWM_BASE
194#define VSF_HW_PWM5_RST_BIT VSF_HW_PWM0_RST_BIT
195#define VSF_HW_PWM6_IRQN VSF_HW_PWM0_IRQN
196#define VSF_HW_PWM6_REG PWM_BASE
197#define VSF_HW_PWM6_RST_BIT VSF_HW_PWM0_RST_BIT
198#define VSF_HW_PWM7_IRQN VSF_HW_PWM0_IRQN
199#define VSF_HW_PWM7_REG PWM_BASE
200#define VSF_HW_PWM7_RST_BIT VSF_HW_PWM0_RST_BIT
201
202#define VSF_HW_TIMER_COUNT 4
203#define VSF_HW_TIMER0_REG TIMER_BASE
204#define VSF_HW_TIMER1_REG TIMER_BASE
205#define VSF_HW_TIMER2_REG TIMER_BASE
206#define VSF_HW_TIMER3_REG TIMER_BASE
207#define VSF_HW_TIMER0_IRQN TIMER_IRQ_0_IRQn
208#define VSF_HW_TIMER1_IRQN TIMER_IRQ_1_IRQn
209#define VSF_HW_TIMER2_IRQN TIMER_IRQ_2_IRQn
210#define VSF_HW_TIMER3_IRQN TIMER_IRQ_3_IRQn
211#define VSF_HW_TIMER0_IRQHandler TIMER_IRQ_0_IRQHandler
212#define VSF_HW_TIMER1_IRQHandler TIMER_IRQ_1_IRQHandler
213#define VSF_HW_TIMER2_IRQHandler TIMER_IRQ_2_IRQHandler
214#define VSF_HW_TIMER3_IRQHandler TIMER_IRQ_3_IRQHandler
215#define VSF_HW_TIMER_CHANNEL_COUNT 2
216
217#define VSF_HW_SPI_COUNT 2
218#define VSF_HW_SPI0_IRQN SPI0_IRQ_IRQn
219#define VSF_HW_SPI0_IRQHandler SPI0_IRQHandler
220#define VSF_HW_SPI0_REG SPI0_BASE
221#define VSF_HW_SPI0_RST_BIT (1u << RESET_SPI0)
222#define VSF_HW_SPI1_IRQN SPI1_IRQ_IRQn
223#define VSF_HW_SPI1_IRQHandler SPI1_IRQHandler
224#define VSF_HW_SPI1_REG SPI1_BASE
225#define VSF_HW_SPI1_RST_BIT (1u << RESET_SPI1)
226
227#define VSF_HW_RNG_COUNT 1
228#define VSF_HW_RNG_BITLEN 32
229
230#define VSF_HW_DMA_COUNT 1
231#define VSF_HW_DMA_MASK 0x1
232#define VSF_HW_DMA_CHANNEL_NUM 12
233#define VSF_HW_DMA0_REG DMA_BASE
234#define VSF_HW_DMA0_RST_BIT (1u << RESET_DMA)
235#define VSF_HW_DMA0_IRQN DMA_IRQ_0_IRQn
236#define VSF_HW_DMA0_IRQN_0 VSF_HW_DMA0_IRQN
237#define VSF_HW_DMA0_IRQN_1 DMA_IRQ_1_IRQn
238#define VSF_HW_DMA0_IRQHandler VSF_HW_DMA0_IRQ_0_Handler
239#define VSF_HW_DMA0_IRQ_0_Handler DMA_IRQ_0_Handler
240#define VSF_HW_DMA0_IRQ_1_Handler DMA_IRQ_1_Handler
241#define VSF_HW_DMA0_IRQ_Handler_COUNT 2
242
243/*============================ MACROFIED FUNCTIONS ===========================*/
244/*============================ TYPES =========================================*/
245/*============================ GLOBAL VARIABLES ==============================*/
246/*============================ LOCAL VARIABLES ===============================*/
247/*============================ PROTOTYPES ====================================*/
248
249#endif // __HAL_DEVICE_RASPBERRYPI_RP2040_H__
250#endif // __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
251/* EOF */
Generated from commit: vsfteam/vsf@3b461d0