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.

[参考译文] CCS/TM4C123GH6PM:CCS/TM4C123GH6PM

Guru**** 2455560 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/640811/ccs-tm4c123gh6pm-ccs-tm4c123gh6pm

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

工具/软件:Code Composer Studio

您好!

我希望使用 PLL 将 SPI 时钟的频率范围设置为25MHz。 我使用以下语句,但最多只能获得10MHz!

首先、我设置 PLL 时钟频率、以确保其超过所需 SPI 时钟的两倍、如下所示:

使用 PLL 将时钟设置为以100MHz (200MHz/2)运行。

SysCtlClockSet (SYSCTL_SYSDIV_2 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);

然后将 SPI 时钟设置为20MHz、如下所示:

SSIConfigSetExpClk (SSI3_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、20000000、 16);

为什么我只获得10MHz?

谢谢、

Karim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Karim:
    您无法将系统时钟设置为100MHz、因为 TM4C123仅以80MHz 的最大频率运行。 更改为 SYSCTL_SYSDIV_4、以便系统时钟为50MHz、并将该时钟馈送到 SSI 以生成25MHz SPI 时钟。 但是、这只会将您的器件频率限制为50MHz。 如果您希望器件以80MHz 的频率运行、那么您可以获得的最接近 SPICLK 频率将为20MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Karim AbdelMoneim"]使用 PLL 将时钟设置为以100MHz (200MHz / 2)运行。

    123个器件的最大速度为80 MHz。 我不知道当你要求100时会发生什么。

    [引用 USER="Karim AbdelMoneim"]首先我设置 PLL 时钟频率,以确保它是所需 SPI 时钟的两倍以上,如下所示:[/引用]

    SPI 速率最多可以是系统时钟的1/2。 我本会把 VCO 称为 PLL 时钟、因为这是 PLL 生成的时钟、它固定在400MHz。 系统时钟从该时钟分频。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    海报可能被"123和129"之间的差异所迷惑-因为129采用(可能)更快的系统时钟。
    一如既往-建议仔细阅读(所选) MCU 手册...

    事实证明、"系统时钟设置函数"捕获(并标记)该错误(超速)设置是"有利的"(也许是必要的)!

    需要注意的是、"无样"论坛(已申请)(升级?) "诱导他人"成为"不可理解/无价值"的主题/标题!  (盲目重复器件型号/IDE 将创建零驱动器/兴趣...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBIST]海报 可能被"123和129"-因为129采用(可能)更快的系统时钟、所以可能会混淆。
    一如既往-建议仔细阅读(所选) MCU 手册...[/QUERP]

    如果 TIVAWare 手册指示哪些组合无效、也会有所帮助。

    [引用 USER="CB1_MOBIT"]发现(并标记)“SysClock 设置函数”-错误(超速)设置是“优点”(可能需要)![/引用]

    更好的方法是在编译时检测它。 它还应该捕捉到'123/'129函数冲突、现在可以在编译时完成其中的一些冲突。

    [引用 user="CB1_MOBIST"] (盲目重复器件型号/IDE 将创建零驱动器/兴趣...)[/quot]

    也不确定是否保留了海报的兴趣。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Robert Adsett"]不确定(盲目重复部件号/IDE)是否也保留了海报的兴趣。

    在某些情况下、海报(将)要求快速/恰当、"他人的关注"(以及此类(赦免)"无价值/重复事实的标题"(完全不能)提供信息、也不能以任何方式"吸引/激励!"

    许多帖子出现在这里-海报必须在创建"标题(主题)"时花一些"思考/时间/努力"、这证明(某些)对他人感兴趣...  (即需要进行一些销售!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    感谢你的答复。

    根据您的建议、我将系统时钟更改为50MHz、但使用以下命令、SPI 时钟上的频率仍然只有10MHz;

    SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);

    SSIConfigSetExpClk (SSI3_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、20000000、 16);

    此外、您能否详细说明最大时钟频率为80MHz 与提供的 PLL 频率为400MHz 之间的关系、如方框图中所示?

    此致、

    Karim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Karim AbdelMoneim"]我已按照您的建议将系统时钟更改为50MHz,但使用以下命令,SPI 时钟上的频率仍然只有10MHz;

    您能给我们展示一个"范围捕获"吗?

    [引用 user="Karim AbdelMoneim"]此外,您能否详细说明最大时钟频率为80 MHz 之间的关系[/引用]

    80MHz 是数据表中规定的最大值(在第38页的概述和表1.1中)。 表5.6也许更明确)

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robert、

    感谢你的答复。

    这是我的示波器图、其中我使用 SSI3模块将 SPI 时钟引脚(PD0)作为 AM 进行探测。

    我还检查了相应的寄存器的时钟设置。 根据数据表;

    SSI_Clk = SYSCLK /(CPSDVSR *(1+SCR))、其中我的 CPSDVSR 当前为2、SCR 为零! 因此、给出一个 SYSCLK/2 = 25MHz 的 SSI_Clk。

    谢谢、

    Karim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请注意、如果您的电路板是"LPAD"-您选择的"PD0"尤其不幸-因为它(直接)与 PB6相连! (通过一个"著名的" 0Ω 鼠疫病症"(R9或 R10)。 现在、人们会期望 PB6对 PD0 (海报的 SPI 时钟)施加(某些)影响-但"将其输出频率减半"-超出了我(有限)的理解范围。

    拆卸/丢弃(两个) R9/R10 -如果海报的板是 LPAD -将作为"明智的开始!"

    这也将证明张贴到"切换到另一个 SPI 端口"(避免 PD0/PD1)-并查看他的设置代码(然后)是否正确执行...

    许多人"陷入了这一陷阱"、但供应商(寻找时间)"像杀人一样"、同时离开 R9和 R10 (多年来)继续他们的误区!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Karim:
    您编写了 SSIConfigSetExpClk (SSI3_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_MODE_0、SSI_MODE_MASTER、20000000、 16)。 首先、您将20MHz 指定为波特率、而不是25MHz。 第二、您能告诉我您从 SysCtlClockGet 得到了什么吗? 我想确保它返回50MHz。 我建议您在下面尝试、并让我知道您在范围内得到的结果。

    SSIConfigSetExpClk (SSI3_base、50000000、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、25000000、 16);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    实际上-从50MHz "SysClock"生成20MHz "SPI Clk"-可能不是"卡中的"。   (无法实现-通过"2的幂"整数分频器)

    你是否在营地里,PD0和 PB6之间的“死短线”——由“令人愉快的”R9/R10“魔鬼对”——可能被“过度看”了?   (海报已注意到他将 PD0用作 SPI_CLK ...即使 PB6 "未使用"(目前)-当它"切换到 GPIO 输出-可怕的"输出争用"被"主/就绪"魔鬼对邀请...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我对这种情况有些怀疑。 Karim 应该在 PD0和 PB6上看到 SSI3CLK、因为他没有提到将 PB6用作 GPIO 输出。 他可以确认这一点。 从示波器可以看到、SPICLK (除了错误的频率)对我来说是合适的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复!

    我将使用的 SSI 模块更改为 SSI0、以避免与0欧姆电阻器的连接过于模糊。 但是仍然只能达到最大10 MHz!

    谢谢、

    Karim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我还尝试了你建议的陈述;
    SSIConfigSetExpClk (SSI3_base、50000000、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、25000000、 16);

    我仍然得到最大10MHz!

    我在不同的 SSI 模块(SSI0/2/3)上尝试过此操作、也在不同的板上尝试过此操作。

    谢谢、
    Karim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    太棒了! 您"愿意"进行实验-尤其是使用附加电路板-值得鼓掌! FiRM /我有几个这样的'123 LPad -这是您使用的吗? 如果是、我们将"按照您的步骤操作"、并报告我们的调查结果!

    如果您使用的是'123 LPAD、请提供建议! (并且-始终证明最好"去除掉和墓碑"每个"魔鬼对"(电阻器)-因此它们(持续-供应商认可)的"折磨"可能会被阻止。 (这种"制裁"是事实-是不是吗?)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Karim:
    您可以粘贴您的代码吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、

    感谢您的帮助!
    是的,我正在使用123个 LPad (TivaTmC 系列 TM4C123G LaunchPad)

    此致、
    Karim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    以下是我的代码。

    #include
    #include
    #include
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include "driverlib/ssi.h"
    #include "utils/uartstdio.h"
    #include "driverlib/adc.h"

    #define NUM_SSI_DATA 3.

    uint32_t pui32DataTx[NUM_SSI_DATA];
    uint32_t pui32DataRx[NUM_SSI_DATA];

    SPI_Init()

    //
    //使用 PLL 将时钟设置为以50MHz (200MHz/4)运行。
    //
    SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);

    //
    //启用 SSI 外设。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);

    //
    //为 SSI0模块启用 GPIO A 外设。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //
    //为 GPIO A 引脚配置 SSI0功能。
    //
    GPIOPinConfigure (GPIO_PA2_SSI0CLK);
    GPIOPinConfigure (GPIO_PA3_SSI0FSS);
    GPIOPinConfigure (GPIO_PA4_SSI0RX);
    GPIOPinConfigure (GPIO_PA5_SSI0TX);

    //
    // SSI0管脚分配
    //
    GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |
    GPIO_PIN_2);

    //
    // SSI0时钟配置
    //
    SSIConfigSetExpClk (SSI0_BASE、50000000、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、25000000、 16);

    //
    //启用 SSI0模块。
    //
    SSIEnable (SSI0_BASE);


    //
    //以下函数在 SSI 模块的 Tx 引脚上放置一个增量值、供具有 SPI 接口的 DAC 接收。
    //我没有接收到来自 DAC 接口的任何信号、因此我没有使用 SSI 模块的接收引脚(线缆断开)。
    // DAC SPI 接口可以处理的最大频率为30MHz。

    void FreqSweep()

    静态 int val = 20;
    pui32DataTx[0]= val;

    while (SSIDataGetNonBlocking (SSI0_BASE、&pui32DataRx[0])){}

    SSIDataPut (SSI0_BASE、pui32DataTx[0]);

    //频率扫描
    如果(val < 7535)
    Val +=20;
    其他
    Val = 20;

    while (SSIBusy (SSI0_BASE)){}



    此致、
    Karim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    最好在调用每个函数"SysCtlPeripheralEnable()"函数之前和之后插入(部分)延迟。   您可以选择(甚至更好)调用适当的"外设就绪"函数。

    我建议您在进行任何设置/配置之前重置 SSI 功能-只需站在安全的一边!

    你(几乎)在那里——住得好!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试附加示例、使 ssi0以25MHz 运行。

    e2e.ti.com/.../1200.spi_5F00_master.c

    我运行了该示例、示波器显示 SPICLK 为25MHz。 我的时间刻度为每分段100ns、您可以在每分段中看到大约2.5个时钟。

    下面是测量时钟时的放大视图、显示40ns。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查尔斯

    在这种速度下-波形可以更好地揭示(假设)示波器的(~3")接地探头(引线)是否被移除-而(最小长度)"接地线环"直接连接(包围)探头的金属体。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    你完全是对的。 我忘记在 TX 引脚(底部信号)上连接探头接地。 :-)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    然而、这清楚地说明了当您接近这些速度查尔斯时、不应轻视这些信号的原因。 SPI 要求数据在时钟上升和下降期间保持稳定。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robert、

     我同意。 这里是正确接地后的示波器截图。  我将 TX/RX 连接在一起、并且接收器正在正确接收数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    您的代码使我能够更深入地进行故障排除。 我意识到我的 SPI 代码工作正常、给出的结果与您的代码相同。

    这让我想到了" main "中的代码。 我也在使用 ADC 模块进行一些信号转换。 但是、我没有将 SYSCLK 设置为与 SPI 相同的频率(PLL 为50MHz)、这就是冲突!

    更正后、我在示波器上得到了来自 SPI 时钟的25MHz 的良好频率。

    非常感谢 Charles 的支持! 非常感谢 Robert 和 CB1的贡献、建议和支持!

    此致、

    Karim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Karim:
    很高兴您的问题得到解决。 为什么要在每个外设的初始化过程中配置系统时钟频率? 您应该在初始化其它外设之前初始化器件(即器件 FEQ)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    任何"论坛助手小组"都不可能能够解决这样的问题、例如"系统时钟的更改"(正如查尔斯所说的)" PC 被抑制"(几乎)抗议证明是非常意外的!

    这里的教训是,我们必须扩大我们的诊断范围,从而注意--甚至是"预期"--这是意料之外的! 任何"无法解释的偏离规范"都必须导致"招贴画承认"可能影响结果的"任何/全部"修改(如此处的系统时钟)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您完全正确! 我现在了解到、我应该对整个器件进行一次时钟初始化。

    谢谢、
    Karim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉给您带来不便! :D
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    既不寻求也不需要悲伤。     

    这里有一个很明显的经验教训-(3个帮助者)的综合诊断工作未能"确定 MCU 的频率控制机制是否(任何)会发生变化和/或调整。"   虽然这是一个(有点)异常/意外的-应该已经被质疑-如果(现在)没有正确的回忆和记录在这里-可能会重复。

    的确,"帮助者"可能会"学习/获益于他们所帮助的人",但(仅限于)正确识别"真正的枢轴/触发问题",并将其带到表面上,从而证明"不"重复...   (我写的这篇文章试图在"您发现问题"时"将弓扣在一起"、而"助手 crüe "应该"提示并检测到问题"、但没有!)    

    学习"如何犯错"可能比"错误本身"更重要(甚至更重要)、因为这可能会识别出一种不完美的"技术"、如果不是"纠正"、则可能会重复这种做法!    (经常在这里看到- R9/R10继续进行(不想要的)海报令人沮丧的攻击-绝对没有减弱-而"相似"则受到(不必要/破坏性的)注意!)   忽略错误... 证明远不能更正... 遗憾...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBIST"]学习"如何犯错"可能比"错误本身"更重要(甚至更重要)-因为这可能会识别出一种不完美的"技术"-如果不"纠正"、可能会重复这种做法!

    这实际上是一个有趣的观点! 真正的学员、我完全同意!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    而且-我并不是仅仅承认"聪明/有足够动力"来"认可、获益于并融入/采纳"这一事实!

    这种类型的"正在进行的、可操作性的结论"是大多数"论坛匆忙的回应"所掩盖的一个问题、从而阻碍了"吸取的教训!"    

    这种"概括性"从"单一解决方案"转变为更强大/有用/可重复使用的"通用解决方法"、大大提高了"解决问题的能力和效率"、并且应该成为"寻求的目标"、针对每个挑战...