打印
[新手园地]

ddllxxrr笔记二:了解时钟

[复制链接]
3607|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
打开手册可以看到系统是由五个时钟源而来

那么怎么控制它们呢?
打开个LED的程序
到有疑问的变量上方点击右键。

点击到定义,可以找到


typedef struct
{

__IO uint32_t
XTL12M_EN:1;


__IO uint32_t
XTL32K_EN:1;


__IO uint32_t
OSC22M_EN:1;


__IO uint32_t
OSC10K_EN:1;


__IO uint32_t
PD_WU_DLY:1;


__IO uint32_t
PD_WU_INT_EN:1;


__IO uint32_t
PD_WU_STS:1;


__IO uint32_t
PWR_DOWN:1;


__IO uint32_t
PD_WAIT_CPU:1;


__I
uint32_t
RESERVE:23;

} SYSCLK_PWRCON_T;

再查这个结构体,可查出:

是在另一个结构体中:

typedef struct
{

SYSCLK_PWRCON_T
PWRCON;


SYSCLK_AHBCLK_T
AHBCLK;


SYSCLK_APBCLK_T
APBCLK;


SYSCLK_CLKSTATUS_T CLKSTATUS;


SYSCLK_CLKSEL0_T
CLKSEL0;


SYSCLK_CLKSEL1_T
CLKSEL1;


SYSCLK_CLKDIV_T
CLKDIV;


SYSCLK_CLKSEL2_T
CLKSEL2;


SYSCLK_PLLCON_T
PLLCON;


SYSCLK_FRQDIV_T
FRQDIV;



} SYSCLK_T;

再查SYSCLK_T


#define SYSCLK
((SYSCLK_T *) SYSCLK_BASE)


原来是指向基地址的结构体。

同样方法可找到 CLKSEL0的结构。


从手册上可查出其控制系统时钟选择的。








了解上述就可以编出小灯亮的速度不一样的程序,就是通过改变系统的时钟。




#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"


int main (void)
{
UNLOCKREG();               
        
SYSCLK->PWRCON.OSC10K_EN = 1;
    SYSCLK->PWRCON.XTL12M_EN = 1;
DrvSYS_Delay(5000);              
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT);         //  设置GPB10端口为输出模式
DrvGPIO_ClrBit(E_GPB, 10);            //  清GPB10端口  蜂鸣器不叫唤
DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT);      
DrvGPIO_Open(E_GPA, 3, E_IO_OUTPUT);         
DrvGPIO_Open(E_GPA, 4, E_IO_OUTPUT);         
DrvGPIO_Open(E_GPA, 5, E_IO_OUTPUT);         
while(1)              
{
  SYSCLK->CLKSEL0.HCLK_S = 3;
  SYSCLK->CLKSEL0.STCLK_S= 3;
  DrvGPIO_SetPortBits(E_GPA,0xfb);
  DrvSYS_Delay(1000);
  DrvGPIO_SetPortBits(E_GPA,0xf7);
  DrvSYS_Delay(1000);
  DrvGPIO_SetPortBits(E_GPA,0xef);
  DrvSYS_Delay(1000);
  DrvGPIO_SetPortBits(E_GPA,0xdf);
  DrvSYS_Delay(1000);

  SYSCLK->CLKSEL0.HCLK_S = 7;
  SYSCLK->CLKSEL0.STCLK_S= 7;

  DrvGPIO_SetPortBits(E_GPA,0xfb);
  DrvSYS_Delay(1000000);
  DrvGPIO_SetPortBits(E_GPA,0xf7);
  DrvSYS_Delay(1000000);
  DrvGPIO_SetPortBits(E_GPA,0xef);
  DrvSYS_Delay(1000000);
  DrvGPIO_SetPortBits(E_GPA,0xdf);
  DrvSYS_Delay(1000000);

}
}

打包的工程:

NUCtest1.rar (2.29 MB)






相关帖子

沙发
nixianmin| | 2011-9-12 10:17 | 只看该作者
顶下,最近同学来了,都没时间看,要赶上大家的进度

使用特权

评论回复
板凳
hotpower| | 2011-9-12 11:07 | 只看该作者
很好,继续努力

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6955

帖子

67

粉丝