在线时间276 小时
UID2086952
注册时间2015-8-9
NXP金币253
TA的每日心情 | 开心 2023-6-2 13:32 |
---|
签到天数: 272 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4413
- 最后登录
- 2023-6-2
|
本帖最后由 andrewz 于 2016-12-1 14:01 编辑
好了,既然是全手打的,希望大家多多支持.
工程需要用到两个有关芯片的现成的文件,Keil_startup_LPC8xx.s和LPC8xx.h
以及一些其他的相关头文件和库,如core_cm0plus.h core_cmFunc.h core_cmInstr.h stdio.h string.h
把.s文件中的时钟初始化函数删掉了. stack_size改为0x400.
因而,需要自己写时钟配置函数.- #include "./bsp/chip/LPC8xx.h"
- #define SYSCON_PDRUNCFG_SYSPLL_PD ((unsigned long)1<<7)
- #define SYSCON_PDRUNCFG_SYSOSC_PD ((unsigned long)1<<5)
- #define SYSCON_PDRUNCFG_IRC_PD ((unsigned long)1<<1)
- #define SYSCON_SYSPLLCLKUEN_ENA ((unsigned long)1<<0)
- #define SYSCON_SYSPLLCTRL_MSEL_SHIFT ((unsigned long)0)
- #define SYSCON_SYSPLLCTRL_PSEL_SHIFT ((unsigned long)5)
- #define SYSCON_SYSPLLSTAT_LOCK ((unsigned long)1<<0)
- #define SYSCON_MAINCLKSEL_SEL_SHIFT ((unsigned long)0)
- #define SYSCON_MAINCLKUEN_ENA ((unsigned long)1<<0)
- void Syscon_init(void){
- LPC_SYSCON->PDRUNCFG&=~SYSCON_PDRUNCFG_SYSPLL_PD;
- LPC_SYSCON->SYSPLLCLKSEL=0x00000000;
- LPC_SYSCON->SYSPLLCLKUEN&=~SYSCON_SYSPLLCLKUEN_ENA;
- LPC_SYSCON->SYSPLLCLKUEN|=SYSCON_SYSPLLCLKUEN_ENA;
-
- LPC_SYSCON->SYSPLLCTRL=((4<<SYSCON_SYSPLLCTRL_MSEL_SHIFT)|(0<<SYSCON_SYSPLLCTRL_PSEL_SHIFT));
-
- while((LPC_SYSCON->SYSPLLSTAT&SYSCON_SYSPLLSTAT_LOCK)==0);
-
- LPC_SYSCON->MAINCLKSEL=0;
- LPC_SYSCON->MAINCLKSEL=(3<<SYSCON_MAINCLKSEL_SEL_SHIFT);
- LPC_SYSCON->MAINCLKUEN=0;
- LPC_SYSCON->MAINCLKUEN|=SYSCON_MAINCLKUEN_ENA;
- }
复制代码
理论上,这样系统的时钟就设置好了,应该PLL的输出是12M*5/2=30M.
根据UM10800:
此时的main clock应该是30M.
但是通过对单片机进一步使用.发现这里的设置/2并没有起作用.
似乎AHB的速度是60M,也就是说分频项无作用.
通过对UART/SCT/Systick的实际测量.
AHB的速度确实是60M.
那么,这个单片机实际上能跑100M吗?
希望有弄明白的坛友一起分享下.
|
|