TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2652RSIP: 使用ULP Sensor协处理器碰到的复制例程无法复现(定时器调用中断的)问题

Part Number:CC2652RSIP

使用的环境是Sensor Controller Studio,硬件是买的开发板,修改的例程是LED PWM for LaunchPad,想验证的模块在帮助文档的timer2 event trigger章节,复制的章节内代码大概内容是:1ms后定时器通道1开传感器电源,再过1ms通道2触发中断,中断里面检测传感器数据并关闭传感器电源,然后开启下一次循环,修改代码如下,把开电源pin改为红灯,在中断里面翻转绿灯,目前是红灯常亮,绿灯不翻转,初步分析是没有进入定时器中断,请问接下来怎么做,请问这个协处理器支持imer2 event trigger吗?例程标注很清晰,我完全复制过来是缺少配置还是缺少代码这个能帮忙确认吗?中断函数是自动添加的,使用索引和例程一样为0

Cherry Zhou:

您好我们已经收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!

,

user6250142:

感谢,我最近也在努力查找解决方法,您可以尝试看一下SCS底层调试逻辑和把代码放到CCS上调试的区别,感觉像是SCS这个工具达不到要求的速度

,

Cherry Zhou:

您好,代码看起来没问题,是和例程中一样的。在Task Testing下,请确保从Task iteration action sequence移除Run Execution Code,并从Available task iteration actions中添加Run Event Handler A Code (trigger 0)。

还需要Event Handler A Code内部的有效逻辑(就像之前Execution Code的一样),这样以便event完成某些task,如闪烁的 LED。

,

user6250142:

您好,已经这样尝试了,的确可以运行到中断,如图,但是最快只能到10ms,目前想实现us级别的触发事件

,

Cherry Zhou:

好的收到,帮您反馈给工程师问下,有消息会尽快给到您。

,

user6250142:

您有时间也帮忙看一下这个问题,十分感谢。e2echina.ti.com/…/lp-cc2652rsip-ulp-sensor-dac

,

Cherry Zhou:

您好,如果要获取更高的定时器分辨率,请使用timer2SetClockSource将clock source从 TIMER2_CLOCKSRC_LF (32kHz) 更改为 TIMER2_CLOCKSRC_LF (低功耗模式为 2MHz) 或 TIMER2_CLOCKSRC_HFDIV2 (active模式为 24MHz)。

详细信息请参阅《传感器控制器 Studio 用户指南》的定时器 2 模块。

关于该问题的解答如上,您的另一个问题我们会在另一个帖子中跟进。感谢理解!

,

user6250142:

是这样设置的,您可以看到截图代码使用的函数是timer2SetClockSource(TIMER2_CLOCKSRC_HFDIV2);,已经设置为了24M;目前跟您说一下我这边最新的测试进展,同样的代码不管怎么尝试(包括按您的建议)在SCS调试环境上也达不到按我设置的100us定时进入中断函数,但是将生成的文件集成到CCS环境下,下载进入cc2652rsip后可以按照我设置的定时进入中断函数,这个您那边是怎么理解的啊,或者您那边可以复现一下查找一下原因。由此引出了另一个关于定时器的问题,就是我在同样的定时器2上用不同的通道设置了多个比较值,按说进入中断的时间间隔应该是比较值间的差值和节拍时间的乘积,但是发现不管这几个比较值设置为多少,不同通道进入中断的间隔都是4us,这个正常吗?同一定时器不同通道用来和比较值进行判断的时间轴是唯一的吗?不知道这个问题有没有描述清楚,十分感谢

,

Cherry Zhou:

好的,两个问题都已跟进给英文论坛的工程师,如有答复会尽快给到您。谢谢!

,

Cherry Zhou:

您好,我们不太确定有没有完全理解对您的问题。

