主题中讨论的其他器件:TM4C123
我可以从该微控制器的 GPIO 引脚获得的方波的最大频率是多少。 我编写了一个代码、在其中使用内置 PLL 作为以80MHz 频率工作的时钟源、并借助 iinterrupt。 但我能够在其中一个 GPIO 引脚上获得550Khz 方波。 我需要的是输出端的速度大约为2Mbps。 我应该怎么做?
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.
我可以从该微控制器的 GPIO 引脚获得的方波的最大频率是多少。 我编写了一个代码、在其中使用内置 PLL 作为以80MHz 频率工作的时钟源、并借助 iinterrupt。 但我能够在其中一个 GPIO 引脚上获得550Khz 方波。 我需要的是输出端的速度大约为2Mbps。 我应该怎么做?
[引用用户="Danny F"]
只需翻转一个引脚、至少需要两条指令。 或80MHz MCU 上的40MHz。 这是您可以得到的最大值。 可能小于该值的任何值。
除了指令时钟之外、还有一些限制。 (循环开销、每个周期的指令、访问时间等) Bruno 以20 MHz 的频率测量他能达到的最快速度
https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/506050/1840865#1840865
PWM 应该能够更快。 这是否有用是另一个问题。 当然、如果您所做的只是制作方波、那么通过 PWM 使用处理器将会浪费资源。
可能可以在~2MHz 时对输出进行 Bitbanging (尽管我会质疑必要性)。 在恰好为2MHz 的频率下执行它可能是一个错误。
Robert
"布鲁诺衡量他在20兆赫下能达到的最快速度"
显然、他的行为是错误的:
0x000006D0 F8C02080 STR R2、[r0、#0x80] 61: LED_PORT->RESERVED0[LED]= LED; 0x000006D4 F8C01080 STR R1、[r0、#0x80] 62: LED_PORT->RESERVED0[LED]=~LED;
从 Good old Keil 3.24起。 STR 是一条单周期指令。 因此、如果您在循环中填充该值、您将以1/2的主时钟运行。
海报的应用是否会(合理地)延伸(超出)单个无限循环? 如果是,"这种方法"的残暴性和局限性将很快变得显而易见。 此外、通过该类别的 MCU 生成合适的40MHz 输出波形、证明极不可能!
假设(部分)要实现真正的 MCU 工作-使用配置为 PWM 模式的 MCU (多个)计时器之一应实现"稳定"(基于硬件) 2MHz 时钟输出-同时启用多个其他(正常) MCU 操作和流程... 哪一项(有效)符合"现实世界"使用要求...
[引用 user="siddharth goyal"]实际上,我想生成一个12位计数器,该计数器从全0运行到全1运行,然后再次以精确的1.024Mhz 速率返回全0 (无限循环)。[/引用]
接受这样的"实际"总是"令人沮丧",甚至是"疯狂制造"。 请求序列的末尾。 最初是否应该提供此详细信息?
您的"新引入"(实际)与您的主题/标题几乎没有相似之处-新的细节之前没有出现(也没有暗示)。 不是很好!
[引用用户="Bruno Saraiva"]你在一个糟糕的日子里,用降落伞降落在这里[/引述]
哦,Bruno——这不是很好! (小写海报) Danny DID -"坚持他的着陆!"
之前-这里有一个-请注意、此类 MCU 的输出结构"极不可能"生成(在附近的任何位置)适当的- 40MHz 输出...
(听不清:. (笑声) "你穿着的是防弹衣-还是你(高兴)看到我?")
[引用 user="siddharth goyal"]实际上,我想生成一个12位计数器,该计数器从全0运行到全1运行,然后再次以精确的1.024Mhz 速率返回全0 (无限循环)。[/引用]
您想要12位并行输出吗? 还是只是将时钟馈送到外部计数器? 在这两种情况下、原因是什么? 您的最终目标是什么?
精确到1.024MHz? 精度和可重复性如何? Bitbanging 这不太可能产生后者、尤其是在微控制器上执行任何其他操作时。
[引用 user="siddharth goyal"]对于此应用程序,PWM 也将起作用?[/引用]
您能否使用 PWM 产生 MHz 信号? 是的。 但是、尤其考虑到目前缺少详细信息、您是否能轻松满足规格要求是不可知的。
Robert
[引用用户="Danny F"]
显然、他的行为是错误的:
0x000006D0 F8C02080 STR R2、[r0、#0x80] 61: LED_PORT->RESERVED0[LED]= LED; 0x000006D4 F8C01080 STR R1、[r0、#0x80] 62: LED_PORT->RESERVED0[LED]=~LED;
[/报价]
好的、这里有几件事
Robert
[引用用户="Danny F"]很明显,就像引脚电流驱动器一样...
请尝试对其进行措辞
[引用 USER="Danny F]但是您认为这些指令将按照核心发出的相同顺序到达端口吗? [/报价]
指令未到达端口。 我想我理解您想说什么。 输出将以指令执行的顺序*到达端口。 其时序可能受指令周期计数以外的其他因素的限制、因此可能会插入额外的周期。
[引用 USER="Danny F]指令是否会导致引脚摆动、尽管可能不够? [/报价]
是的
[引述 USER="Danny F"]是否有逻辑认为、如果引脚在由外设驱动时能够以40MHz 的频率摆动、则引脚在由内核驱动时能够以40MHz 的频率摆动?[/QUESP]
否 实际上、观察其他情况是非常常规的。 外设将绕过端口结构并直接与引脚驱动程序**连接。 因此、外设的速率限制可能与端口有很大不同。
Robert
*在这种情况下、我甚至会同意指令将按所写的顺序执行。
**我认为我从未遇到过将引脚驱动器复用的器件。