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

时钟配置的仿真

时间:11-13 来源:互联网 点击:
在ARM-MDK开发环境中,提供了很好用的时钟配置仿真模式,为学习LPC1114的时钟配置提供了方便,下面就来详细讨论一下它的用法。

要进行仿真,必须先把程序进行编译,正确无误后才能进入到仿真模式。为此,先给出主函数的内容,如下。

void SystemInit(void)

{

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

}

int main(void)

{

SystemInit ();//调用系统初始化函数

while(1)

{

;//空循环

}

}

在上述程序中可以看出,主函数的写法和普通单片机开发的没有什么两样,都有一个死循环,因为这里只做时钟配置的仿真,所以在调用时钟配置函数后就进行一个空循环。只有三点要特别注意一下:一是这里的main函数必须是整型(int型)的;二是在程序结束的最后一行要有一个换行(即要回一下车),否则会有警告出现;三是在项目自动加载的启动文件中规定,程序中必须要有一个系统初始化的函数(SystemInit),否则程序不能编译链接。所以在上述程序中虽然只调用一个时钟配置函数,但还是要把它放入到系统初始化函数中去供主函数调用。

但是,把上述函数及前面的时钟配置函数写到主程序后,还是编译不过的,会报两条错误,说“uint8_t”和“LPC_SYSCON”没有定义。这是因为程序没有包含一些特定的头文件,在这些头文件内才有相关变量的申明。要程序顺利编译通过,必须要把这些头文件包含进来。但是,由于开发LPC1114所需要的头文件很多,且有些头文件还有彼此的依赖关系,对于不同的开发环境,定义的名称也不一致,因此,为了减小学习的挫折感,先快速的把我们的第一个程序运行起来,下面用不包含头文件的方式,把程序所用到的内容全部都列出来,这样只要把下面的程序复制到开发环境中,就可以顺利通过编译了。

程序代码如下:

#define__IOvolatile

#define__Ovolatile

#define__Ivolatile const

typedef unsignedchar uint8_t;

typedef unsigned shortint uint16_t;

typedef unsignedint uint32_t;

typedef struct
{
__IO uint32_t SYSMEMREMAP; /*!< Offset: 0x000 (R/W) System memory remap Register */
__IO uint32_t PRESETCTRL; /*!< Offset: 0x004 (R/W) Peripheral reset control Register */
__IO uint32_t SYSPLLCTRL; /*!< Offset: 0x008 (R/W) System PLL control Register */
__I uint32_t SYSPLLSTAT; /*!< Offset: 0x00C (R/ ) System PLL status Register */
uint32_t RESERVED0[4];

__IO uint32_t SYSOSCCTRL; /*!< Offset: 0x020 (R/W) System oscillator control Register */
__IO uint32_t WDTOSCCTRL; /*!< Offset: 0x024 (R/W) Watchdog oscillator control Register */
__IO uint32_t IRCCTRL; /*!< Offset: 0x028 (R/W) IRC control Register */
uint32_t RESERVED1[1];
__I uint32_t SYSRSTSTAT; /*!< Offset: 0x030 (R/ ) System reset status Register */
uint32_t RESERVED2[3];
__IO uint32_t SYSPLLCLKSEL; /*!< Offset: 0x040 (R/W) System PLL clock source select Register */
__IO uint32_t SYSPLLCLKUEN; /*!< Offset: 0x044 (R/W) System PLL clock source update enable Register */
uint32_t RESERVED3[10];

__IO uint32_t MAINCLKSEL; /*!< Offset: 0x070 (R/W) Main clock source select Register */
__IO uint32_t MAINCLKUEN; /*!< Offset: 0x074 (R/W) Main clock source update enable Register */
__IO uint32_t SYSAHBCLKdiv; /*!< Offset: 0x078 (R/W) System AHB clock divider Register */
uint32_t RESERVED4[1];

__IO uint32_t SYSAHBCLKCTRL; /*!< Offset: 0x080 (R/W) System AHB clock control Register */
uint32_t RESERVED5[4];
__IO uint32_t SSP0CLKdiv; /*!< Offset: 0x094 (R/W) SSP0 clock divider Register */
__IO uint32_t UARTCLKdiv; /*!< Offset: 0x098 (R/W) UART clock divider Register */
__IO uint32_t SSP1CLKdiv; /*!< Offset: 0x09C (R/W) SSP1 clock divider Register */
uint32_t RESERVED6[1];
uint32_t RESERVED7[11];

__IO uint32_t WDTCLKSEL; /*!< Offset: 0x0D0 (R/W) WDT clock source select Register */
__IO uint32_t WDTCLKUEN; /*!< Offset: 0x0D4 (R/W) WDT clock source update enable Register */
__IO uint32_t WDTCLKdiv; /*!< Offset: 0x0D8 (R/W) WDT clock divider Register */
uint32_t RESERVED9[1];

__IO uint32_t CLKOUTCLKSEL; /*!< Offset: 0x0E0 (R/W) CLKOUT clock source select Register */
__IO uint32_t CLKOUTUEN; /*!< Offset: 0x0E4 (R/W) CLKOUT clock source update enable Register */
__IO uint32_t CLKOUTdiv; /*!< Offset: 0x0E8 (R/W) CLKOUT clock divider Register */
uint32_t RESERVED10[5];

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

网站地图

Top