Board logo

标题: 求助,在FPGA niosII设计中关于ADC0809的疑难 [打印本页]

作者: whitesky_mm    时间: 2007-3-8 20:27     标题: 求助,在FPGA niosII设计中关于ADC0809的疑难

大家好,请问谁在做实验时用过ADC0809呀?怎么我按照adc0809的时序要求设置了各控制信号,但转换完成信号eoc不伦在任何时候都是"0",不会变成"1",这是哪里出了错呢?

程序如下:

#include "alt_types.h"
#include <stdio.h>
#include <unistd.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"

/* adc0809 ad_a select*/
void ad_a_select(int ad8switch)  //选择8路模拟信号中的一路
{
    switch(ad8switch)
    {
      case 0x80: //IN7
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x7);
           break;
      case 0x40: //IN6
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x6);
           break;
      case 0x20: //IN5
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x5);
           break;
      case 0x10: //IN4
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x4);
           break;
      case 0x08: //IN3
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x3);
           break;
      case 0x04: //IN2
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x2);
           break;
      case 0x02: //IN1
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x1);
           break;
      case 0x01: //IN0
           IOWR_ALTERA_AVALON_PIO_DATA(AD_A_PIO_BASE,0x0);
           break;
      default:  //warning
           printf("======warning======\n");
           break;
    }
}


/* start adc0809*/

void ad_start(void)   //adc0809转换程序
{
  int ad8s;
  
  //test the value of EOC: the value must be "1"
  printf("eoc_un ?=1: %d\n",IORD_ALTERA_AVALON_PIO_DATA(AD_EOC_PIO_BASE));
 
  //set ad_start=0
  IOWR_ALTERA_AVALON_PIO_DATA(AD_START_PIO_BASE,0);
  //set ad_ale=0
  IOWR_ALTERA_AVALON_PIO_DATA(AD_ALE_PIO_BASE,0);
  //set ad_oe=0
  IOWR_ALTERA_AVALON_PIO_DATA(AD_OE_PIO_BASE,0);
 
  //test the value of EOC: the value must be "1"
  printf("eoc_in ?=1: %d\n",IORD_ALTERA_AVALON_PIO_DATA(AD_EOC_PIO_BASE));
 
  //get the value of AD_8SWITCH_PIO
  ad8s = IORD_ALTERA_AVALON_PIO_DATA(AD_8SWITCH_PIO_BASE);
 
  //set IN0~IN7
  ad_a_select(ad8s,flag2);
   
  //set ad_ale=1
  IOWR_ALTERA_AVALON_PIO_DATA(AD_ALE_PIO_BASE,1);  //save the address into the flip-latch of address
  //set ad_ale=0
  IOWR_ALTERA_AVALON_PIO_DATA(AD_ALE_PIO_BASE,0); 
  
  //set ad_start=1
  IOWR_ALTERA_AVALON_PIO_DATA(AD_START_PIO_BASE,1); //reset the register
  
  //set ad_start=0 
  IOWR_ALTERA_AVALON_PIO_DATA(AD_START_PIO_BASE,0); //start AtoD
  
  //test the value of EOC: the value must be "0"
  printf("eoc_t ?=0: %d\n",IORD_ALTERA_AVALON_PIO_DATA(AD_EOC_PIO_BASE));
  
  while((IORD_ALTERA_AVALON_PIO_DATA(AD_EOC_PIO_BASE))!= 1)
  // whether the conversion of ADC is over:1 is over and the data have been saved into the flip-latch
  {
    printf("test eoc_f ?=1: %d\n",IORD_ALTERA_AVALON_PIO_DATA(AD_EOC_PIO_BASE));
  }
  
  //set ad_oe=1

  IOWR_ALTERA_AVALON_PIO_DATA(AD_OE_PIO_BASE,1); //put the data to the dataBus
  
  printf("ad_data is : %d\n",IORD_ALTERA_AVALON_PIO_DATA(AD_DATA_PIO_BASE));
  printf("\n=============AtoD is successful!=================\n");
}

int main(void)
{
  while(1)
  {
    ad_start();
  }
}

但是调试过程中eoc总是为0,不知道是哪里出了错,请大家指点,谢谢

[此贴子已经被作者于2007-3-8 20:38:13编辑过]


作者: caopengly    时间: 2007-3-8 23:06

对0809的时序操作比较简单,可以在0809的datasheet上找到。

你的程序的输出时序和你想要的时序有没有不同, 你可以单步调试,然后通过FPGA的led灯或其他电路作为你的关心的时序信号指示灯来调试。看看输出的时序和你想要的时序有什么不同,然后看看是你nios的设置或设计的问题还是别的其它问题。

[此贴子已经被作者于2007-3-8 23:06:56编辑过]


作者: caopengly    时间: 2007-3-8 23:10

这是调试的问题,你的调试方法很重要。

软件谁都会写,除了问题,找到问题的方法很重要,比问题本身重要的多。


作者: kzw    时间: 2007-3-9 22:12

你用vhdl编写的应该是从设备,一般不可能对系统生成的寄存器进行访问,除非你做一个dma设备可以访问某些地址。


作者: kzw    时间: 2007-3-9 22:21

不好意思,发错了,你的时序看起来没有什么问题,你的时序的宽度估计也够,建议你用逻辑分析仪看看发的信号和eoc信号、output enable信号是否正确。
作者: whitesky_mm    时间: 2007-3-11 13:22

谢谢前辈们的指点,我明天再去实验室试试,希望可以找到问题的所在^^


作者: wopsn    时间: 2007-5-14 11:50     标题: 求助,在FPGA niosII设计中关于ADC0809的疑难

程序中

printf("eoc_in ?=1: %d\n",IORD_ALTERA_AVALON_PIO_DATA(AD_EOC_PIO_BASE);请问这句有什么意义?做什么用的啊?试否是做测试?

//set IN0~IN7
  ad_a_select(ad8s,flag2);

这是是定义了一个吗?怎么还有一个啊?


  //get the value of AD_8SWITCH_PIO
  ad8s = IORD_ALTERA_AVALON_PIO_DATA(AD_8SWITCH_PIO_BASE);中的AD_8SWITCH_PIO_BASE 是什么意思啊? 是怎么来的?接到哪的啊??

希望斑竹和各位高人解释下,还有问这个问题的姐姐能告诉我一下,不胜感激~!!!!


作者: kzw    时间: 2007-5-14 23:30

已经回答。






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