Прерывания в RP2350
В предыдущей главе мы рассмотрели, что такое прерывания и какую роль играет NVIC. Теперь давайте посмотрим, какие прерывания на самом деле доступны в RP2350.
Прерывания делятся на две группы: системные исключения и внешние прерывания.
Системные исключения определены самой архитектурой процессора. К ним относятся сброс, обработчики сбоев и системный таймер. На большинстве чипов Cortex-M они работают одинаково.
Внешние прерывания приходят от периферии RP2350. У каждого периферийного модуля, который может генерировать прерывание, есть номер IRQ и имя вектора. Именно эти имена вы будете видеть в коде.
Таблица ниже показывает внешние прерывания RP2350, пронумерованные от 0 до 51. Они охватывают распространённую периферию, например таймеры, GPIO, DMA и интерфейсы связи вроде I2C, SPI и UART.
Запоминать эту таблицу не нужно. Её назначение — помочь понять, откуда берутся такие имена, как I2C0_IRQ или UART0_IRQ, когда вы встречаете их в примерах или документации.
Полные подробности см. в разделе 3.2 даташита RP2350 на странице 82.
В следующей главе мы увидим, как Embassy использует эти прерывания, не требуя от вас писать обработчики прерываний вручную.
Внешние прерывания RP2350
Important
Некоторые описания прерываний здесь упрощены для удобного обзора для начинающих. Более точные и подробные сведения см. в даташите RP2350.
Таймеры
Аварийные сигналы таймеров, используемые для задержек и планирования.
| IRQ | Вектор | Описание |
|---|---|---|
| 0 | TIMER0_IRQ_0 | Прерывание аварийного сигнала таймера 0 |
| 1 | TIMER0_IRQ_1 | Прерывание аварийного сигнала таймера 0 |
| 2 | TIMER0_IRQ_2 | Прерывание аварийного сигнала таймера 0 |
| 3 | TIMER0_IRQ_3 | Прерывание аварийного сигнала таймера 0 |
| 4 | TIMER1_IRQ_0 | Прерывание аварийного сигнала таймера 1 |
| 5 | TIMER1_IRQ_1 | Прерывание аварийного сигнала таймера 1 |
| 6 | TIMER1_IRQ_2 | Прерывание аварийного сигнала таймера 1 |
| 7 | TIMER1_IRQ_3 | Прерывание аварийного сигнала таймера 1 |
ШИМ
События переполнения счётчика ШИМ.
| IRQ | Вектор | Описание |
|---|---|---|
| 8 | PWM_IRQ_WRAP_0 | Прерывание переполнения ШИМ |
| 9 | PWM_IRQ_WRAP_1 | Прерывание переполнения ШИМ |
DMA
События передачи DMA.
| IRQ | Вектор | Описание |
|---|---|---|
| 10 | DMA_IRQ_0 | Прерывание передачи DMA |
| 11 | DMA_IRQ_1 | Прерывание передачи DMA |
| 12 | DMA_IRQ_2 | Прерывание передачи DMA |
| 13 | DMA_IRQ_3 | Прерывание передачи DMA |
USB
События контроллера USB.
| IRQ | Вектор | Описание |
|---|---|---|
| 14 | USBCTRL_IRQ | Прерывание контроллера USB |
PIO
События конечных автоматов PIO.
| IRQ | Вектор | Описание |
|---|---|---|
| 15 | PIO0_IRQ_0 | Прерывание PIO 0 |
| 16 | PIO0_IRQ_1 | Прерывание PIO 0 |
| 17 | PIO1_IRQ_0 | Прерывание PIO 1 |
| 18 | PIO1_IRQ_1 | Прерывание PIO 1 |
| 19 | PIO2_IRQ_0 | Прерывание PIO 2 |
| 20 | PIO2_IRQ_1 | Прерывание PIO 2 |
GPIO и базовый ввод-вывод
События GPIO и межъядерной сигнализации.
| IRQ | Вектор | Описание |
|---|---|---|
| 21 | IO_IRQ_BANK0 | Прерывание GPIO |
| 22 | IO_IRQ_BANK0_NS | Прерывание GPIO |
| 23 | IO_IRQ_QSPI | Прерывание GPIO QSPI |
| 24 | IO_IRQ_QSPI_NS | Прерывание GPIO QSPI |
| 25 | SIO_IRQ_FIFO | Прерывание FIFO между ядрами |
| 26 | SIO_IRQ_BELL | Прерывание doorbell между ядрами |
| 27 | SIO_IRQ_FIFO_NS | Прерывание FIFO между ядрами |
| 28 | SIO_IRQ_BELL_NS | Прерывание doorbell между ядрами |
| 29 | SIO_IRQ_MTIMECMP | Прерывание системного таймера |
Периферия связи
События интерфейсов связи.
| IRQ | Вектор | Описание |
|---|---|---|
| 30 | CLOCKS_IRQ | Прерывание системы тактирования |
| 31 | SPI0_IRQ | Прерывание SPI |
| 32 | SPI1_IRQ | Прерывание SPI |
| 33 | UART0_IRQ | Прерывание UART |
| 34 | UART1_IRQ | Прерывание UART |
| 35 | ADC_IRQ_FIFO | Прерывание FIFO АЦП |
| 36 | I2C0_IRQ | Прерывание I2C |
| 37 | I2C1_IRQ | Прерывание I2C |
Система и питание
События управления системой и питанием.
| IRQ | Вектор | Описание |
|---|---|---|
| 38 | OTP_IRQ | Прерывание OTP |
| 39 | TRNG_IRQ | Прерывание генератора случайных чисел |
| 40 | Reserved | Зарезервировано |
| 41 | Reserved | Зарезервировано |
| 42 | PLL_SYS_IRQ | Прерывание системной PLL |
| 43 | PLL_USB_IRQ | Прерывание PLL USB |
| 44 | POWMAN_IRQ_POW | Прерывание менеджера питания |
| 45 | POWMAN_IRQ_TIMER | Прерывание таймера менеджера питания |
Программные прерывания
Прерывания, которые можно вызвать программно.
| IRQ | Вектор | Описание |
|---|---|---|
| 46 | SPAREIRQ_IRQ_0 | Программное прерывание |
| 47 | SPAREIRQ_IRQ_1 | Программное прерывание |
| 48 | SPAREIRQ_IRQ_2 | Программное прерывание |
| 49 | SPAREIRQ_IRQ_3 | Программное прерывание |
| 50 | SPAREIRQ_IRQ_4 | Программное прерывание |
| 51 | SPAREIRQ_IRQ_5 | Программное прерывание |