B i ? .
2022-06-29 22:34
采纳率: 0%
浏览 13

AD9226运用在TMS28335上的配置程序

刚入手DSP,最近要测量一个衰减信号,只用TMS28335上的ADC,速率不够,现在接触到AD9226,但配置不成功。
商家给的是32和FPGA 的例程,我根据例程改编,配置AD9226只需要时钟和打开GPIO口就行,但是一直呈乱码状态。
不知道是GPIO口配置问题,还是时钟问题。请求大家的帮助,或者有别的DSP高速adc推荐也可以。

衰减信号,是一个经降频后的1M信号,大概能维持20us,应该需要较高速的采样率。

img

我的配置代码如下

#include "ad9226.h"

void AD9926_Init(void)
{
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK=1;


    GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;//AD9226_CLOCK
    GpioCtrlRegs.GPAMUX1.bit.GPIO13=0;//AD9226_D11
    GpioCtrlRegs.GPAMUX1.bit.GPIO14=0;//AD9226_D10
    GpioCtrlRegs.GPAMUX1.bit.GPIO15=0;//AD9226_D9
    GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;//AD9226_D8
    GpioCtrlRegs.GPAMUX2.bit.GPIO17=0;//AD9226_D7
    GpioCtrlRegs.GPAMUX2.bit.GPIO18=0;//AD9226_D6
    GpioCtrlRegs.GPAMUX2.bit.GPIO19=0;//AD9226_D5
    GpioCtrlRegs.GPAMUX2.bit.GPIO20=0;//AD9226_D4
    GpioCtrlRegs.GPAMUX2.bit.GPIO21=0;//AD9226_D3
    GpioCtrlRegs.GPAMUX2.bit.GPIO22=0;//AD9226_D2
    GpioCtrlRegs.GPAMUX2.bit.GPIO23=0;//AD9226_D1
    GpioCtrlRegs.GPAMUX2.bit.GPIO24=0;//AD9226_D0

    GpioCtrlRegs.GPADIR.bit.GPIO12=1;
    GpioCtrlRegs.GPADIR.bit.GPIO13=0;
    GpioCtrlRegs.GPADIR.bit.GPIO14=0;
    GpioCtrlRegs.GPADIR.bit.GPIO15=0;
    GpioCtrlRegs.GPADIR.bit.GPIO16=0;
    GpioCtrlRegs.GPADIR.bit.GPIO17=0;
    GpioCtrlRegs.GPADIR.bit.GPIO18=0;
    GpioCtrlRegs.GPADIR.bit.GPIO19=0;
    GpioCtrlRegs.GPADIR.bit.GPIO20=0;
    GpioCtrlRegs.GPADIR.bit.GPIO21=0;
    GpioCtrlRegs.GPADIR.bit.GPIO22=0;
    GpioCtrlRegs.GPADIR.bit.GPIO23=0;
    GpioCtrlRegs.GPADIR.bit.GPIO24=1;

    GpioCtrlRegs.GPAPUD.bit.GPIO12=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO13=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO14=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO15=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO16=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO17=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO18=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO19=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO20=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO21=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO22=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO23=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO24=1;

    EDIS;

}

ADC输出如下

```c
        for(k=0; k<1024; k++)
        {
            AD9226_CLK_L;
            AdcBuf[k++] = ((GpioDataRegs.GPADAT.all)>>13)&0X0FFF;
            AD9226_CLK_H;
        }

32例程如下

#include <stm32f10x.h>
#include "ad9226.h"

//-----------------------------------------------------------------
// void AD9226_Init(void)
//-----------------------------------------------------------------
// 
// 函数功能: AD9226初始化
// 入口参数: 无 
// 返 回 值: 无
// 注意事项: 无
//
//-----------------------------------------------------------------
void AD9226_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  // 使能IO口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | 
                                                                    GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | 
                                                                    GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

}

ADC输出语句

for(i=0;i<Draw_Number;i++)
    {
        // AD9226_Data[300]得到的是GPIOB整个组的数据,AD9226是12位的,只需要GPIOB的低十二位
        adcx = data[i]&0x0FFF;
        // 模拟量与数字量的转换:A = (4095 - D)/4095*10000-5000,其中A为模拟量,D为数字量
        // A的范围为:±5V,为了让波形显示在Y轴的前200,将A范围设置为:0200,其中Y轴0对应5V,Y轴200对应-5V
        Draw_data[i] = (uint16_t)(((double)adcx/4095*10000)/50);
    }

```

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题