工具/软件:TI-RTOS
F28M35H52C1RFPQ
API文档指出Timer_start()将“重新加载并启动计时器”。 如果计时器正在运行,Timerstart不会重新启动计时器,也不会重置其计数器。 如何重新启动计时器?
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.
工具/软件:TI-RTOS
F28M35H52C1RFPQ
API文档指出Timer_start()将“重新加载并启动计时器”。 如果计时器正在运行,Timerstart不会重新启动计时器,也不会重置其计数器。 如何重新启动计时器?
我在调用Timer_start()之前尝试了Timer_stop(),计数器没有重置。
编辑*。cfg时创建计时器。 我设置的时间段为300万 µs。 我要分配一个处理程序。 我收集程序并运行。 我每隔一秒都会调用Timer_Start()。 第一次调用Timer_Start ()后3秒后,我进入处理程序。
tisto_c2000_2_16_01_14
BIOS_6_45_02_31
你好,Janet
是的,我可以。 计时器的名称是timerKeepW5100_1和timerKeepW5100_2。
void timerKeepalive_1 (UArg套件)
{
EVENT_POST (eventW5100_1,EVENT_W5100_DIS);
}
Timer_start()没有出现问题。 以下是我的cfg代码(从您的复制):
VAR计时器= xdc.useModule('ti.sysbios.hal.Timer');
VAR timer0Params =新Timer.Params();
timer0Params.instance.name ="timerKeepW5100_1";
timer0Params.period = 300万;
timer0Params.startMode = Timer.StartMode_user;
timer0Params.runMode = Timer.RunMode_OneShot;
program.global.timerKeepW5100_1 = timer.create_(null,"&timerKeepalive_1",
Timer0Params);
VAR timer1Params =新Timer.Params();
timer1Params.instance.name ="timerKeepW5100_2";
timer1Params.period = 300万;
timer1Params.startMode = Timer.StartMode_user;
timer1Params.runMode = Timer.RunMode_OneShot;
timer1Params.periodType = Timer.PeriodType_microsecs;//默认值
program.global.timerKeepW5100_2 = Timer.creation(1),"&timerKeepAlive_2",
Timer1Params);
下面是我的测试中的代码:
#include <XDC/cfg/globL.h>
/*这些计时器句柄在XDC/cfg/global.h */中声明
外部连接Timer_Handle timerKeepW5100_1;
外部连接Timer_Handle timerKeepW5100_2;
UINT32计时器1计数=0;
UINT32 timer2Count = 0;
/*
* ========= 主====
*/
INT MAIN ()
{
Timer_start (timerKeepW5100_1);
Timer_start (timerKeepW5100_2);
BIOS_START(); /*不返回*/
返回(0);
}
void timerKeepalive_1 (UArg参数)
{
timer1Count++;
Timer_start (timerKeepW5100_1);
}
void timerKeepalive_2 (UArg参数)
{
timer2Count++;
Timer_start (timerKeepW5100_2);
}
当我在CCS中运行此程序时,我可以看到计时器计数正在增加。
此致,
珍妮特
Juvf,您好!
感谢您发布测试案例。 我发现问题是由于您使用的BIOS版本较旧。 在该版本中,lm3计时器的Timer_start()不会重新加载周期。 此问题已在BIOS 6.46 .00.23 中修复。 没有适用于C2000的TI-RTOS版本的修复程序,因此您可以将lm3 Timer.c文件替换为固定版本(见下文)。 该文件位于:
<TIRTOS_INSTALL_DIR>/tirtos_c2000_2_16_01_14/products\BIOS_6_45_02_31/packages/ti/SysBIOS/family/arm/lm3
然后,您可以重新构建测试。 希望这能解决问题。
此致,
珍妮特
您好Janet
请问您是否在 我之前从BIOS 6.46 .00.23 中检查过定时器以更换Timer.c?
我可以在Timer.c中看到Timer_start()的来源
/*
* ========= timer_start =========
* 1. hwi_disable();
* 2.清理计数器
* 3.清除IFR
* 4.启用计时器中断
* 5.启动计时器
* 6. hwi_restore()
*/
void Timer_start(Timer_Object *obj)
{
UINT密钥;
UINT32 AMR;
ti_catalog_arm_peripherals_timers_TimerRegs *timer;
计时器=(ti_catalog_arm_peripherals_timers_TimerRegs *)Timer_module->device[obj->id].baseAddr;
密钥= HWI_DISABLE();
Timer->GPTMCTL &=~1;/*通过清除位0 (Taen)*/停止计时器
计时器->GPTMICR = 0x101;/*清除中断*/
如果(obj->hwi){
hwi_clearInterrupt (obj->intNum);
hwi_enableInterrupt (obj->intNum);
TIMER -> GPTMMR |=1; /*取消计时器中断的掩码*/
}
AMR = timer->GPTMTAMR &~0x3;/*清除模式位*/
如果(obj->runMode == Timer_RunMode_Continuous ){
/*子1起始期间以补偿重新加载期间的额外计数*/
TIME->GPTMTAILR = OBJ->Period -1;
Timer->GPTMTAMR = AMR +2;/* Periodic Timer mode */
}
否则{
TIMER ->GPTMTAILR = OBJ->Period;/*设置Period */
Timer->GPTMTAMR = AMR + 1;/* OneShot Timer模式*/
}
TIMER -> GPTMCTL |=3; /*通过设置位0 (Taen)*/启动计时器
HWI_RESTORE (密钥);
}
注释中的第二步是“* 2.清除计数器"。 我在源代码中看不到此步骤。 在哪一行代码中清除计数器?