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.

[参考译文] MSP430FR5994:设置0.1us 的延迟

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1394244/msp430fr5994-set-the-delay-for-0-1us

器件型号:MSP430FR5994

工具与软件:

尊敬的 TI 支持团队:

您能否提供有关如何将 GPIO 设置为以0.1微秒的延迟进行触发的指导?

这是我当前设置的系统时钟。

//初始化时钟系统 DCO = 8MHz
CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_6);//将 DCO 设置为8MHz

//配置时钟源和时钟分频器。
CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_CLOCK_DIVIDER_1);// 8MHz
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_CLOCK_DIVIDER_1);// 8MHz
CS_initClockSignal (CS_ACLK、CS_LFXTCLK_SELECT、CS_CLOCK_DIVIDER_1);// ACLK=LFXT1/1=32768Hz

我使用示波器测量 GPIO 引脚、延迟大约为0.6微秒。

P3OUT |=位2;

P3OUT &=~BIT2;

谢谢你。

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

    您好!

    请尝试使用这个演示代码来将 MCLK 设定为8MHz。

    https://dev.ti.com/tirex/explore/node?node=A__AET-GYwzL1YU7YHGoqxhGQ__msp430ware__IOGqZri__LATEST

    此致、

    Cash Hao

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

    在8MHz 处、MCLK/SMCLK 周期为0.125us。  

    更改 GPIO 引脚大约需要4-5个 MCLK (这是指令所需的时间)。

    使用计时器生成脉冲至少需要2个 SMCLK (每个边沿一个)。

    您可以成功使用 SPI -如果 BRW=1、SPI 时钟将以 SMCLK (BRCLK)速度运行。 只需将(例如) 0x80写入 TXBUF、您将在 SIMO 上获得0.125us 脉冲。 (无需 连接 CLK 或 SOMI。)

    如果您需要的脉冲恰好是0.1us、则需要10MHz SMCLK、它可能需要一个外部晶体。

    [编辑:更正了拼写错误]

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

    谢谢你。

    您是说我可以使用连接到 HFXT (高频晶体)引脚的10 MHz 外部晶体或振荡器、并将系统时钟设置为使用该外部时钟源?

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

    是的、想法就是这样。 FR59系列时钟系统仅提供一组特定的 DCO 频率、 在这些频率中看不到10MHz。

    更仔细地查看用户指南(SLAU367P)表3-5/3-7:使用 DCORSEL=1、DCOFSEL=5、和 DIVS=1、您可以10.5MHz 从 SMCLK 获得21/2=SMCLK。 这会足够接近吗?

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

    我已经尝试将 SMCLK 设置为10.5MHz。 不过、我发现 UART 端口无法接收正确的数据。

    这是我用于设置 UART 的参数。

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

    我不知道。 它建议过采样(UCOS16=1)似乎有点奇怪、因为我的桌面计算器显示 BRW=91 (UCOS16=0)、没有调制的情况下得到0.2%以内。

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

    我刚刚尝试了 UART 两种方式、并且在 Rx 或 Tx 方面没有明显的困难。

    您看到的 Rx 数据有什么不正确之处?

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

    非常感谢您的帮助。

    这是我当前的 UART 配置。 您能帮助我验证它是否设置正确吗?

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

    我在这里没有看到任何明显的错误。 您对时钟的正确程度如何?

    您看到的 Rx 数据有什么不正确之处? (误码? 超限? 什么也没有?)

    以下是我为 UART 编写的代码供参考:

    #if NO_MOD
        UCA0BRW = HZ / UART_BPS;        // Oughta round, but not needed now
    #else
        UCA0BRW = 5;
        UCA0MCTLW = (32u << 8) | (11u << 4) | UCOS16; // BRF=11, BRS=32, 16x
    #endif
    

    对于时钟:

    #elif (HZ == 10500000UL)
    	FRCTL0 = FRCTLPW | NWAITS_1;
    	CSCTL0 = 0xA500;
    	CSCTL3 = DIVA_0 | DIVS_1 | DIVM_1; // SMCLK=MCLK=DCO/2
    	CSCTL1 = DCOFSEL_5 | DCORSEL;   // RSEL=1, FSEL=5 -> 21MHz per Table 3-5
    #endif
    

    [编辑:轻微澄清]

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

    这是我的时钟设置。

    您看到的 Rx 数据有什么不正确之处? (误码? 超限? 什么也没有?)
     >>我已经为 MCU 配置了一些响应命令、但虽然某些命令可以运行、但其他命令不能运行。 我怀疑 RX 过程中可能出现错误。

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

    在此序列中的某个位置、您应该添加:

    FRAMCtl_A_configureWaitStateControl(FRAMCTL_A_ACCESS_TIME_CYCLES_1 );

    当超过8MHz 时、FRAM 不会突然完全出现故障、但您容易受到奇数毛刺脉冲的影响。