This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C123GH6PM:定时器触发问题

Guru**** 2443910 points
Other Parts Discussed in Thread: SW-DRL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/630360/ccs-tm4c123gh6pm-problem-with-timer-triggering

器件型号:TM4C123GH6PM
主题中讨论的其他器件: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)
{

}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Rohan Chahwan"]我构建了代码,没有任何错误,但我无法触发 中断

    [引用用户="Rohan Chahwan"]

    ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSORT、0);  您可以直接从计时器触发 ADC!   (改用参数"ADC_TRIGGER_TIMER" )

    [引用用户="Rohan Chahwan"]

    Timer0IntHandler (空)

    UARTprintf ("定时器启动\n");

    TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);

    toggler ^= GPIO_PIN_2;

    ADCProcessorTrigger (ADC0_BASE、3);  "ADCProcessorTrigger()"  这证明了这是间接的和多余的!  (请参阅上述直接方法)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //
    // timers.c -计时器示例。
    //
    //版权所有(c) 2012-2016德州仪器(TI)公司。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)提供此软件仅供
    和//仅供 TI 的微控制器产品使用。 软件归
    // TI 和/或其供应商所有,并受适用的版权
    //法律保护。 您不能将此软件与"病毒"开源
    //软件组合在一起以形成更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //对于
    
    本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
    //情况下、TI 不对任何
    原因造成的特殊、意外或必然//损害负责。
    //
    //这是 EK-TM4C123GXL 固件包版本2.1.3.156的一部分。
    ////
    *****************
    
    #include 
    #include 
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "driverlib/adc.h"
    #include "driverlib/fpu.h"
    
    #include "driverlib/driverlib"#include "driverlib.mdio.h"#include "driverlib"#driverlib/driver.h"#include"#driverlib/driverlib.driverlib.driverlib#include "driver.h"#include "driverlib"#driverlib.driverlib"#include "driverlib.driver.h"#include "driverlib.trat.h
    
    
    
    
    
    
    
    
    //
    //! \addtogroup example_list
    //! 

    计时器(计时器)

    //! //! 此示例应用演示了如何使用计时器来生成 //! 周期性中断。 一个计时器设置为每秒中断一次和 //! 另一个中断每秒中断两次;每个中断处理程序将切换 //! 显示屏上有自己的指示灯。 //! //! UART0、连接到虚拟串行端口、运行速度为115、200、8-N-1、 //! 用于显示来自此应用程序的消息。 //// ***************** // // //包含 UART 上显示的中断指示符当前值的标志//。 //// ***************** uint32_t g_ui32Flags; float Aquire[1000]; uint32_t ResultIndex = 0; uint32_t stat; float prev = 0; float strt = 2000; uint32_t ADC0Value[1]; //********* // //启用 ADC0的功能 // //********* 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_TIMER、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"); } //********* // //启用 LED 的功能。 //// ***************** void InitGPIO_F (void) { // //启用用于板载 LED 的 GPIO 端口。 // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); // //为 LED 启用 GPIO 引脚(PF1和 PF2)。 // GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2); UARTprintf ("GPIOEnabled"); } void InitTimer0 (void) { // //启用此示例使用的外设。 // SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); // //启用处理器中断。 // IntMasterEnable(); // //配置两个32位周期定时器。 // TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE); TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()); //启用触发 TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); // //设置计时器超时的中断。 // //IntEnable (INT_TIMER0A); //TimerIntEnable (TIMER0_BASE、TIMER_TIMA_TIMEOUT); // //启用计时器。 // TimerEnable (TIMER0_BASE、TIMER_A); UARTprintf ("TimerEnabled\n"); } //********* // //第一个定时器中断的中断处理程序。 //// ***************** void Timer0IntHandler (void) { UARTprintf ("TimerHandlerStart\n"); // //清除计时器中断。 // TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT); // //切换第一个计时器的标志。 // HWREGBITW (&g_ui32Flags、0)^= 1; // //使用标志切换此计时器的 LED // GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、g_ui32Flags << 1); 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(); UARTprintf ("TimerHandlerEnd\n"); } //********* // //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。 //// ***************** void ConfigureUART (void) { // //启用 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); // //使用内部16MHz 振荡器作为 UART 时钟源。 // UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC); // //初始化控制台 I/O 的 UART // UARTStdioConfig (0、115200、16000000); } //********* // //此示例应用演示了如何使用计时器生成 //周期性中断。 //// ***************** int main (void) { // //为中断处理程序启用怠惰堆栈。 这允许使用浮点 //在中断处理程序中使用的指令,但代价是 //额外的堆栈用法。 // //FPULazyStackingEnable(); // //将时钟设置为直接从晶体运行。 // SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN); // //初始化 UART 和写入状态。 // ConfigureUART(); InitADC0(); InitGPIO_F (); InitTimer0(); //UARTprintf ("\033[2JTimers 示例\n"); //UARTprintf ("t1:0 t2:0"); // //在计时器运行时永久循环。 // while (1) { } }

    上面给出的是我编译的代码。 它在构建中没有错误。 但无法执行 ISR。

     

    您好吗?请告诉您如何正确使用"ADC_TRIGGER_TIMER"?

    我无法执行此操作、也无法找到有关此操作的有用信息...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的朋友-您的代码远不符合"kiss"标准-不是这样吗?   (有如此多的途径-有如此多的"机会"来"出错的事情"-或"意外/不想要的后果!")

    无论是公司还是我都不会"有这么多的变量-那么多的路径-发挥作用!"   经验证明、由于"意外互动"、这种"丰富"往往会"掩盖问题"、甚至可能造成新问题!   没有一个好的-没有一个是"为了你的利益"。

    您会具体询问参数"ADC_TRIGGER_TIMER"-但不符合您的标准"kiss"-我担心我们的努力(不必要)会延长-学习将会受到阻碍。  (当我们从"火到火"时"跳"。)

    当我正确使用上述内容时-您不能、"尽量使用"kiss"、以便我们可以"测试/验证"计时器触发的 ADC 数据读取?"

    UART 打印件和计时器标志的"混合"(仅举两个简单的名称)增加了复杂性-"让我们走在路!"   

    请"将您的代码条带至其基本内容"、其中应包含单个 ADC 转换和单个计时器、后者(单独且直接)会触发该转换。   

    如证明的那样-这里和早期-复杂性"不能证明你的朋友!"   "kiss"-一个小而简单的步骤-可测量、然后(始终)"测试/验证"-为您的成功提供最快、最直接的途径...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  

    我是 CCS 和嵌入式 C 编码的初学者... 我尝试输入 UART 和 GPIOF 来检查代码是否正常运行(通过 LED 闪烁和 UART 消息... 希望查看错误发生的位置以及程序停止的位置)。 无论如何... 接下来,我减少了我的代码中的许多垃圾,并提出了以下内容:

    //
    //
    // timers.c -计时器示例。
    //
    //版权所有(c) 2012-2016德州仪器(TI)公司。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)提供此软件仅供
    和//仅供 TI 的微控制器产品使用。 软件归
    // TI 和/或其供应商所有,并受适用的版权
    //法律保护。 您不能将此软件与"病毒"开源
    //软件组合在一起以形成更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //对于
    
    本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
    //情况下、TI 不对任何
    原因造成的特殊、意外或必然//损害负责。
    //
    //这是 EK-TM4C123GXL 固件包版本2.1.3.156的一部分。
    ////
    *****************
    
    #include 
    #include 
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    //#include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "driverlib/adc.h"
    /#include "driverlib/fpu.h"
    #include "driverlib/gpio.h"
    #include "driverlib/driverline.h"#driverlib/driver.h"#include "driverlib/#driverlib/driverlib.trat.h"#include"#driverlib/#driverlib#driverlib./driverlib#include "driver.h"
    
    
    
    
    
    
    
    
    //
    //! \addtogroup example_list
    //! 

    计时器(计时器)

    //! //! 此示例应用演示了如何使用计时器来生成 //! 周期性中断。 一个计时器设置为每秒中断一次和 //! 另一个中断每秒中断两次;每个中断处理程序将切换 //! 显示屏上有自己的指示灯。 //! //! UART0、连接到虚拟串行端口、运行速度为115、200、8-N-1、 //! 用于显示来自此应用程序的消息。 //// ***************** // // //包含 UART 上显示的中断指示符当前值的标志//。 //// ***************** uint32_t ADC0Value[1]; void InitADC0 (void) { SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3); ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0); ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable (ADC0_BASE、3); ADCIntClear (ADC0_BASE、3); } void InitTimer0 (void) { // //启用此示例使用的外设。 // SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); // //启用处理器中断。 // IntMasterEnable(); // //配置两个32位周期定时器。 // TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE); TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()); //启用触发 TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); IntMasterEnable(); ADCIntEnable (ADC0_BASE、3); TimerEnable (TIMER0_BASE、TIMER_A); } //********* // //第一个定时器中断的中断处理程序。 //// ***************** void ADC0IntHandler (void) { // //清除计时器中断。 // TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT); ADCIntClear (ADC0_BASE、3); while (!ADCIntStatus (ADC0_BASE、3、false)) { } ADCIntClear (ADC0_BASE、3); ADCSequenceDataGet (ADC0_BASE、3、ADC0Value); // //更新显示屏上的中断状态。 // IntMasterDisable(); IntMasterEnable(); } int main (void) { // //将时钟设置为直接从晶体运行。 // SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN); InitADC0(); InitTimer0(); // //在计时器运行时永久循环。 // while (1) { } }

    我已关注此主题:  e2e.ti.com/.../361896

    我收到以下编译错误...

    >>编译失败
    Makefile:145:目标'timers.out'的配方失败
    符号
    ------ --------
    Timer0IntHandler ./startup_ccs.obj

     


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    海报要求提供有关"如何使用参数  "ADC_TRIGGER_TIMER"的具体指导。   (提供了一种更直接的方法来获得他的"定时器触发" ADC 读数。)

    由于我们可能处于不同的时区-我将提供"外部人员宪章"(一般问题解决方法)、而不是供应商(更有限)的"特定解决方案"。

    KISS (尽管这里的"禁止")会看到我们的高效方法:  

    • 只关注两个 MCU 外设"在这里玩"-即 ADC计时器。
    • 如何以及在何处学习"需要哪些 API 函数?"
    • (一些)示例(某处)可能(实质上)"已经完成了这项工作?"

    如果可能、我们的目标不是"彻底发明车轮"。   然而-如果没有车轮"显示"-我们能否(至少)找到轮胎、辐条、甚至轮毂?

    有两个主要的技术文档。 供应商提供的资源:

    • MCU 手册
    • SW-xyz-DRL-用户指南

    这两者提供了很详细的信息-应始终征求意见。   请注意、MCU 手册详细介绍了 MCU 的"内部工作和功能"(和规格-远距离-在"廉价座椅"中)、而软件用户指南显著增强了 API 的功能-并以出色的"按外设"组织方式实现了此功能。

    SW-DRL 的 ADC 和定时器章节的回顾列出了每个 API 控制的外设中包含的"多种功能"。  梳理"以上所有内容"是"用户的工作"、以确保没有遗漏任何密钥/所需的 API 函数!   (正是"这一缺失"(通过海报)阻止了参数"ADC_TRIGGER_TIMER"按预期运行!)

    计时器 API 函数列表包括"TimerControlTrigger()"、正如了不起的 API 所解释的-必须与"ADC_TRIGGER_TIMER"一起使用。   ("组合"解决了海报的问题!)

    实际上当一个 API 函数与另一个 MCU 外设(仅限于)一起使用时、它会对"单独的 MCU 外设"施加强大的控制/影响、这会要求更高。    然而-这种容量可产生更大的功率和控制-并且(但现在)可能之前没有提到也没有解释!   (当然不会有这种关注/细节)

    有一些更简单的 MCU -这些 MCU "逃避"了"深度"的警觉性/意识要求-但那些(目前为止阅读的内容)可能"现在 更好"-利用和利用 ARM MCU 的功能和承诺...  (这种努力/见解被剥夺了"相似"、这确实是"遗憾"(愤怒)。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我找不到主代码中列出的"Timer0IntHandler()"(您的 ISR)!   这是必需的-是不是?

    您可以通过在 ADC 的代码结构之后"建模" Timer0的代码结构来获得成功、该代码结构似乎正在运行...  需要注意的是、您的 ADC 确实有一个 ISR!

    我"怀疑"您"聪明、认真"、"克服您的问题"、因此我提供了"解决方案"(如承诺的那样)。  (以上帖子)

    现在就花点时间-放松-这不是一个令人兴奋的地方!   坚持亲吻-简单思考、一次一场战斗、您很快就会到达那里!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include 
    #include 
    include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    //#include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "driverlib/adc.h"
    //#include "driverlib/utilidex"driverlib.mdio.h"
    
    #include "driverlib/driverlib.ido#include "#driverlib.000#include "#driverlib.mdio.ide"#include "#driverlib.000#include "#driverlib.mdio.idio.000#include "#include "#def"#include "#def"#def"#def"#def"#def"#def"#/intrintrins/int.idio.ide"#include "#def"#include "#.ints/in.ide"/udintr.ide"#def"#include "#.000#.ints/in.int.ide"#.ide"#def"#.int.ide"#include
    
    
    
    
    
    
    
    
    
    
    
    
    "
    TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    }
    
    void main (){
    
    SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
    
    //初始化 ADC
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);// ADC 输入引脚
    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);//ADC 外设
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    
    用于 ADC 通道的//引脚
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);//设置通道1的 GPIO_E3
    ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0);//序列发生器0
    ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
    
    TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
    TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()/1000);//10kHz
    TimerEnable (TIMER0_BASE、TIMER_A);
    TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
    
    ADCSequenceEnable (ADC0_BASE、3);
    ADCIntEnable (ADC0_BASE、3);
    
    
    //启用 ADC
    
    
    uint32_t Data0[1000];
    uint32_t ADCCurrentIndex;
    
    
    
    while (1){
    
    for (ADCCurrentIndex=0;ADCCurrentIndex < ADCNumOfSamples;ADCCurrentIndex++)
    {
    ADCIntClear (ADC0_BASE、3);
    ADCIntEnable (ADC0_BASE、3);
    
    ADCIntClear (ADC0_BASE、3);
    while (!ADCIntStatus (ADC0_BASE、3、0));
    
    uint32_t num1 = ADCSequenceDataGet (ADC0_BASE、3、&Data0[ADCCurrentIndex]);
    ADCIntDisable (ADC0_BASE、3);
    }
    }
    
    

    您好  我仍然无法通过带有 PE3引脚的 ADC 获得正弦波作为输入。

    我在这里出了什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白了... 有2个"Data0"声明。 现在工作正常。

    感谢您的快速回复:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Rohan Chahwan"]我仍然无法通过具有 PE3引脚的 ADC 获取正弦波作为输入。

    我是否可以问:"这个全新问题是从世界何处产生的?"   谁在乎呢?

    [引用用户="Rohan Chahwan"]我在这里有什么问题?

    其中一个-您(和其他人)代表生成了一个"非常详细"的帖子-收到了"没有评论!  零!"   

    跳跃-从一个问题到另一个问题-是严重违反亲吻-并且逃避了我的兴趣...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    如果我让您对这次对话不感兴趣、我表示歉意。
    但是、在您的详细帖子中、我在 MCUu 手册和 spmu298d.pdf 中进行了查找、之后我在该论坛中发布了一篇采用类似方法的帖子、并且我获得了一个源代码来处理它、从而获得了成功...

    这肯定是你帮助我解决问题的方法。 谢谢:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述]
    我是否可以问:"这个全新问题是从世界何处产生的?"   谁关心?[/引述]

    这就是问题所在。 ADC 在 MCU 中无法正常工作。 现在它正在工作、我能够在数字阵列中获得模拟正弦波。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拒绝采用系统有限(一次一个问题)方法(即 kiss)会导致"长期"成功,这是令人怀疑的。
    我自己(这里是唯一的助手)和"任何"的后续阅读者都无法确定"发生了哪些变化"(从您的失败、起点)到(所谓)成功。

    启用"定时器触发 ADC"所需的功能"缺失"-即将发现并注明-但"该代码的任何更正"仍有疑问-因此有一个"未标记/未记录的路径"-供其他人(现在)遵循... (完全不是-我的目标...)