Skip to content

Commit 39fafaa

Browse files
authored
Add SPARE_IRQs to the SVD (#2271)
* Add SPARE_IRQ to RP2350 SVD (note not having an `<addresBlock>` or one with a size of zero is not a legal SVD, so including something hopefully harmless * Add SPARE_IRQ definitions to RP2040 intctrl.h, and add assertions on competing #defines as these were called USER_IRQs in the SDK 1.x * Add SPAREIRQ_IRQ to rp2040 assembler, and fix name on rp2350 - this is backwards incompatible, but unlikely used * add SPARE_IRQs to RP2040 svd too
1 parent fa94f64 commit 39fafaa

File tree

5 files changed

+98
-6
lines changed

5 files changed

+98
-6
lines changed

src/rp2040/hardware_regs/RP2040.svd

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51022,5 +51022,38 @@ SPDX-License-Identifier: BSD-3-Clause
5102251022
</register>
5102351023
</registers>
5102451024
</peripheral>
51025+
<peripheral>
51026+
<name>SPARE_IRQ</name>
51027+
<baseAddress>0x00000000</baseAddress>
51028+
<addressBlock>
51029+
<offset>0</offset>
51030+
<size>4</size>
51031+
<usage>reserved</usage>
51032+
</addressBlock>
51033+
<interrupt>
51034+
<name>SPARE_IRQ_0</name>
51035+
<value>26</value>
51036+
</interrupt>
51037+
<interrupt>
51038+
<name>SPARE_IRQ_1</name>
51039+
<value>27</value>
51040+
</interrupt>
51041+
<interrupt>
51042+
<name>SPARE_IRQ_2</name>
51043+
<value>28</value>
51044+
</interrupt>
51045+
<interrupt>
51046+
<name>SPARE_IRQ_3</name>
51047+
<value>29</value>
51048+
</interrupt>
51049+
<interrupt>
51050+
<name>SPARE_IRQ_4</name>
51051+
<value>30</value>
51052+
</interrupt>
51053+
<interrupt>
51054+
<name>SPARE_IRQ_5</name>
51055+
<value>31</value>
51056+
</interrupt>
51057+
</peripheral>
5102551058
</peripherals>
5102651059
</device>

src/rp2040/hardware_regs/include/hardware/regs/intctrl.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@
3939
#define I2C0_IRQ 23
4040
#define I2C1_IRQ 24
4141
#define RTC_IRQ 25
42+
#define SPARE_IRQ_0 26
43+
#define SPARE_IRQ_1 27
44+
#define SPARE_IRQ_2 28
45+
#define SPARE_IRQ_3 29
46+
#define SPARE_IRQ_4 30
47+
#define SPARE_IRQ_5 31
4248
#else
4349
/**
4450
* \brief Interrupt numbers on RP2040 (used as typedef \ref irq_num_t)
@@ -71,6 +77,12 @@ typedef enum irq_num_rp2040 {
7177
I2C0_IRQ = 23, ///< Select I2C0's IRQ output
7278
I2C1_IRQ = 24, ///< Select I2C1's IRQ output
7379
RTC_IRQ = 25, ///< Select RTC's IRQ output
80+
SPARE_IRQ_0 = 26, ///< Select SPARE IRQ 0
81+
SPARE_IRQ_1 = 27, ///< Select SPARE IRQ 1
82+
SPARE_IRQ_2 = 28, ///< Select SPARE IRQ 2
83+
SPARE_IRQ_3 = 29, ///< Select SPARE IRQ 3
84+
SPARE_IRQ_4 = 30, ///< Select SPARE IRQ 4
85+
SPARE_IRQ_5 = 31, ///< Select SPARE IRQ 5
7486
IRQ_COUNT
7587
} irq_num_t;
7688
#endif
@@ -101,6 +113,12 @@ typedef enum irq_num_rp2040 {
101113
#define isr_i2c0 isr_irq23
102114
#define isr_i2c1 isr_irq24
103115
#define isr_rtc isr_irq25
116+
#define isr_spare_0 isr_irq26
117+
#define isr_spare_1 isr_irq27
118+
#define isr_spare_2 isr_irq28
119+
#define isr_spare_3 isr_irq29
120+
#define isr_spare_4 isr_irq30
121+
#define isr_spare_5 isr_irq31
104122

105123
#endif // _INTCTRL_H
106124

src/rp2350/hardware_regs/RP2350.svd

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105846,5 +105846,40 @@ SPDX-License-Identifier: BSD-3-Clause
105846105846
</register>
105847105847
</registers>
105848105848
</peripheral>
105849+
105850+
<peripheral>
105851+
<name>SPARE_IRQ</name>
105852+
<baseAddress>0x00000000</baseAddress>
105853+
<addressBlock>
105854+
<offset>0</offset>
105855+
<size>4</size>
105856+
<usage>reserved</usage>
105857+
</addressBlock>
105858+
<interrupt>
105859+
<name>SPARE_IRQ_0</name>
105860+
<value>46</value>
105861+
</interrupt>
105862+
<interrupt>
105863+
<name>SPARE_IRQ_1</name>
105864+
<value>47</value>
105865+
</interrupt>
105866+
<interrupt>
105867+
<name>SPARE_IRQ_2</name>
105868+
<value>48</value>
105869+
</interrupt>
105870+
<interrupt>
105871+
<name>SPARE_IRQ_3</name>
105872+
<value>49</value>
105873+
</interrupt>
105874+
<interrupt>
105875+
<name>SPARE_IRQ_4</name>
105876+
<value>50</value>
105877+
</interrupt>
105878+
<interrupt>
105879+
<name>SPARE_IRQ_5</name>
105880+
<value>51</value>
105881+
</interrupt>
105882+
</peripheral>
105883+
105849105884
</peripherals>
105850105885
</device>

src/rp2350/hardware_regs/include/hardware/regs/intctrl.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@
5959
#define PLL_USB_IRQ 43
6060
#define POWMAN_IRQ_POW 44
6161
#define POWMAN_IRQ_TIMER 45
62-
#define SPAREIRQ_IRQ_0 46
63-
#define SPAREIRQ_IRQ_1 47
64-
#define SPAREIRQ_IRQ_2 48
65-
#define SPAREIRQ_IRQ_3 49
66-
#define SPAREIRQ_IRQ_4 50
67-
#define SPAREIRQ_IRQ_5 51
62+
#define SPARE_IRQ_0 46
63+
#define SPARE_IRQ_1 47
64+
#define SPARE_IRQ_2 48
65+
#define SPARE_IRQ_3 49
66+
#define SPARE_IRQ_4 50
67+
#define SPARE_IRQ_5 51
6868
#else
6969
/**
7070
* \brief Interrupt numbers on RP2350 (used as typedef \ref irq_num_t)

src/rp2_common/hardware_irq/irq.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515
PICO_RUNTIME_INIT_FUNC_PER_CORE(runtime_init_per_core_irq_priorities, PICO_RUNTIME_INIT_PER_CORE_IRQ_PRIORITIES);
1616
#endif
1717

18+
static_assert(IRQ_COUNT == NUM_IRQS, "");
19+
// "USER IRQs" use the spare irq numbers
20+
#if NUM_USER_IRQS
21+
static_assert(IRQ_COUNT - NUM_USER_IRQS == SPARE_IRQ_0, "");
22+
#endif
23+
1824
#if PICO_VTABLE_PER_CORE
1925
static uint8_t user_irq_claimed[NUM_CORES];
2026
static inline uint8_t *user_irq_claimed_ptr(void) {

0 commit comments

Comments
 (0)