/*! Initialize device (and call its initializer, if set) */ int k_device_init ( kdevice_t *kdev, int flags, void *params, void *callback ) { int retval = 0; ASSERT ( kdev ); if ( flags ) kdev->dev.flags = flags; if ( params ) kdev->dev.params = params; if ( kdev->dev.init ) retval = kdev->dev.init ( flags, params, &kdev->dev ); if ( !retval && kdev->dev.irq_handler ) { (void) arch_register_interrupt_handler ( kdev->dev.irq_num, kdev->dev.irq_handler, &kdev->dev ); arch_irq_enable ( kdev->dev.irq_num ); } if ( callback ) kdev->dev.callback = callback; return retval; }
/*! Init console with interrupt enable */ void uart0_echo_test_start () { volatile unsigned int *uart_imsc = (unsigned int *) UART0_IMSC; /* enable RXIM interrupt (interrupt on data receive) */ *uart_imsc = 1 << 4; /* register UART interrupt */ arch_register_interrupt_handler ( IRQ_OFFSET + UART0IRQL, uart_echo, NULL ); /* enable UART interrupt in VIC */ arch_irq_enable ( IRQ_OFFSET + UART0IRQL ); }