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.

[参考译文] AM2434:计时器周期不稳定

Guru**** 2534260 points
Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1556897/am2434-the-timer-period-is-unstable

器件型号:AM2434


工具/软件:

操作系统:FreeRTOS

 

SDK:mcu_plus_sdk_am243x_08_06_00_45

 

您好、

如果在创建任务之前启动计时器、则 DAC 模块的输出周期是稳定的、如图 1 所示。


为什么在任务创建后启动计时器时 DAC 模块的输出周期不稳定、如图 2 所示。

 

原因可能是什么?

 

此致

uint32_t gv_TaskStack[122880/sizeof (uint32_t)]__attribute__((aligned (32)));
SemaphoreP_Object gv_stObjectSem;

int main (void){

 DAC_Init;// DAC 模块初始化

 // TMR3_Start
 TimerP_START (gTimerBaseAddr[CONFIG_TIMER3]);

 TaskP_Params stTaskParams;

 //为任务创建其信标
 SemaphoreP_constructBinary (&gv_stObjectSem、0);

 //创建任务
 TaskP_Params_init (&stTaskParams);
 stTaskParams.name =“Task1";“;
 stTaskParams.STACKSIZE = 122880;
 stTaskParams.stack =(uint8_t*) gv_TaskStack;
 stTaskParams.priority = 26;
 stTaskParams.taskMain =(TaskP_FxnMain) Task1;
 TaskP_Construct (&gv_stTaskObj、&stTaskParams);

 //如果在此处启动计时器、则 ADC 模块的输出周期将不稳定
 // TimerP_START (gTimerBaseAddr[CONFIG_TIMER3]);

}

void ISR_TIMER3 (void){
 Semaphore_post (&gv_stObjectSem);
}

// 收到中断时回调以调用

void TimerP_isr3 (void *args)

 void ISR_TIMER3 (void * args);

 ISR_TIMER3 (args);
 TimerP_clearOverflowInt (gTimerBaseAddr[CONFIG_TIMER3]);
 HwiP_clearInt (CONFIG_TIMER3_INT_NUM);
}


void Task1 (void *pvdArgs){

 SemaphoreP_Pend (&gv_stObjectSemCNC、SystemP_WAIT_FOREVER);

 DAC_Output (049152);// DAC 模块输出 5V 的电压

 ClockP_USleep (200);

 DAC_Output (032767);// DAC 模块输出 0V 的电压

}

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

    您好、王童、

    我正在处理这个问题。 希望我在一天或两天内回复。

    我感谢你的耐心!

    此致、

    Anastas Yordanov

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

    尊敬的 Wang Tong:

    假设您使用外部 DAC、 根据 SoC 文档、AM2434 中不提供 DAC 外设。

    1. AM2434 使用哪个硬件接口与外部 DAC 通信?

    我查看任务 1 代码、作为硬件应用工程师、我尝试根据您获得的波形了解硬件行为:

    2.我认为从 0V 上升到 5V 的上升时间为 200us 会使 DAC 输出的稳定时间过慢。

    我提到了以下有关一些典型 DAC 输出稳定时间的示例主题:  

    DAC 输出参数示例

    我在输出曲线中看不到平坦的 5V 段。 在我看来、您要么在 DAC 输出端连接了一些滤波电容器、要么将探头放置在与 DAC 输出不同的另一个电路点。 您能解释一下吗?

    3.是否可以提供测量设置的示意图?

    关于您的主要关注点、我可以看到计时器 3 生成的周期(从 0V DAC 输出到下一次 DAC 输出从 0V 开始的持续时间)约为 1ms。  在第二个波形中、我可以看到它的长度变化为+–200us、符合您的担忧。

    4.您的应用程序是否在 FreeRTOS 或其他 RTOS 下运行?  请指定 RTOS 和您正在使用的版本。

    我问道、因为该线程标签操作系统是“freeertos" ,“,但、但我没有看到直接的 xTaskCreate 调用。 即使任务创建调用也 被  TaskP_construct 函数包裹 我也担心我 在 main 函数结束时没有看到 vTaskStartScheduler () 调用。

    如果您的 RTOS 为 FreeRTOS:

    根据我对 FreeRTOS 的基本经验和 SDK 提供的示例、调用 vTaskStartScheduler () 时进行一些错误检查、在 main () 函数结束时  、可以确保调度程序在启动计时器 3 之后启动任务 3 执行、而不管您在任务 1 创建之前或之后调用 TimerP_start() 的顺序如何。 能否检查在哪个点 调用 vTaskStartScheduler () ?  

    根据您的回答、如果没有硬件问题、我会将该主题转发给软件团队进行分析。

    谢谢

    此致、

    Anastas Yordanov