刚入手DSP,最近要测量一个衰减信号,只用TMS28335上的ADC,速率不够,现在接触到AD9226,但配置不成功。
商家给的是32和FPGA 的例程,我根据例程改编,配置AD9226只需要时钟和打开GPIO口就行,但是一直呈乱码状态。
不知道是GPIO口配置问题,还是时钟问题。请求大家的帮助,或者有别的DSP高速adc推荐也可以。
衰减信号,是一个经降频后的1M信号,大概能维持20us,应该需要较高速的采样率。
我的配置代码如下
#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范围设置为:0~200,其中Y轴0对应5V,Y轴200对应-5V
Draw_data[i] = (uint16_t)(((double)adcx/4095*10000)/50);
}
```