mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-12 15:03:41 +00:00
Add RP2350 support (#4459)
machine/rp2350: add support * add linker scripts for rp2350 * add bootloader * begin melding rp2040 and rp2350 APIs * add UART * add rp2350 boot patching * Fix RP2350 memory layout (#4626) * Remove rp2040-style second stage bootloader. * Add 'minimum viable' IMAGE_DEF embedded block * Create a pico2 specific target * Implement rp2350 init, clock, and uart support * Merge rp2 reset code back together * Separate chip-specific clock definitions * Clear pad isolation bit on rp2350 * Init UART in rp2350 runtime * Correct usb/serial initialization order * Implement jump-to-bootloader * test: add pico2 to smoketests --------- Signed-off-by: deadprogram <ron@hybridgroup.com> Co-authored-by: Matthew Mets <matt.mets@cibomahto.com> Co-authored-by: Matt Mets <matt@blinkinlabs.com> Co-authored-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
committed by
GitHub
parent
0d13e61d0c
commit
37f35f8c91
@@ -0,0 +1,39 @@
|
||||
//go:build rp2040 || rp2350
|
||||
|
||||
package machine
|
||||
|
||||
// machine_rp2040_sync.go contains interrupt and
|
||||
// lock primitives similar to those found in Pico SDK's
|
||||
// irq.c
|
||||
|
||||
// Clears interrupt flag on a pin
|
||||
func (p Pin) acknowledgeInterrupt(change PinChange) {
|
||||
ioBank0.intR[p>>3].Set(p.ioIntBit(change))
|
||||
}
|
||||
|
||||
// Basic interrupt setting via ioBANK0 for GPIO interrupts.
|
||||
func (p Pin) setInterrupt(change PinChange, enabled bool) {
|
||||
// Separate mask/force/status per-core, so check which core called, and
|
||||
// set the relevant IRQ controls.
|
||||
switch CurrentCore() {
|
||||
case 0:
|
||||
p.ctrlSetInterrupt(change, enabled, &ioBank0.proc0IRQctrl)
|
||||
case 1:
|
||||
p.ctrlSetInterrupt(change, enabled, &ioBank0.proc1IRQctrl)
|
||||
}
|
||||
}
|
||||
|
||||
// ctrlSetInterrupt acknowledges any pending interrupt and enables or disables
|
||||
// the interrupt for a given IRQ control bank (IOBANK, DormantIRQ, QSPI).
|
||||
//
|
||||
// pico-sdk calls this the _gpio_set_irq_enabled, not to be confused with
|
||||
// gpio_set_irq_enabled (no leading underscore).
|
||||
func (p Pin) ctrlSetInterrupt(change PinChange, enabled bool, base *irqCtrl) {
|
||||
p.acknowledgeInterrupt(change)
|
||||
enReg := &base.intE[p>>3]
|
||||
if enabled {
|
||||
enReg.SetBits(p.ioIntBit(change))
|
||||
} else {
|
||||
enReg.ClearBits(p.ioIntBit(change))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user