LPC1768时钟配置
来源:互联网 发布:mysql 存储过程 函数 编辑:程序博客网 时间:2024/04/30 12:25
购买LPC1768已经有一段时间了,但是由于之前工作比较忙,一直没有来得及学习,所以搁置了一段时间。
最近终于有一些时间来学习了,板子上的资源其实还是蛮丰富的,cortex-m3有的,基本上在这个板子上都引出来了,
而且学习的帮助文档也不少,所以学习起来比较方便。
板子的样子如下图所示,具体的详细资源,各位可以自行去查找。
应该来说,板子的学习,肯定会逃不过时钟的配置,因此下面将我配置时钟的过程一一记录下来,以便后期工作需要。
其实LPC1768的时钟配置过程还是比较清晰的。
LPC1768的时钟源可以来自三个:
1)内部RC振荡器
内部振荡器可看作看门狗定时器的时钟源,也可作PLL0和cpu的时钟源,但是无法作为usb的时钟源,因为精度达不到。而且如果CAN波特率高于100kb/s,则也不适用了。在系统上电时,LPC1768都使用内部振荡器,直到软件将其切换为另一种可用的时钟源。
2)主振荡器
主振荡器可作为CPU的时钟源,需要通过分频和倍频进行配置使用。基本会使用主振荡器作为时钟源
3)RTC振荡器
RTC振荡器可提供1Hz-32kHz的RTC时钟输出,可用作PLL0、CPU和看门狗定时的时钟源。
LPC1768时钟配置会涉及到以下几个过程:
1)时钟源选择
时钟源的选择就涉及到了SCS寄存器的配置
2)时钟分频
涉及到CCLKCFG寄存器的配置
3)PLL0配置
涉及到CLKSRCSEL、PLL0CFG、PLL0FEED等寄存器的配置
4)PLL1配置
涉及到PLL1CFG、PLL1FEED等寄存器的配置
5)外设时钟输出
具体的代码如下:
#define CLOCK_SETUP 1#define SCS_Val 0x00000020#define CLKSRCSEL_Val 0x00000001#define PLL0_SETUP 1#define PLL0CFG_Val 0x00050063#define PLL1_SETUP 1#define PLL1CFG_Val 0x00000023#define CCLKCFG_Val 0x00000003#define USBCLKCFG_Val 0x00000000#define PCLKSEL0_Val 0x00000000#define PCLKSEL1_Val 0x00000000#define PCONP_Val 0x042887DE#define CLKOUTCFG_Val 0x00000000#define FLASH_SETUP 1#define FLASHCFG_Val 0x0000303A//时钟配置void SystemInit(){#if(CLOCK_SETUP)//时钟源设置LPC_SC->SCS = SCS_Val;if(SCS_Val &(1 << 5)){while((LPC_SC->SCS & (1 << 6)) == 0);//主振荡器已稳定}//PLL倍频出来的时钟送给CPU前的分频, CCLKCFG_Val = 3, 为4分频LPC_SC->CCLKCFG = CCLKCFG_Val; //setup clock divider#if (PLL0_SETUP)LPC_SC->CLKSRCSEL = CLKSRCSEL_Val;LPC_SC->PLL0CFG =PLL0CFG_Val;LPC_SC->PLL0FEED = 0xAA;LPC_SC->PLL0FEED = 0x55;LPC_SC->PLL0CON = 0x01;LPC_SC->PLL0FEED = 0xAA;LPC_SC->PLL0FEED = 0x55;while (!(LPC_SC->PLL0STAT & (1<<26))); // Wait for PLOCK0 LPC_SC->PLL0CON = 0x03; /* PLL0 Enable & Connect */LPC_SC->PLL0FEED = 0xAA;LPC_SC->PLL0FEED = 0x55;while(!(LPC_SC->PLL0STAT & ((1<<25) | (1<<24))));#endif#if (PLL1_SETUP)LPC_SC->PLL1CFG = PLL1CFG_Val;LPC_SC->PLL1FEED = 0xAA;LPC_SC->PLL1FEED = 0x55;LPC_SC->PLL1CON = 0x01; /* PLL1 Enable */LPC_SC->PLL1FEED = 0xAA;LPC_SC->PLL1FEED = 0x55;while (!(LPC_SC->PLL1STAT & (1<<10)));/* Wait for PLOCK1 */LPC_SC->PLL1CON = 0x03; /* PLL1 Enable & Connect */LPC_SC->PLL1FEED = 0xAA;LPC_SC->PLL1FEED = 0x55;while (!(LPC_SC->PLL1STAT & ((1<< 9) | (1<< 8))));/* Wait for PLLC1_STAT & PLLE1_STAT */#elseLPC_SC->USBCLKCFG = USBCLKCFG_Val; /* Setup USB Clock Divider */#endifLPC_SC->PCLKSEL0 = PCLKSEL0_Val; /* Peripheral Clock Selection */LPC_SC->PCLKSEL1 = PCLKSEL1_Val;LPC_SC->PCONP = PCONP_Val; /* Power Control for Peripherals */LPC_SC->CLKOUTCFG = CLKOUTCFG_Val; /* Clock Output Configuration */#endif#if (FLASH_SETUP == 1)LPC_SC->FLASHCFG = FLASHCFG_Val;#endif}
这样就配置完成,并且配置的100MHz的时钟频率。
Fcco = 12MHz/4 * 2 * 100 / 6 = 100MHz
- LPC1768时钟配置
- LPC1788和LPC1768时钟配置的差异
- LPC1768菜鸟学习之时钟配置
- lpc1768 时钟与定时器
- LPC1768 -- RTC实时时钟
- LPC1768时钟详解
- lpc1768
- 使用LPC1768实现的数字时钟和温度计
- 时钟配置
- LPC1768简述
- LPC1768 UART0
- S3C2440的时钟配置
- lm3s时钟配置
- MSP430x2xx的时钟配置
- STM32定时器时钟配置
- C8051F340系统时钟配置
- win2003时钟服务配置
- linux时钟服务器配置
- Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持
- kernel learn
- 栈的简易应用,愚人节的礼物
- nefu 457(矩阵连乘)
- 实用级反主动防御rootkit设计思路
- LPC1768时钟配置
- android gridview setOnItemClickListener没有响应
- Android使用Zxing扫描二维码过程解决三星note1竖屏后花屏问题
- mysql 存储过程 模拟 php的explode 函数
- struts2表单验证里field-validator type值一共可以取哪些?都什么含义?
- Calendar和Date的常见用法
- break的fall through
- android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位
- leetcode: Add Binary