您好!
我想在一秒(1ksps)内从 ADC 通道读取1024个样本、我正在使用 tm4c129电路板、我已经完成了以下代码、但我在一秒内只获得75个样本、因此有人可以帮助我获得该输出、 我最近开始使用这个板,我在这里附上了代码。
#include
#include
#include
#include "inc/hw_memmap.h"
#include "driverlib/adc.h"
#include "driverlib/adc.c"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/uart.c"
#include "utils/uartstdio.h"
#include "driverlib/hibernate.h"
uint32_t g_ui32SysClock;
//
//
//! 添加到组 ADC_Examples_list
//!
单端 ADC (single_ended)
//!
//! 此示例展示了如何将 ADC0设置为单端输入并采用
//! AIN0/PE7上的单个采样。
//!
//! 此示例使用以下外设和 I/O 信号。 您必须执行的操作
//! 查看这些内容并根据您自己的董事会的需要进行更改:
//! - ADC0外设
//! - GPIO 端口 E 外设(用于 AIN0引脚)
//! AIN0 - PE7
//!
//! 以下 UART 信号仅配置为显示控制台
//! 消息。 操作时不需要这些
//! ADC。
//! UART0外设
//! - GPIO 端口 A 外设(用于 UART0引脚)
//! - UART0RX - PA0
//! - UART0TX - PA1
//!
//! 此示例使用以下中断处理程序。 来使用该示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
//! 矢量表。
//! -无。
//
//
//
//
//此函数将 UART0设置为用于控制台显示信息
//因为示例正在运行。
//
//
无效
配置 UART0 (空)
{
//
//启用 UART 使用的 GPIO 外设。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
//
//启用 UART0
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
//
//为 UART 模式配置 GPIO 引脚。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
//初始化控制台 I/O 的 UART
//
UARTStdioConfig (0、9600、g_ui32SysClock);
}
//
//
//为单端输入和单个采样配置 ADC0。 一次
//样本就绪,将设置中断标志。 使用轮询方法、
//数据将被读取,然后通过 UART0显示在控制台上。
//
//
内部
main (空)
{
//0
//该数组用于存储从 ADC FIFO 读取的数据。 它
//必须与正在使用的序列发生器的 FIFO 一样大。 此示例
//使用 FIFO 深度为1的序列3。 如果是另一个序列
//与更深的 FIFO 一起使用,则必须更改数组大小。
//
uint32_t pui32ADC0Value[1];
//
//使用 PLL 将时钟设置为以20MHz (200MHz/10)运行。 时间
//使用 ADC,您必须使用 PLL 或提供16 MHz 时钟
//源。
// TODO:必须更改 SYSCTL_XTAL_VALUE 以匹配的值
板上的//晶体。
//
G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//
//设置用于显示消息的串行控制台。 这是
//仅用于此示例程序,ADC 操作不需要。
//
配置 UART0();
//
//在控制台上显示设置。
//
//
//必须启用 ADC0外设才能使用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0 | ADC_CTL_IE |
ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、0);
ADCIntClear (ADC0_BASE、0);
SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
HibernateEnableExpClk (SYSCTL_OSC_EXT32);
HibernateClockConfig (HIBERNATE_OSC_HIGRHIVE);
HibernateRTCDisable();
HibernateRTCSet (0);//此代码用于时间戳
HibernateRTCEnable();
unsigned long long sec = HibernateRTCGet ();
unsigned int subsec = HibernateRTCSSGet ();
while (sec<1)//我想将样本采集到最长1秒的时间
{
ADCProcessorTrigger (ADC0_BASE、0);
while (!ADCIntStatus (ADC0_BASE、0、false))
{
}
ADCIntClear (ADC0_BASE、0);
ADCSequenceDataGet (ADC0_BASE、0、pui32ADC0Value);
SEC = HibernateRTCGet ();
subsec = HibernateRTCSSGet ();
UARTprintf ("AIN0 =%4D\n"、pui32ADC0Value[0]);
}
while (1);
}
提前感谢。