主题中讨论的其他器件:SW-DRL
工具/软件:Code Composer Studio
大家好、
目前、我遇到 ADC 输入问题、我尝试通过由计时器触发的 PE3获取输入。
虽然我无法触发 中断、但我构建了代码、没有任何错误。 附加图像中还会出现一些问题。
任何建议都得到批准。
#include
#include
include "inc/hw_ints.h"
#include "driverlib/adc.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
//#include "driverlib/float.h"
#include "driverlib/gpio.h"
;#include "driverlib.trat_unchem.ide"#t.idr32";"driverlib_unt #t/trat_uni20at_pru.ide"#include "nat_tru.tru.ide"#include "nat_un.ide";#t/tru.tru.tru.ultru.ide"#include "u.tru.ide"#t/u.ide"#t.idt.idr.idr.idt.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr
uint32_t ADC0Value[1];
#ifndef M_PI
#define M_PI 3.141592658979323846264
#endif
InitConsole
(void)
{
//UARTprintf ("控制台启动");
//
//启用用于 UART0引脚的 GPIO 端口 A。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
//
//为端口 A0和 A1上的 UART0功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
//
//启用 UART0以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
//
//使用内部16MHz 振荡器作为 UART 时钟源。
//
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
//
//为这些引脚选择替代(UART)功能。
//
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
//初始化控制台 I/O 的 UART
//
UARTStdioConfig (0、115200、16000000);
UARTprintf ("控制台结束\n");
}
void
InitADC0 (void)
{
//
//必须启用 ADC0外设才能使用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
//
//对于此示例、ADC0与端口 E7上的 AIN0一起使用。
//您使用的实际端口和引脚可能有所不同,请参阅
//数据表以了解更多信息。 需要启用 GPIO 端口 E
//因此可以使用这些引脚。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
//
//为这些引脚选择模拟 ADC 功能。
//请查阅数据表以查看每个引脚分配的函数。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
//
//使用处理器信号触发器启用采样序列3。 序列3
//将在处理器发送信号启动时执行单次采样
//转换。 每个 ADC 模块有4个可编程序列、序列0
//至序列3。 此示例任意使用序列3。
//
ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
//
//在序列3上配置步骤0。 对中的通道0 (ADC_CTL_CH0)进行采样
//单端模式(默认)并配置中断标志
//(ADC_CTL_IE)将在采样完成时置1。 告诉 ADC 逻辑
//这是序列3上的最后一次转换(ADC_CTL_END)。 序列
// 3只有一个可编程步骤。 序列1和2有4个步骤、和
//序列0有8个可编程步骤。 因为我们只做一个
//使用序列3进行转换,我们将仅配置步骤0。 了解详情
//有关 ADC 序列和步骤的信息、请参考数据表。
//
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE |
ADC_CTL_END);
//
//由于采样序列3现在已配置,因此必须将其启用。
//
ADCSequenceEnable (ADC0_BASE、3);
//
//清除中断状态标志。 这样做是为了确保
//中断标志在我们进行采样之前被清除。
//
ADCIntClear (ADC0_BASE、3);
UARTprintf ("ADC0 END\n");
}
void
InitGPIO_F (void)
{
//
//启用用于板载 LED 的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
//
//为 LED 启用 GPIO 引脚(PF1和 PF2)。
//
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);
UARTprintf ("GPIOEnabled");
}
void
InitTimer (void)
{
//启用此示例使用的外设。
//
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
//SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
//
//启用处理器中断。
//
IntMasterEnable();
//tickk = SysCtlClockGet ();
//
//配置两个32位周期定时器。
//
TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
//rom_TimerConfigure (Timer1_base、timer_CFG_PERIODICRACASE);
TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ());
//rom_TimerLoadSet (Timer1_base、timer_A、ROM_SysCtlClockGet ()/ 2);
//
//设置计时器超时的中断。
//
IntEnable (INT_TIMER0A);
//rom_IntEnable (INT_TIMER1A);
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
//rom_TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);
//
//启用计时器。
//
TimerEnable (TIMER0_BASE、TIMER_A);
//rom_TimerEnable (Timer1_base、timer_A);
UARTprintf ("TimerEnabled\n");
}
//*********
//
//第一个定时器中断的中断处理程序。
////
*****************
void
Timer0IntHandler (void)
{
UARTprintf ("定时器启动\n");
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
toggler ^= GPIO_PIN_2;
UARTprintf ("Toggler =%3D\n"、toggler);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、触发器);
UARTprintf ("灯泡\n");
ADCIntClear (ADC0_BASE、3);
UARTprintf ("ADCClear\n");
ADCProcessorTrigger (ADC0_BASE、3);
UARTprintf ("ProTrig\n");
while (!ADCIntStatus (ADC0_BASE、3、false))
{
UARTprintf ("g\r");
}
ADCIntClear (ADC0_BASE、3);
UARTprintf ("ADCClear\n");
ADCSequenceDataGet (ADC0_BASE、3、ADC0Value);
UARTprintf ("GetData\n");
//UARTprintf ("%3D\n"、ADC0Value[0]);
UARTprintf ("%3D\n"、ADC0Value[0]);
if (prev-ADC0Value[0]>strt)
{
if (stat=0)
{
if (ResultIndex<900)
{
aquire[ResultIndex]= ADC0Value[0];
ResultIndex+=1;
}
其他
{
STAT = 1;
}
}
其他
{
上一个= ADC0Value[0];
}
IntMasterDisable();
IntMasterEnable();
}
int main (void)
{
//FPULazyStackingEnable();
//FPUEnable();
//SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
//SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
//
//初始化 UART 和写入状态。
//
InitConsole();
//
//初始化 ADC0。
//
InitADC0();
InitGPIO_F ();
//
//初始化用于触发的计时器。
//
InitTimer();
while (1)
{
}
}