帮我看看下面这段程序怎么不能注册中断啊 #ifdef UART_BASE void uart_handle(void *context,alt_u32 interrupt) //中断服务程序 执行后点亮LED1 { IOWR_ALTERA_AVALON_PIO_DATA(LED_IRQ_BASE, 0x0); } void uart_init() //UART初始化程序,允许发送中断 { int divisor; control = 0x0040; IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, control); divisor = (int)(50000000/9600+0.5); IOWR_ALTERA_AVALON_UART_DIVISOR(UART_BASE, divisor);
if (alt_irq_register(UART_IRQ, NULL, uart_handle)==0) //中断注册成功点亮LED2 { IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x0); } } #endif int alt_main (void) { alt_irq_init(ALT_IRQ_BASE); alt_sys_init(); IOWR_ALTERA_AVALON_PIO_DATA(LED_IRQ_BASE, 0x1); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x1);
uart_init(); IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x10); while(1) { } ; return 0; }
我的板子上只设计了外部FLASH,片内RAM最大只能设计2K,所以采用重载alt_main函数减少代码量.没有调用 alt_irq_init(ALT_IRQ_BASE); alt_sys_init();这两句的时候能够注册成功,调用了之后反而不能注册了.
[em06] |