微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用LPC1850做的小板子时钟有问题不能正常DEBUG,求帮助

用LPC1850做的小板子时钟有问题不能正常DEBUG,求帮助

时间:10-02 整理:3721RD 点击:

用LPC1850做了一块小板子,最近正在边焊接边调试,可是一开始就遇到了时钟问题,惆怅自不用提。此帖我会在调试过程中根据现象及问题不断更新,赘述请大家见谅,请尽量耐心的读,也许在您看来只是很低级的错误,请不吝指教。

首先问一个关键问题:LPC1850的XTAL1和XTAL2上是否必须要焊上12MHz的晶振且保证起振?不焊这个晶振能否用IRC(内部时钟)完成所有时钟要求?

下面进入正题。由于想要边焊接边调试,现在板子上只焊了LPC1850及其周围的滤波电容,DEBUG使能的上拉电阻,和#ISP的上拉电阻,JTAG调试接口,还将几个GPIO连接的LED焊上了。个人觉得目前这种情况应该能够进行JTAG调试了,事实是能开始调试,但调试有问题。经过对LPC1850用户手册的初步咀嚼,LPC1850的启动流程如下


首先将P2_9, P2_8, P1_2, P1_1全部上拉,即没有启动代码。此处是本人的疑惑点之一:启动流程上描述,启动失败后P1_1引脚会以1Hz平率变换60s(给NXP的官方专家发过信,此1Hz来自IRC),可是我检测P1_1并没有此变化,始终拉高。在这种情况下,只有将#ISP引脚拉低,复位进入ISP模式才能连接JTAG进入debug,否则Keil在debug时提示SWD Communication Failed。另外,根据我对用户手册的理解,进入ISP后,IRC和PLL1共同作用产生96MHZ的时钟,可是我的板子进入ISP后CLK0/1/2/3都是67~68MHz。如果不进入ISP,CLK0/1/2/3的输出是16~25MHz,且有明显的噪声干扰。

之后,我焊上外部NOR Flash,使{P2_9, P2_8, P1_2, P1_1} = 0011,个人觉得由于此时NOR Flash中没有烧任何东西,所以还是会启动失败,最后P1_1进行60S变换,事实是,检测不到P1_1的变换。不过在这种情况下,无论进没进ISP模式,都能连接JTAG进入DEBUG。时钟频率同上。

可是不管在哪种模式下进入debug后,通过JTAG读到的寄存器的值确实与手册中描述的寄存器复位值有出入。下面列举其一:PLL1_CTRL寄存器(PLL1控制寄存器,隶属于CGU(时钟产生单元模块))。根据手册中描述的该寄存器的复位值应该是01000003H,而我的板子上的该寄存器的复位值是01000000H。我尝试向PLL1_CTRL中写值,但其MSEL段(应该是倍频倍数)总是写不进去,且时能PLL1后,PLL1_STAT的锁定位也总是不能置1(个人觉得这里是关键,PLL1_CTRL不能配置,PLL1_STAT不能锁定也就不能提供正确的基础时钟)。

初步写的小测试程序只是想把连接LED的引脚拉高,点亮LED,可是我忽略以上所有的不正常去配置GPIO时,总是会进入HardFault_Handler中断。

继续的对user manual进行咀嚼,有一个新发现:(这是2014最新版的user manual,有一些变动,还没有找到中文版的)

1. After a power-up, reset, or when waking up from deep-power down mode. In these

situations, the boot code executes. After the boot process has completed, the clock

configuration of the part is as follows:

– The core clock BASE_M3_CLK is connected to the outputof PLL1 and running at

96 MHz.

– The clock source for the PLL1 is the 12 MHz IRC.

2. After wake-up from Deep-sleep or power-down modes. In this case, BASE_M3_CLK


is connected to the IRC running at 12 MHz.

板子的时钟在两种方式下不一样:(1)上电、复位、从深度掉电中唤醒:基础时钟的时钟源是PLL1 = 96M;(2)从掉电或深度睡眠模式唤醒:基础时钟的时钟源是IRC = 12M。在进入DEBUG后,我读了一下BASE_M3_CLK寄存器的内容,发现他的CLK_SEL段的值是1,也就是选择IRC作为时钟源。此处疑惑难平:我每次都是关闭板子电源,在重新启动,或者按复位键复位,怎么分析都应该是第一种情况啊,为什么貌似进了第二种模式呢?

纠结神马的已是平常,只求专家们给点意见解救我于水火。可以加我QQ讨论405631944,拜谢!

下面奉上LPC1850部分原理图





建议用外部晶振,内部晶振容易飘

程序启动代码中有关于使用晶振的来源 可以设置一下 另外 如果CPU没有检测到外部晶振就会自动切换至内部晶振

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top