#include "interrupts.h" #include "addrmap.h" #include "bitmap.h" #include "utils.h" #include "gpio.h" #include "usb/cusb.h" extern u32 cores_systick[]; void isr_unbind(void){} void isr_systick(void){ cores_systick[0]++; // Core 0 cores_systick[1]++; // Core 1 } void isr_usb(){ if(cusb_check_interrupt(BIT_USBCTRL_INTS_SETUP_REQ)){ REG_WRITE_BITMAP_CLEAR(USBCTRL_SIE_STATUS, BIT_USBCTRL_SIE_STATUS_SETUP_REC); cusb_handle_setup(); } if(cusb_check_interrupt(BIT_USBCTRL_INTS_BUS_RESET)){ REG_WRITE_BITMAP_CLEAR(USBCTRL_SIE_STATUS, BIT_USBCTRL_SIE_STATUS_BUS_RESET); cusb_handle_bus_reset(); } if(cusb_check_interrupt(BIT_USBCTRL_INTS_BUFFER_STATUS)){ cusb_handle_buffer_status(); } cusb_eoi(); } __attribute__((used,aligned(4),section(".vector_table"))) void (*vtable[])(void) = { (void (*)(void))SRAM_END, // ----- Start of internal (to core) interrupts isr_unbind, // 01-NMI isr_unbind, // 02-HardFault isr_unbind, // 03-Unused isr_unbind, // 04-Unused isr_unbind, // 05-Unused isr_unbind, // 06-Unused isr_unbind, // 07-Unused isr_unbind, // 08-Unused isr_unbind, // 09-Unused isr_unbind, // 10-Unused isr_unbind, // 11-SVCall isr_unbind, // 12-Unused isr_unbind, // 13-Unused isr_unbind, // 14-PendSV isr_systick, // 15-SysTick // ----- Start of external (RP2040 ones) interrupts isr_unbind, // 00-Unused isr_unbind, // 01-Unused isr_unbind, // 02-Unused isr_unbind, // 03-Unused isr_unbind, // 04-Unused isr_usb // 05-Usb Controller }; void interrupts_init(){ memcpy((void*)SRAM_BASE, (void*)vtable, 4*30); REG_WRITE(PPB_VTOR, SRAM_BASE); } void interrupts_enable(int num){ REG_WRITE(PPB_NVIC_ICPR, 1<