void interrupt_init() { int i; pic_init(32, 40); for (i = 32; i < 48; i++) { interrupt_disable(i); interrupt_acknowledge(i); } for (i = 0; i < 32; i++) { interrupt_handler_table[i] = unknown_exception; interrupt_spurious[i] = 0; interrupt_count[i] = 0; } for (i = 32; i < 48; i++) { interrupt_handler_table[i] = unknown_hardware; interrupt_spurious[i] = 0; interrupt_count[i] = 0; } // Wire vector index 14 to pagefault handler interrupt_handler_table[14] = exception_handle_pagefault; interrupt_unblock(); console_printf("interrupt: ready\n"); }
void interrupt_handle(void) { ps_chardevice_t* device; ps_cdev_handle_irq(&serial_device, 0); interrupt_acknowledge(); }
void pre_init(void) { /* Initialise the UART */ printf("Initialising UART driver\n"); if(exynos_serial_init(DEV_ID, (void *) vaddr, NULL, NULL, &serial_device)){ printf("Failed to initialise UART\n"); while(1); } serial_configure(&serial_device, BAUD_RATE, 8, PARITY_NONE, 1); serial_device.flags &= ~SERIAL_AUTO_CR; /* Prime semaphore */ read_sem_wait(); /* Register for IRQs */ interrupt_acknowledge(); }
void interrupt_handle() { ps_cdev_handle_irq(&serial_device, 0); interrupt_acknowledge(); }
void interrupt_handler(int i, int code) { last_interrupt = i; (interrupt_handler_table[i]) (i, code); interrupt_acknowledge(i); interrupt_count[i]++; }