打印

类似的例程

[复制链接]
414|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heweibig|  楼主 | 2019-3-4 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我XT2外接的是16M的晶振,我想利用DCO给他升到32M,但是程序有时候是32M,有时候是8M等等等等,代码是
请用过的帮帮我呀 或者有类似的例程也行

相关帖子

沙发
zhenykun| | 2019-3-4 14:01 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
heweibig|  楼主 | 2019-3-4 14:05 | 只看该作者

void main(void) {
    WDTCTL = WDTPW+WDTHOLD;
    P1DIR |= BIT0;
    P1SEL |= BIT0;              //可以看ACLK的频率
    P2DIR |= BIT2;
    P2SEL |= BIT2;             //SMCLK
    P7DIR |= BIT7;
    P7SEL |= BIT7;             //MCLK

    P5SEL |= BIT2+BIT3;
    UCSCTL6 &= ~XT2OFF;          //打开XT2

    do
     {
       UCSCTL7 &= ~XT2OFFG;

使用特权

评论回复
地板
yszong| | 2019-3-4 14:08 | 只看该作者
发错了?

使用特权

评论回复
5
heweibig|  楼主 | 2019-3-4 18:04 | 只看该作者

void main(void) {
    WDTCTL = WDTPW+WDTHOLD;
    P1DIR |= BIT0;
    P1SEL |= BIT0;              //可以看ACLK的频率
    P2DIR |= BIT2;
    P2SEL |= BIT2;             //SMCLK
    P7DIR |= BIT7;
    P7SEL |= BIT7;             //MCLK

    P5SEL |= BIT2+BIT3;
    UCSCTL6 &= ~XT2OFF;          //打开XT2

    do
     {
       UCSCTL7 &= ~XT2OFFG;                                      //清除振荡器XT2失效标志
      SFRIFG1 &= ~OFIFG;                      // 清除振荡器失效标志
                                                                                                          //上面这句必须有,否则起振了也不会分配成功
     }while (UCSCTL7 & XT2OFFG);

   /*********************寄存器配置部分******************************/

    __bis_SR_register(SCG0);
    UCSCTL0 = 0;                                                        //设为0
    UCSCTL1 = DCORSEL_6;                    //DCO频率范围在50MHZ以下
    UCSCTL2 = FLLD_3 + 1;                   //D=8,N=1
    UCSCTL3 = SELREF_5 + FLLREFDIV_3;       //n=8,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);DCOCLKDIV=(N+1)*(FLLREFCLK/n);
    UCSCTL4 = SELA_4 + SELS_3 +SELM_3;      //ACLK的时钟源为DCOCLKDIV,MCLK\SMCLK的时钟源为DCOCLK
    UCSCTL5 = DIVA_5;                               //ACLK由DCOCLKDIV的32分频得到
                                         
    __bic_SR_register(SCG0);                //Enable the FLL control loop
   /**********************************************************************/
    while (SFRIFG1 & OFIFG){
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);         // 清除三类时钟标志位
                                                            // 这里需要清除三种标志位,因为任何一种
                                                            // 标志位都会将OFIFG置位
        SFRIFG1 &= ~OFIFG;                                  // 清除时钟错误标志位
    }
    P8SEL &= (~(1<<1));
    P8DIR |= (1<<1);
    while(1){
            P8OUT |= (1<<1);
            Delay_ms(1000);
            P8OUT &= (~(1<<1));
            Delay_ms(1000);
    }
}

使用特权

评论回复
6
wyjie| | 2019-3-4 18:07 | 只看该作者
看不出有什么问题

使用特权

评论回复
7
yszong| | 2019-3-4 18:10 | 只看该作者

这里有一个用4MHz的XT2,得到16MHz的DCLCLK的程序,你参考下
P1DIR |= BIT0;
P1SEL |= BIT0;              //可以看ACLK的频率
P2DIR |= BIT2;
P2SEL |= BIT2;             //SMCLK
P7DIR |= BIT7;
P7SEL |= BIT7;             //MCLK

P5SEL |= BIT2+BIT3;
UCSCTL6 &= ~XT2OFF;          //打开XT2

/*********************寄存器配置部分******************************/

__bis_SR_register(SCG0);
UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
UCSCTL1 = DCORSEL_4;                    //DCO频率范围在28.2MHZ以下
UCSCTL2 = FLLD_4 + 1;                   //D=16,N=1
UCSCTL3 = SELREF_5 + FLLREFDIV_3;       //n=8,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);DCOCLKDIV=(N+1)*(FLLREFCLK/n);
UCSCTL4 = SELA_4 + SELS_3 +SELM_3;      //ACLK的时钟源为DCOCLKDIV,MCLK\SMCLK的时钟源为DCOCLK
UCSCTL5 = DIVA_5 +DIVS_1;               //ACLK由DCOCLKDIV的32分频得到,SMCLK由DCOCLK的2分频得到
                                         //最终MCLK:16MHZ,SMCLK:8MHZ,ACLK:32KHZ

__bic_SR_register(SCG0);                //Enable the FLL control loop

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

__delay_cycles(8192);
do
{
  UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); //Clear XT2,XT1,DCO fault flags
  SFRIFG1 &= ~OFIFG;       //Clear fault flags
}while (SFRIFG1&OFIFG);

使用特权

评论回复
8
dengdc| | 2019-3-4 18:13 | 只看该作者
这个还是用的是内部的基准频率进行倍频得到的吧

使用特权

评论回复
9
wuhany| | 2019-3-4 18:16 | 只看该作者
XT2的4MHz的晶振应该是没有用到的

使用特权

评论回复
10
heweibig|  楼主 | 2019-3-4 18:18 | 只看该作者

他板子上是自带的4M晶振 我把他给卸了,装了一个16M的晶振上去  请问你有相关程序吗?

使用特权

评论回复
11
shimx| | 2019-3-4 18:22 | 只看该作者
楼主用的哪款芯片,系列不同会不一样的

使用特权

评论回复
12
dengdc| | 2019-3-4 18:25 | 只看该作者
什么意思,怎么升的??

使用特权

评论回复
13
jiahy| | 2019-3-4 18:28 | 只看该作者
采用DCO的怎么升频上去的?

使用特权

评论回复
14
shimx| | 2019-3-4 18:31 | 只看该作者
这个对时钟源的操作还是蛮清楚的

使用特权

评论回复
15
shimx| | 2019-3-4 18:34 | 只看该作者

只知道通过FLL可以将内部DCO频率固定在一个相对稳定的频率,
不知道DCO怎么把XT2倍频

使用特权

评论回复
16
heweibig|  楼主 | 2019-3-4 18:36 | 只看该作者
嗯,预料中的结果,先结贴吧,多谢大家啦

使用特权

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

本版积分规则

869

主题

13089

帖子

7

粉丝