Board logo

标题: 求教一个与NIOSII内部函数有关的问题 [打印本页]

作者: wuym    时间: 2007-7-28 23:12     标题: 求教一个与NIOSII内部函数有关的问题

请高手指点一下这个程序,这是本人看的一个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);   --??
}


作者: caopengly    时间: 2007-7-29 19:04

“还有在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);  --??(低三位开中断,估计跟三个输入按键有关?)是的,开中断


作者: caopengly    时间: 2007-7-29 19:06

你下载一下本版的复旦的nios教程,看一下。

再看看你不知道意思的程序,里面的注释都说得很清楚。


作者: kzw    时间: 2007-8-1 17:28

isr的编号是指的终端的编号,这和一般的处理器一样的,中断都是有编号的。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0