首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助,在FPGA niosII设计中关于ADC0809的疑难

求助,在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编辑过]

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

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

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

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

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

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

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

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

在交流中前进,共同实现nios的应用。
不好意思,发错了,你的时序看起来没有什么问题,你的时序的宽度估计也够,建议你用逻辑分析仪看看发的信号和eoc信号、output enable信号是否正确。
在交流中前进,共同实现nios的应用。

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

求助,在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 是什么意思啊? 是怎么来的?接到哪的啊??

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

已经回答。

在交流中前进,共同实现nios的应用。
返回列表