我是靠谱客的博主 有魅力西牛,最近开发中收集的这篇文章主要介绍CC2530系统时钟,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CC2530系统时钟:
16MHz(内部RC振荡器)、32MHz(外部晶振)
上电模式16MHz 精度:内部<外部晶振 无线必须使用32MHz!!!
上电模式16MHz——>等待 稳定后——>切换到32MHz

CLKCONCMD     :时钟控制命令寄存器(设置是16MHz还是32MHz)
CLKCONSTA       :时钟控制状态寄存器<只读 >(通过读取寄存器判断外部晶振稳定)

16MHz————>32MHz:
CLKCONCMD &= ~0x40;       //OSC位清0,选择系统时钟源为32MHz晶振
while(CLKCONSTA & 0x40); //等待外部晶振稳定
CLKCONCMD &= ~0x07;      //设置当前系统时钟的速度为32MHz
32MHz————>16MHz:
CLKCONCMD |= 0x40;         //OSC位清0,选择系统时钟源为16MHz晶振
while(!(CLKCONSTA & 0x40));//等待外部晶振稳定
CLKCONCMD |= 0x01;//设置当前系统时钟的速度为16MHz

 

#include "ioCC2530.h"

#define D6 P1_4
 
#define sw2 P0_1

unsigned char F_clk = 16;

void Delay(unsigned int t)
{
  while(t--);
}

void Init_prot()
{
  P1SEL &= ~0x1b;
  P1DIR |= 0x1b;
  P1 &= ~0x1b;
}

void Set_Clock(unsigned char clk)
{
  switch(clk)
  {
  case 16:
    CLKCONCMD |= 0x40;
    while(!(CLKCONSTA & 0x40));
    CLKCONCMD |= 0x01;
    break;
    
  case 32:
    CLKCONCMD &= ~0x40;
    while(CLKCONSTA & 0x40);
    CLKCONCMD &= 0x70;
    break;
  }
}

void Scan_keys()
{
  if(sw2 == 0)
  {
    Delay(200);
    if(sw2 == 0)
    {
      while(sw2 == 0)
        
        if(F_clk == 16)
        {
          Set_Clock(32);
          F_clk = 32;
        }
        else if(F_clk == 32)
        {
          Set_Clock(16);
          F_clk = 16;
        }
      
    }
  }
}

void main()
{
  Init_prot();
  while(1)
  {
    D6 = 1;
    Delay(60000);
    Scan_keys();
    Delay(60000);
    Scan_keys();
    D6 = 0;
    Delay(60000);
    Scan_keys();
    Delay(60000);
    Scan_keys();
  }
}

最后

以上就是有魅力西牛为你收集整理的CC2530系统时钟的全部内容,希望文章能够帮你解决CC2530系统时钟所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部