时钟配置的仿真
要进行仿真,必须先把程序进行编译,正确无误后才能进入到仿真模式。为此,先给出主函数的内容,如下。
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];
时钟配置仿 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)