请高手指点一下这个程序,这是本人看的一个LCD液晶显示的主程序,是用的PIO时序写的,下面调用的子程序都在“LCD12864”的底层驱动函数内定义好了(程序中我做了注释),只用了三个按键显示不同的内容,显示也正常。下面WHILE(1)死循环是让板子上的两个灯不停的交替明暗。我想请教那几个与NIOSII内部函数相关的那几句话的意思( IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_IRQ, 0x0); IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY_BASE,0x00); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE,0x07); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE,0x0); IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY_BASE,0x00); int si=IORD_ALTERA_AVALON_PIO_DATA(PIO_KEY_BASE); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE,0x07);)还有在SOPC BUILDER里除了有自动分配的BASE基地址外,最右边还有一个ISR的纵栏在一些管脚后面标着1,2,3,4...等几个数字是什么意思,是中断管脚吗,具体这些是怎么定义的?下面程序注释里面带问号的是不明白的地方。谢谢! #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "sys/alt_irq.h" #include "LCD12864.h" void butto_ISR (); --??(先声明,为了下面函数调用?)我是这么认为但搞不清楚 alt_u8 v=0x01; --给交替亮的两个灯定义的参数 int main (void) { volatile int i; LcdInit(); --调用初始化程序 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_IRQ, 0x0); --??(清边沿触发器?)我是这么认为但搞不清楚 IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY_BASE,0x00); --??(清方向寄存器?) IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE,0x07); --??(低三位开中断,估计跟三个输入按键有关?) //alt_irq_register(PIO_KEY_IRQ,0,butto_ISR); while (1) --灯不停闪烁的死循环 { for(i=0;i<100000;i++); *(unsigned int *)PIO_LED_BASE =~v; v=~v; alt_irq_register(PIO_KEY_IRQ,0,butto_ISR); --?? } return 0; } void butto_ISR (void * context,alt_u32 id) { IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE,0x0); --?? IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY_BASE,0x00); --?? int si=IORD_ALTERA_AVALON_PIO_DATA(PIO_KEY_BASE); --?? switch(si) --一个按键显示的内容 { case 3 :{ LcdClear(); --LCD清屏函数 Dishanzi(); --显示汉字内容子函数 DisWEB(); --显示字符内容子函数 } break; case 5:{ --一个按键显示的内容 LcdClear(); DisWel(0); --显示字符内容0、1表示显示在LCD的左、右半屏,次四句话为两个显示内容函数 DisCtrl(0); DisWel(1); DisCtrl(1); *(unsigned int *)PIO_LED_BASE =~v; }break; case 6:{ --一个按键显示内容 LcdClear(); Dispsdata(); --显示具体内容函数 *(unsigned int *)PIO_LED_BASE =v; }; lcddelay(5); --延时5个周期函数 } IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0); --?? IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE,0x07); --?? }
|