#include <stdio.h> #include "system.h" #include "VGA.h" #include "alt_types.h" #include "altera_avalon_pio_regs.h" #include "altera_avalon_timer_regs.h" #include <sys/alt_irq.h> static volatile alt_u8 value ; static void timer_isr(void* base , alt_u32 id) { IOWR_ALTERA_AVALON_TIMER_STATUS((alt_u32*) base , 0); WriteRgb(VGA_IP_BASE,value); } //中断服务子程序,把value写到VGA_IP上 void init_timer(void* base) { IOWR_ALTERA_AVALON_TIMER_CONTROL((alt_u32*) base, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK | ALTERA_AVALON_TIMER_CONTROL_CONT_MSK | ALTERA_AVALON_TIMER_CONTROL_START_MSK ); } int main(void) { static alt_u32 ct; init_timer((alt_u32*)TIMER_BASE); alt_irq_register(TIMER_IRQ , (alt_u32*)TIMER_BASE , timer_isr); /*对于直接使用XX_BASE的函数,我们无需对其进行地址转换,但是这个XX_BASE正好是我们自己定 的函数的参数,那么要对他们进行强制地址转换*/ while(1) { if(ct!=50000) { ct++; } else { ct=0; } value=IORD_ALTERA_AVALON_PIO_DATA(PIO_IN_BASE); } return 0; } 在ISS调试中本程序没有问题,但是在硬件调试中在进入定时器中断后就跳不出来了,请问高手这是为什么,应该如何解决 |