微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 时钟配置的仿真

时钟配置的仿真

时间:11-13 来源:互联网 点击:

__I uint32_t PIOPORCAP0; /*!< Offset: 0x100 (R/ ) POR captured PIO status 0 Register */
__I uint32_t PIOPORCAP1; /*!< Offset: 0x104 (R/ ) POR captured PIO status 1 Register */
uint32_t RESERVED11[11];
uint32_t RESERVED12[7];
__IO uint32_t BODCTRL; /*!< Offset: 0x150 (R/W) BOD control Register */
__IO uint32_t SYSTCKCAL; /*!< Offset: 0x154 (R/W) System tick counter calibration Register */
uint32_t RESERVED13[1];
uint32_t RESERVED14[5];
uint32_t RESERVED15[2];
uint32_t RESERVED16[34];

__IO uint32_t STARTAPRP0; /*!< Offset: 0x200 (R/W) Start logic edge control Register 0 */
__IO uint32_t STARTERP0; /*!< Offset: 0x204 (R/W) Start logic signal enable Register 0 */
__O uint32_t STARTRSRP0CLR; /*!< Offset: 0x208 ( /W) Start logic reset Register 0 */
__I uint32_t STARTSRP0; /*!< Offset: 0x20C (R/ ) Start logic status Register 0 */
__IO uint32_t STARTAPRP1; /*!< Offset: 0x210 (R/W) Start logic edge control Register 1 (LPC11UXX only) */
__IO uint32_t STARTERP1; /*!< Offset: 0x214 (R/W) Start logic signal enable Register 1 (LPC11UXX only) */
__O uint32_t STARTRSRP1CLR; /*!< Offset: 0x218 ( /W) Start logic reset Register 1 (LPC11UXX only) */
__I uint32_t STARTSRP1; /*!< Offset: 0x21C (R/ ) Start logic status Register 1 (LPC11UXX only) */
uint32_t RESERVED17[4];

__IO uint32_t PDSLEEPCFG; /*!< Offset: 0x230 (R/W) Power-down states in Deep-sleep mode Register */
__IO uint32_t PDAWAKECFG; /*!< Offset: 0x234 (R/W) Power-down states after wake-up from Deep-sleep mode Register*/
__IO uint32_t PDRUNCFG; /*!< Offset: 0x238 (R/W) Power-down configuration Register*/
uint32_t RESERVED18[110];
__I uint32_t DEVICE_ID; /*!< Offset: 0x3F4 (R/ ) Device ID Register */
} LPC_SYSCON_TypeDef;

#define LPC_APB0_BASE(0x40000000UL)

#define LPC_AHB_BASE(0x50000000UL)

#define LPC_SYSCON_BASE(LPC_APB0_BASE + 0x48000)

#define LPC_SYSCON((LPC_SYSCON_TypeDef *) LPC_SYSCON_BASE)

//************************************************************************************************

void SysCLK_config(void)

{

uint8_t i;

LPC_SYSCON->PDRUNCFG &= ~(1 < 5);//给系统振荡器上电

LPC_SYSCON->SYSOSCCTRL = 0x00000000;//系统振荡器未旁路,1~12MHz输入

for (i = 0; i < 200; i++) __nop();//延时等待振荡器稳定

LPC_SYSCON->SYSPLLCLKSEL = 0x00000001;//PLL输入选择外部晶体振荡

LPC_SYSCON->SYSPLLCLKUEN = 0x00;

LPC_SYSCON->SYSPLLCLKUEN = 0x01;//先写0后写1更新时钟源

while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01));//等待更新完成

LPC_SYSCON->SYSPLLCTRL = 0x00000023;//M=4、P=2,倍频后的时钟为48MHz

LPC_SYSCON->PDRUNCFG &= ~(1 < 7);//给PLL上电

while (!(LPC_SYSCON->SYSPLLSTAT & 0x01));//等待PLL锁定

LPC_SYSCON->MAINCLKSEL = 0x00000003;//主时钟选择PLL倍频后的时钟

LPC_SYSCON->MAINCLKUEN = 0x00;

LPC_SYSCON->MAINCLKUEN = 0x01;//先写0后写1更新时钟源

while (!(LPC_SYSCON->MAINCLKUEN & 0x01));//等待更新完成

LPC_SYSCON->SYSAHBCLKdiv = 0x00000001;//AHB为1分频,AHB时钟为48MHz

LPC_SYSCON->SYSAHBCLKCTRL |= (1<6);//使能GPIO时钟

}

void SystemInit(void)

{

SysCLK_config();

}

int main(void)

{

SystemInit ();//调用时钟配置函数

while(1)

{

;//空循环

}

}

(不要忘记最后一行有一个强制换行)

从上面可以看到,变量的申明都是以结构体的形式出现的,较为复杂,现在先不去讨论它。先把上述程序编译链接(点击工具条上的“Rebuild”按钮)无误后,点击工具条上的“Start/Stop Debug Session”按钮(或按Ctrl+F5)进入到调试模式。点击菜单Peripherals->Clocking & Power Control->Clock Generation Schematic,将会出现一个显示时钟结构的对话框,如下图所示。

从图中可以清楚地看出配置后各时钟的分配情况(如果时钟不对,可能是没有运行程序,只要点击工具条上的“Run”按钮(或直接按F5)就可以了),非常直观。大家还可对照前面的程序,自行更改相关内容,再仿真看看变化,以加深对时钟配置的了解。要更改仿真中的外部晶振的值可点击菜单Peripherals->Clocking & Power Control->System Oscillator Control进行更改,要更改内部RC振荡的值可点击菜单Peripherals->Clocking & Power Control->Internal Oscillator Control进行更改,要更改看门狗振荡的值可点击菜单Peripherals->Clocking & Power Control->从图中可以清楚地看出配置后各时钟的分配情况(如果时钟不对,可能是没有运行程序,只要点击工具条上的“Run”按钮(或直接按F5)就可以了),非常直观。大家还可对照前面的程序,自行更改相关内容,再仿真看看变化,以加深对时钟配置的了解。要更改仿真中的外部晶振的值可点击菜单Peripherals->Clocking

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

网站地图

Top