使用SYSBIOS6.35.04.50,按照User Guid里面想产生200us的定时器模块,可经过测试产生的定时器的周期不受控制,Period不管设置成什么数值,周期都在1ms左右,不知道是什么原因?希望高人指点,谢过了!代码如下:
/* ======== HwiHookExample.c ========
* This example demonstrates basic Hwi hook usage. */
#include <xdc/std.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/System.h>
#include <xdc/runtime/Timestamp.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/hal/Timer.h>
#include <ti/sysbios/hal/Hwi.h>
#include "led.h"
int state=0;
Timer_Handle myTimer;
/* ======== myTimerFunc ========
* Timer interrupt handler */
Void myTimerFunc(UArg arg)
{
int i;
led_ON_OFF(1);
for(i=0;i<5000;i++);
led_ON_OFF(0);
for(i=0;i<5000;i++);
}
/* ======== myTaskFunc ======== */
Void myTaskFunc(UArg arg0, UArg arg1)
{
Timer_setPeriodMicroSecs(myTimer,200);
Timer_start(myTimer);
while(1);
}
/* ======== main ======== */
Int main(Int argc, Char* argv[])
{
Task_Params taskParams;
Task_Handle task0;
Error_Block eb;
Timer_Params timerParams;
Error_init(&eb);
led_init();
/* Create 1 task with priority 15 */
Task_Params_init(&taskParams);
taskParams.stackSize = 100;
taskParams.priority = 15;
task0 = Task_create(myTaskFunc, &taskParams, &eb);
if (task0 == NULL) System_abort("Task create failed");
Timer_Params_init(&timerParams);
//timerParams.extFreq.lo=5000;
//timerParams.extFreq.hi=0;
timerParams.period = 2000000;
timerParams.runMode = Timer_RunMode_CONTINUOUS;
timerParams.startMode = Timer_StartMode_AUTO;
timerParams.periodType = Timer_PeriodType_MICROSECS;
myTimer = Timer_create(Timer_ANY, myTimerFunc, &timerParams, &eb);
if (myTimer == NULL) System_abort("Timer create failed");
BIOS_start();
return (0);
}
shuai huang:
问题刚刚已解决,谢谢!
Chris Meng:
回复 shuai huang:
你好,
问题如何解决的?能否分享一下?
shuai huang:
回复 Chris Meng:
在Timer_create的第一个参数中,不能写Timer_ANY,而应写与硬件对应的Timer的编号0,1,2,3。这样定时精度就可以达到200us了。
shuai huang:
回复 Chris Meng:
在Timer_create的第一个参数中,不能写Timer_ANY,而应写与硬件对应的Timer的编号0,1,2,3。这样定时精度就可以达到200us了。