男士、
刚刚遇到了一个"需求"、我认为这是可能的、但现在我不确定:我想使用计时器来捕获4个事件、这些事件所需的时间超过16位计数就足够了。
我的信号被接至 TxCCP0。 典型周期为~1ms。 下图显示了正在测量的 PWM 信号以及低于该信号的16位计时器、系统时钟设置为120MHz。
转换通过 DMA 自动传输到阵列- DMA 是读取定时器的侵入性更低的方法。 但是、该特定信号跨越两个以上的计时器翻转、因此我无法仅使用一个16位计时器来使用该解决方案。
下面的一些想法(我在撰写问题时正在阅读数据表、因此可能会同时出现答案... 但为了确认或提出建议、让我们保留它!)
-如果我仅 使用 TIMER_CFG_A_CAP_TIME 调用 TimerConfigure()而不使用 TIMER_CFG_SPLIT_PAIR,则计时器的"B"部分是否会在部件"A"的每个卷轴减少1个单元,同时仍使 CCP 处于活动状态?
(否、在发生转换时不执行中断/DMA)。
-使用预分频器:在查看数据表和 driverlib 用户指南时、预分频器的使用并不是很清楚。 很明显,没有任何函数可以“启用”它-所以我想知道,仅仅通过 TimerPrescaleSet()写入一个值的事实是否会启用它? 如果值为0x00该怎么办? 除了写入一个寄存器之外、该函数的作用是...
我们能否借此机会正确解释每个预分频寄存器的作用?
- GPTMTAPR (简单的称为预分频):由具有 TimerPrescaleSet()的 TivaWare 修改并使用 TimerPrescaleGet ()读取;
它有什么作用,用人的英语?
- GPTMTAPMR (预分频匹配):使用 TimerPrescaleMatchSet()修改并使用 TimerPrescaleMatchGet ()读取;
它的作用是什么?
- GPTMTAPS (预分频快照):无 TivaWare 函数。
它的作用是什么?
为便于说明/搜索、寄存器为 TimerA 进行硬编码。
为了便于记录、我还通过此链接寻求帮助、但随后在文章中提到了一个 TAPV 寄存器、以使事情更具挑战性、因为它不会出现在数据表寄存器表中...
e2e.ti.com/.../354038
总之、真正好的特性是文档令人困惑、但使用起来很简单: 我在定时器配置之后向预分频器添加了一个非零值、并且根据数据表的 GPTM 章节、寄存器说明、条目18 (GPTMTAR)、捕捉事件发生时的预分频器值被自动传输到该寄存器的位23-16! 因此、我只需不执行任何操作就可以读取它、计时器现在是24位。
TimerConfigure (TIMER0_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP)); TimerPrescaleSet (TIMER0_BASE、TIMER_A、4);
很抱歉这个曲折的帖子、正如它在研究期间所写的那样-这里有一些未回答的问题、主要是由于误导性的文档-帮助/洞察最受欢迎! 但也有一些有用的结论。
此致
布鲁诺