Thread 中讨论的其他器件: EK-TM4C123GXL
工具/软件:Code Composer Studio
大家好! 我尝试为 Tiva 计算 ADC、但我不熟悉 TivaWare (我实际上只熟悉 MSP430)。
无论如何、现在我的程序卡在等待 ADC 转换完成的 while 循环中(即 while (!ADCIntStatus (ADC0_BASE、0、false){})。 它肯定会卡在那里、因为我在 ADC 操作前后切换蓝色 LED、但它实际上绝不会第二次切换。
此外、如果您有时间、请也查看代码的 UART 部分。 这是优先级#2、但也不起作用。
非常感谢!!!
请查看我的以下代码、了解我要忽略的内容:
#include #include #include #include "driverlib/adc.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h"#include "hw_intrinc/包含"#driver.h"#driverintrinc/包含"hw_intrinc/包含"#driverlib.h"#driverintrinc/包含"hw_intrinc/包含"#driverlib.h"#driverintrinc/包含"hw_intrinc/包含#def"#driverintrinc/包含"hw_intrintrinc/包含#def"#driverlib.hw_hw_intrintrintrintrinc/包含#def"#def"#def"#include"#def"hw_intrinc.h"#def"hw_intrinc # // //配置 ADC 及其引脚。 //// ***************** void ConfigureADC (void) { //---- ADC 设置--- ///---------------------------- // //启用外设 ADC0并复位以应用 // SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralReset (SYSCTL_Periph_ADC0); // //禁用 ADC0序列发生器0并重新配置 ADC0序列发生器 // ADCSequenceDisable (ADC0_BASE、0); ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_PROCESSOR、0); ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_TS /* AIN0*/| ADC_CTL_IE | ADC_CTL_END); // //启用 GPIO 端口 E 并将引脚3设置为 ADC 类型 // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3); // //为 ADC0 SS0启用中断 // ADCIntEnable (ADC0_BASE、0); } //********* // //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。 //// ***************** void ConfigureUART (void) { //---- UART 设置--- ///---------------------------- // //启用 GPIO 和 UART 1外设 // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); SysCtlDelay(3); SysCtlPeripheralEnable (SYSCTL_Periph_UART1); SysCtlDelay(3); // //为 UART 模式配置 GPIO 引脚 // GPIOPinConfigure (GPIO_PB1_U1TX); GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_1); // //使用内部16MHz 振荡器作为 UART 时钟源。 // UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC); // //初始化 UART (端口、波特率、时钟源) // UARTStdioConfig (0、9600、16000000); } int main (void){ uint32_t 结果; 易失性字符电压; // //时钟设置为40MHz // SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2); ConfigureADC(); ConfigureUART(); IntMasterEnable(); UARTprintf ("Hello、world!\n"); while (1) { // //打开蓝色 LED。 // GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2); // //延迟一位。 // SysCtlDelay (SysCtlClockGet ()/ 10 / 3); ///-------- ADC -------------- // //请求 ADC 转换 // ADCProcessorTrigger (ADC0_BASE、0); // //清除 ADC0序列发生器3的中断标志 // ADCIntClear (ADC0_BASE、0); // //等待转换完成 // while (!ADCIntStatus (ADC0_BASE、0、false)){}//这是程序冻结的位置!!! //---- 处理数据--- // //读取数据并转换 // ADCSequenceDataGet (ADC0_BASE、0、结果); 电压=结果*0.000805664; // //关闭蓝色 LED。 // GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0); // //延迟一位。 // SysCtlDelay (SysCtlClockGet ()/ 10 / 3); } }