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);
}
}