请高手指点一下这个程序,这是本人看的一个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); --??
}
“还有在SOPC BUILDER里除了有自动分配的BASE基地址外,最右边还有一个ISR的纵栏在一些管脚后面标着1,2,3,4...等几个数字是什么意思,是中断管脚吗,具体这些是怎么定义的?下面程序注释里面带问号的是不明白的地方。谢谢!”就是中断优先级。0最高
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); --??(低三位开中断,估计跟三个输入按键有关?)是的,开中断
你下载一下本版的复旦的nios教程,看一下。
再看看你不知道意思的程序,里面的注释都说得很清楚。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |