lpc-field

Template project for programming NXP's LPC1768 MCUs
git clone git://git.mdnr.space/lpc-field
Log | Files | Refs | README | LICENSE

vector.c (5477B)


      1 
      2 /* 
      3  * Source: libopencm3 library: https://github.com/libopencm3/libopencm3
      4  */
      5 
      6 #include "vector.h"
      7 
      8 void blocking_handler(void);
      9 void null_handler(void);
     10 void reset_handler(void);
     11 int main(void);
     12 
     13 void  nmi_handler(void) __attribute__((weak, alias("null_handler")));
     14 void  hard_fault_handler(void) __attribute__((weak, alias("blocking_handler")));
     15 void  sv_call_handler(void) __attribute__((weak, alias("null_handler")));
     16 void  pend_sv_handler(void) __attribute__((weak, alias("null_handler")));
     17 void  systick_handler(void) __attribute__((weak, alias("null_handler")));
     18 void  mem_manage_handler(void) __attribute__((weak, alias("blocking_handler")));
     19 void  bus_fault_handler(void) __attribute__((weak, alias("blocking_handler")));
     20 void  usage_fault_handler(void) __attribute__((weak, alias("blocking_handler")));
     21 void  debug_monitor_handler(void) __attribute__((weak, alias("null_handler")));
     22 
     23 void wdt_isr(void) __attribute__((weak, alias("blocking_handler")));
     24 void timer0_isr(void) __attribute__((weak, alias("blocking_handler")));
     25 void timer1_isr(void) __attribute__((weak, alias("blocking_handler")));
     26 void timer2_isr(void) __attribute__((weak, alias("blocking_handler")));
     27 void timer3_isr(void) __attribute__((weak, alias("blocking_handler")));
     28 void uart0_isr(void) __attribute__((weak, alias("blocking_handler")));
     29 void uart1_isr(void) __attribute__((weak, alias("blocking_handler")));
     30 void uart2_isr(void) __attribute__((weak, alias("blocking_handler")));
     31 void uart3_isr(void) __attribute__((weak, alias("blocking_handler")));
     32 void pwm_isr(void) __attribute__((weak, alias("blocking_handler")));
     33 void i2c0_isr(void) __attribute__((weak, alias("blocking_handler")));
     34 void i2c1_isr(void) __attribute__((weak, alias("blocking_handler")));
     35 void i2c2_isr(void) __attribute__((weak, alias("blocking_handler")));
     36 void spi_isr(void) __attribute__((weak, alias("blocking_handler")));
     37 void ssp0_isr(void) __attribute__((weak, alias("blocking_handler")));
     38 void ssp1_isr(void) __attribute__((weak, alias("blocking_handler")));
     39 void pll0_isr(void) __attribute__((weak, alias("blocking_handler")));
     40 void rtc_isr(void) __attribute__((weak, alias("blocking_handler")));
     41 void eint0_isr(void) __attribute__((weak, alias("blocking_handler")));
     42 void eint1_isr(void) __attribute__((weak, alias("blocking_handler")));
     43 void eint2_isr(void) __attribute__((weak, alias("blocking_handler")));
     44 void eint3_isr(void) __attribute__((weak, alias("blocking_handler")));
     45 void adc_isr(void) __attribute__((weak, alias("blocking_handler")));
     46 void bod_isr(void) __attribute__((weak, alias("blocking_handler")));
     47 void usb_isr(void) __attribute__((weak, alias("blocking_handler")));
     48 void can_isr(void) __attribute__((weak, alias("blocking_handler")));
     49 void gpdma_isr(void) __attribute__((weak, alias("blocking_handler")));
     50 void i2s_isr(void) __attribute__((weak, alias("blocking_handler")));
     51 void ethernet_isr(void) __attribute__((weak, alias("blocking_handler")));
     52 void rit_isr(void) __attribute__((weak, alias("blocking_handler")));
     53 void motor_pwm_isr(void) __attribute__((weak, alias("blocking_handler")));
     54 void qei_isr(void) __attribute__((weak, alias("blocking_handler")));
     55 void pll1_isr(void) __attribute__((weak, alias("blocking_handler")));
     56 void usb_act_isr(void) __attribute__((weak, alias("blocking_handler")));
     57 void can_act_isr(void) __attribute__((weak, alias("blocking_handler")));
     58 
     59 #define IRQ_HANDLERS \
     60     [NVIC_WDT_IRQ] = wdt_isr, \
     61     [NVIC_TIMER0_IRQ] = timer0_isr, \
     62     [NVIC_TIMER1_IRQ] = timer1_isr, \
     63     [NVIC_TIMER2_IRQ] = timer2_isr, \
     64     [NVIC_TIMER3_IRQ] = timer3_isr, \
     65     [NVIC_UART0_IRQ] = uart0_isr, \
     66     [NVIC_UART1_IRQ] = uart1_isr, \
     67     [NVIC_UART2_IRQ] = uart2_isr, \
     68     [NVIC_UART3_IRQ] = uart3_isr, \
     69     [NVIC_PWM_IRQ] = pwm_isr, \
     70     [NVIC_I2C0_IRQ] = i2c0_isr, \
     71     [NVIC_I2C1_IRQ] = i2c1_isr, \
     72     [NVIC_I2C2_IRQ] = i2c2_isr, \
     73     [NVIC_SPI_IRQ] = spi_isr, \
     74     [NVIC_SSP0_IRQ] = ssp0_isr, \
     75     [NVIC_SSP1_IRQ] = ssp1_isr, \
     76     [NVIC_PLL0_IRQ] = pll0_isr, \
     77     [NVIC_RTC_IRQ] = rtc_isr, \
     78     [NVIC_EINT0_IRQ] = eint0_isr, \
     79     [NVIC_EINT1_IRQ] = eint1_isr, \
     80     [NVIC_EINT2_IRQ] = eint2_isr, \
     81     [NVIC_EINT3_IRQ] = eint3_isr, \
     82     [NVIC_ADC_IRQ] = adc_isr, \
     83     [NVIC_BOD_IRQ] = bod_isr, \
     84     [NVIC_USB_IRQ] = usb_isr, \
     85     [NVIC_CAN_IRQ] = can_isr, \
     86     [NVIC_GPDMA_IRQ] = gpdma_isr, \
     87     [NVIC_I2S_IRQ] = i2s_isr, \
     88     [NVIC_ETHERNET_IRQ] = ethernet_isr, \
     89     [NVIC_RIT_IRQ] = rit_isr, \
     90     [NVIC_MOTOR_PWM_IRQ] = motor_pwm_isr, \
     91     [NVIC_QEI_IRQ] = qei_isr, \
     92     [NVIC_PLL1_IRQ] = pll1_isr, \
     93     [NVIC_USB_ACT_IRQ] = usb_act_isr, \
     94     [NVIC_CAN_ACT_IRQ] = can_act_isr
     95 
     96 __attribute__ ((section(".vectors")))
     97 vector_table_t vector_table = {
     98     .initial_sp_value = &_stack,
     99     .reset = reset_handler,
    100     .nmi = nmi_handler,
    101     .hard_fault = hard_fault_handler,
    102     .memory_manage_fault = mem_manage_handler,
    103     .bus_fault = bus_fault_handler,
    104     .usage_fault = usage_fault_handler,
    105     .sv_call = sv_call_handler,
    106     .debug_monitor = debug_monitor_handler,
    107     .pend_sv = pend_sv_handler,
    108     .systick = systick_handler,
    109     .irq = { IRQ_HANDLERS },
    110 };
    111 
    112 void reset_handler(void) {
    113     unsigned int *src, *dest;
    114 
    115     for (src = &_data_lma, dest = &_data;
    116             dest < &_edata;
    117             src++, dest++) {
    118         *dest = *src;
    119     }
    120 
    121     while (dest < &_ebss) {
    122         *dest++ = 0;
    123     }
    124 
    125     (void)main();
    126 
    127     blocking_handler();
    128 }
    129 
    130 void blocking_handler(void) {
    131     while(1) {}
    132 }
    133 
    134 void null_handler(void) { }
    135