查看: 3973|回复: 5

[已解决] LPC54608开发板LAN8720A晶振跳线选择

[复制链接]

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
发表于 2017-10-25 14:30:06 | 显示全部楼层 |阅读模式
上次有发过关于想节省LAN8720 25M晶振的贴子。昨天pin3-12 生成了25M时钟,今天将原理图中的跳线JS4选到2-3 外部MCU输出的25MHz CLK。但是SDK_2.2_LPC54608J512\boards\lpcxpresso54608\driver_examples\enet\txrx_transfer_rxpoll   这个编译下载后,设备无反应。请问还需要哪些地方设置吗? 截图.png


最佳答案

paulkiyt 发表于 2017-10-25 17:33 并且,我将跳线调回外部晶振,同样的25M时钟生成函数还是加在主函数中,程序下载进行后,运行正常。所以 ... 那么这么说,可能就是生产的25Mhz不能满足LAN8720A芯片的需求。 这样 ...
回复

使用道具 举报

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20124
最后登录
2024-5-3
发表于 2017-10-25 15:54:05 | 显示全部楼层
我在想,你是直接在SDK的enet代码里面修改生成25M给LAN8720 芯片的吗?
我比较担心你把enet的模块时钟都变了。
我建议这样,能不能找一个外部的25Mhz时钟输入LAN8720 ,然后代码还是用SDK原来的代码,看看能不能跑起来,这样至少能保证硬件修改没有问题。
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2017-10-25 16:51:25 | 显示全部楼层
小恩GG 发表于 2017-10-25 15:54
我在想,你是直接在SDK的enet代码里面修改生成25M给LAN8720 芯片的吗?
我比较担心你把enet的模块时钟都变 ...

你好,SDK里的enet代码我没有修改,我只是增加了一个25M时钟生成函数和引脚配置(P3_12)增加内容:
1.在clock_config.c文件里增加了一个25M时钟生成函数,并在对应头文件里声明。
void BOARD_BootClock25M(void)
{
    /*!< Set up the clock sources */
    /*!< Set up FRO */
    POWER_DisablePD(kPDRUNCFG_PD_FRO_EN);                   /*!< Ensure FRO is on  */
    CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);                  /*!< Switch to FRO 12MHz first to ensure we can change voltage without accidentally
                                                                being below the voltage for current speed */
    POWER_SetVoltageForFreq(25000000U);             /*!< Set voltage for the one of the fastest clock outputs: CLKOUT clock output */
    CLOCK_SetFLASHAccessCyclesForFreq(12000000U);    /*!< Set FLASH wait states for core */

    /*!< Set up SYS PLL */
    const pll_setup_t pllSetup = {
        .pllctrl =  SYSCON_SYSPLLCTRL_SELI(52U) | SYSCON_SYSPLLCTRL_SELP(26U) | SYSCON_SYSPLLCTRL_SELR(0U),
        .pllmdec = (SYSCON_SYSPLLMDEC_MDEC(32597U)),
        .pllndec = (SYSCON_SYSPLLNDEC_NDEC(514U)),
        .pllpdec = (SYSCON_SYSPLLPDEC_PDEC(10U)),
        .pllRate = 25000000U,
        .flags =  PLL_SETUPFLAG_WAITLOCK | PLL_SETUPFLAG_POWERUP
    };
    CLOCK_AttachClk(kFRO12M_to_SYS_PLL);        /*!< Set sys pll clock source*/
    CLOCK_SetPLLFreq(&pllSetup);                 /*!< Configure PLL to the desired value */

    /*!< Set up dividers */
    CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false);                  /*!< Reset divider counter and set divider to value 1 */
    CLOCK_SetClkDiv(kCLOCK_DivClkOut, 0U, true);                  /*!< Reset CLKOUTDIV divider counter and halt it */
    CLOCK_SetClkDiv(kCLOCK_DivClkOut, 1U, false);                  /*!< Set CLKOUTDIV divider to value 1 */

    /*!< Set up clock selectors - Attach clocks to the peripheries */
    CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);                     /*!< Switch MAIN_CLK to FRO12M */
    CLOCK_AttachClk(kSYS_PLL_to_CLKOUT);                  /*!< Switch CLKOUT to SYS_PLL */
    /* Set SystemCoreClock variable. */
    SystemCoreClock = BOARD_BOOTCLOCKFRO12M_CORE_CLOCK;
}
2.在pinmux.c文件里增加P3_12引脚的配置
IOCON->PIO[3][12] = ((IOCON->PIO[3][12] &
    (~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))      /* Mask bits to zero which are setting */
      | IOCON_PIO_FUNC(PIO312_FUNC_ALT5)                     /* Selects pin function.: PORT312 (pin L2) is configured as CLKOUT */
      | IOCON_PIO_DIGIMODE(PIO312_DIGIMODE_DIGITAL)          /* Select Analog/Digital mode.: Digital mode. */
    );


3.然后再主函数里调用 BOARD_BootClock25M();

调用位置如下:

    /* Hardware Initialization. */
    CLOCK_EnableClock(kCLOCK_InputMux);
    /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    BOARD_InitPins();
   BOARD_BootClock25M();
    BOARD_BootClockFROHF48M();
    BOARD_InitDebugConsole();
          

    PRINTF("\r\nENET example start.\r\n");



回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2017-10-25 17:33:07 | 显示全部楼层
小恩GG 发表于 2017-10-25 15:54
我在想,你是直接在SDK的enet代码里面修改生成25M给LAN8720 芯片的吗?
我比较担心你把enet的模块时钟都变 ...

并且,我将跳线调回外部晶振,同样的25M时钟生成函数还是加在主函数中,程序下载进行后,运行正常。所以按照这个推断,我加入的函数并没有改掉SDK模块里的时钟。
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2017-10-25 17:33:16 | 显示全部楼层
小恩GG 发表于 2017-10-25 15:54
我在想,你是直接在SDK的enet代码里面修改生成25M给LAN8720 芯片的吗?
我比较担心你把enet的模块时钟都变 ...

并且,我将跳线调回外部晶振,同样的25M时钟生成函数还是加在主函数中,程序下载进行后,运行正常。所以按照这个推断,我加入的函数并没有改掉SDK模块里的时钟。
回复 支持 反对

使用道具 举报

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20124
最后登录
2024-5-3
发表于 2017-10-27 15:14:09 | 显示全部楼层
paulkiyt 发表于 2017-10-25 17:33
并且,我将跳线调回外部晶振,同样的25M时钟生成函数还是加在主函数中,程序下载进行后,运行正常。所以 ...

那么这么说,可能就是生产的25Mhz不能满足LAN8720A芯片的需求。
这样,你找下LAN8720A手册,看看这个芯片对输入25Mhz时钟是否有幅度等要求。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-5-4 10:18 , Processed in 0.148516 second(s), 27 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表