对于旧系统升级、我们要将 TM4C1290连接到 FPGA 和两个 Duart 芯片。 我们将对芯片选择使用地址解码。 双曲由 tl16c752提供。
我们最初查看 GPIO 模式、但发现时序与 Duart 的读取/写入要求不匹配。
如果我们使用异步主机模式、我们可以输出时钟以在外部使用吗、这是否仍符合读取/写入/数据/地址线更改的时序?
系统时钟为外部时钟、EPI 模块将其设置为不进行修改即可使用。 从输入到输出的预期传播延迟是多少?
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.
对于旧系统升级、我们要将 TM4C1290连接到 FPGA 和两个 Duart 芯片。 我们将对芯片选择使用地址解码。 双曲由 tl16c752提供。
我们最初查看 GPIO 模式、但发现时序与 Duart 的读取/写入要求不匹配。
如果我们使用异步主机模式、我们可以输出时钟以在外部使用吗、这是否仍符合读取/写入/数据/地址线更改的时序?
系统时钟为外部时钟、EPI 模块将其设置为不进行修改即可使用。 从输入到输出的预期传播延迟是多少?
您好!
如果我们使用异步主机模式、我们可以输出时钟以在外部使用吗、这是否仍符合读取/写入/数据/地址线更改的时序?
[/报价]在 异步主机模式下、可以产生 EPICLK、尽管由于不需要时钟的异步协议的性质、外部器件通常不使用它。 请参阅数据表说明。 异步接口信号是针对 EPICLK 生成的。
[/quote]Unknown 说:系统时钟是外部时钟、并且将 EPI 设置为未经修改即可使用该时钟。 [/报价]你是说系统时钟是外部时钟? EPICLK 是内部生成的时钟。 EPI 模块不以任何外部(片外)生成的时钟作为参考时钟。
我知道波特时钟提供外部时钟,但不是源自系统时钟吗?
可以。
如果系统时钟设置为外部时钟源但未使用 PLL,我认为如果除数未设置 EPIClk =(分频器=0),EPI 时钟将等于系统时钟? SYSCLK:(SYSCLK /((分频器/ 2)+ 1)∗2)。
也许我错了外部时钟源的意思。 如果您将外部时钟源(相对于整个 MCU)视为 MCU 器件外部的时钟源、则不存在这样的时钟源。 MCU 系统时钟源只能来自 PLL 或其中一个振荡器(例如 MOSC、PIOSC、内部30kHz OSC 或外部32.768kHz OSC)。 如果 是将外部时钟源(相对于 EPI 模块)作为 EPI 模块的参考时钟、则选择是。 EPI 模块使用内部产生的系统时钟进行分频、以便生成 EPICLK。

如果您使用的是晶体、请注意以下限制。 如果向 MCU 提供单端时钟、则只能达到30.72Mhz (不知道为什么 EPICLK 具有这个特定频率)。
主振荡器(MOSC)。 主振荡器通过外部晶体提供频率精确的
这两种方式之一:外部单端时钟源连接到 OSC0输入管脚、或
外部晶体连接在 OSC0输入和 OSC1输出引脚之间。 如果 PLL 正在
使用时、晶振值可以是5 MHz 到25 MHz (包括)之间的任意频率。 请参阅
建议的晶振值和 PLL 寄存器编程见。 如果 PLL
没有被使用、晶体可以是4 MHz 到 CLB 之间的任何一个支持的频率
25 MHz。 单端时钟源范围从直流到
部分。
感谢 Charles、
我没有从 EPI 看到30.72Mhz、好像我得到16MHz (默认?) 当输入30.72时(测量)。
我的设置
SysCtlMOSCConfigSet(SYSCTL_MOSC_HIGHFREQ);
SysCtlClockOutConfig(SYSCTL_CLKOUT_MOSC | SYSCTL_CLKOUT_EN , 1);
SysCtlClockFreqSet(SYSCTL_OSC_MAIN | SYSCTL_USE_OSC, 30720000);
... removed gpio assignment ...
EPIDividerSet(EPI0_BASE, 0x00000000); // 0x00010001 1/2 (System) = 120MHz * 0.5 = 60MHz
EPIModeSet(EPI0_BASE, EPI_MODE_HB16 ); // General Purpose
EPIConfigHB16Set(EPI0_BASE,
EPI_HB16_MODE_ADDEMUX | // sets up data and address as separate, D[15:0].
EPI_HB16_WRWAIT_0 | // write wait 2 EPI clocks
EPI_HB16_RDWAIT_0 , // write wait 2 EPI clocks
0);
EPIAddressMapSet(EPI0_BASE,
EPI_ADDR_PER_SIZE_64KB |
EPI_ADDR_PER_BASE_C // set base to 0xC0000000
);
您好!
SysCtlClockFreqSet() API 不支持单端输入时钟。 现在传递的参数将导致 SysCtlClockFreqSet()认为没有振荡器源,因此默认选择了 PIOSC (16MHz)。

尽管在外部、您是在 OSC1保持开路的情况下驱动单端时钟输入、但请尝试让 API 误以为它是具有以下调用的25MHz MOSC。
SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_OSC)、25000000);
请显示以下寄存器的设置。 您可能需要手动写入某些字段才能使其正常工作。


好的、我手动设置
(gdb)设置{int32_t}0x400fe0b0 = 0x03300000
(gdb) x 0x400FE0B0
0x400fe0b0:0x03300000
调用之后、时钟再次正确输出到 EPI 上。 不知道为什么它以前工作了...
应忽略 SysCtlClockFreqSet 和 HWREG (SYSCTL_RSCLKCFG_R)= 0x03300000;
不是那么 简单... 重新写入 SysCtlClockFreqSet 和看到正确的时钟输出。