evhSetupTimer2Trigger 只会连接到四个事件信号输出 (TIMER2_EV_ID[0 至 3]) 中的一个。举个例子,Sensor Controller Studio User's Guide参考代码将 TIMER2_EV_ID1 与 TIMER2_EV_ID0 进行了比较:TIMER2_EV_ID0 将GPIO 设置为高电平后,1 ms 会触发,因为其 TIMER2SetInitCmpValue 设置的是64 而不是event zero的32 (使用 32 kHz 作为参考基准),在 timer2SetInitCounterTarget 设置为 100 ms 的情况下,基本可以形成 PWM。

您能否提供您进行尝试时使用的代码,具体想实现什么目标? 如果还没能实现,您可以参考 Sensor Controller Studio SimpleLink Academy Labs。

,

user6250142:

代码如下所示,使用的时钟是24M,定时器2周期设置为100us,两个通道进入中断事件的时间是30us和60us,想实现间隔(60-30)us进入中断,但实测进入中断的间隔不是30us,刚才又测了一下把所有时间值扩大10倍,间隔值是准的:

//设置定时器2的时钟为24Mhz

timer2SetClockSource(TIMER2_CLOCKSRC_HFDIV2);

//等待时钟稳定

timer2WaitForClockSource();

//设置定时器的计数周期

timer2SetInitCounterTarget(2400); //2400 – 100US

//// 复位定时器通道0

timer2ResetCcChannel(TIMER_CHANNEL_0);

//// 复位定时器通道1

timer2ResetCcChannel(TIMER_CHANNEL_1);

//为通道配置操作模式和事件生成TIMER2_CCMODE_PULSE_ON_CMP

timer2CfgCcChannel(TIMER_CHANNEL_0, TIMER2_CCMODE_TGL_ON_CMP, 1 << TIMER2_EV_ID0);

//为通道配置操作模式和事件生成TIMER2_CCMODE_PULSE_ON_CMP

timer2CfgCcChannel(TIMER_CHANNEL_1, TIMER2_CCMODE_TGL_ON_CMP, 1 << TIMER2_EV_ID1);

//配置event0事件

evhSetupTimer2Trigger(TIMER_CHANNEL_0, TIMER2_EV_ID0, 1, EVH_TIMER2_TRIG_ON_EDGE);

//配置event1事件

evhSetupTimer2Trigger(TIMER_CHANNEL_1, TIMER2_EV_ID1, 1, EVH_TIMER2_TRIG_ON_EDGE);

//设置计时器2捕获/比较通道的初始比较值。

timer2SetInitCmpValue(TIMER_CHANNEL_0, 720);//30us

//设置计时器2捕获/比较通道的初始比较值。

timer2SetInitCmpValue(TIMER_CHANNEL_1, 1440);//60us

//启动定时器

timer2StartWithTarget(TIMER2_CNTRMODE_UP_REP);

fwScheduleTask(1);

示意图如下:

,

Cherry Zhou:

好的,有新的反馈会尽快给您。

,

Cherry Zhou:

您好,由于event ID 和 GPIO 没有绑定,请问您是怎样测量中断间隔之间的 4us的?

同时请您注意,涉及到的启动延迟是从Timer 2 event trigger 到Event Handler Code execution.

,

user6250142:

没有通过函数将event ID 和 GPIO进行绑定,而是在event ID对应的事件处理函数中(Event Handler A  Code)进行led的显示,间隔是测量两个led翻转的时间测到的,最新测试是间隔100ms的时候可以比较准,但是快了比如100us,有个事件是10us,另一个事件是20us进入比较中断事件就不准了

,

Cherry Zhou:

您好,上面的回复有提到的哈,使用传感器控制器触发事件处理程序中断代码会有启动延迟。

您可以将每个定时器通道事件连接到 GPIO (timer2ConnectEventToGpio) 以确定Timer 2 执行的精度。

如果您是想要实现更精确的中断计时的话,建议您考虑 Driver Library or TI Driver code。

,

user6250142:

好的,谢谢

,

user6250142:

好的,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » CC2652RSIP: 使用ULP Sensor协处理器碰到的复制例程无法复现(定时器调用中断的)问题
分享到: 更多 (0)