首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | 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,不知道是哪里出了错,请大家指点,谢谢

你可以到altera nios软核嵌入式处理器板块去问一下,在那里你可能能得到更多的解决方法。
美梦成真-->噩梦降临!
qw

哦,谢谢^^

返回列表