智能车制作

标题: 有会K60的朋友进来下... [打印本页]

作者: 柯南一梦    时间: 2012-1-2 14:30
标题: 有会K60的朋友进来下...
你们的外部时钟是多少的啊 8M 还是更高的...你们的锁相环怎么配的啊 有的为什么给的外部晶振是50啊......求大神们指点....
作者: chiusir    时间: 2012-1-4 15:49
这个还是比较容易的,欢迎交流!
作者: 荔枝糖葫芦    时间: 2012-2-10 20:01
同问50Mhz……
作者: shenjun    时间: 2012-2-18 13:11
超频啊               我猜的

作者: 笑傲江湖ycj    时间: 2012-2-22 23:40
超频只需设置两个寄存器MCG_C5和MCG_C6
作者: 亿千二    时间: 2012-3-21 15:57
笑傲江湖ycj 发表于 2012-2-22 23:40
超频只需设置两个寄存器MCG_C5和MCG_C6

哥们   MCG_C6怎么设置啊       我明白分频不懂倍频    k60是不是像xs128一样锁相环有公式啊  
作者: 亿千二    时间: 2012-3-21 15:57
chiusir 发表于 2012-1-4 15:49
这个还是比较容易的,欢迎交流!

哥们   MCG_C6怎么设置啊       我明白分频不懂倍频    k60是不是像xs128一样锁相环有公式啊  
作者: chiusir    时间: 2012-3-31 16:37
//锁相环频率为50/15*54=180M测试函数
void pllinit180M(void)
{
        uint32_t temp_reg;
        //使能IO端口时钟   
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                              | SIM_SCGC5_PORTB_MASK
                              | SIM_SCGC5_PORTC_MASK
                              | SIM_SCGC5_PORTD_MASK
                              | SIM_SCGC5_PORTE_MASK );
    //这里处在默认的FEI模式
    //首先移动到FBE模式
    MCG_C2 = 0;  
    //MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;
    //初始化晶振后释放锁定状态的振荡器和GPIO
    SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
    LLWU_CS |= LLWU_CS_ACKISO_MASK;
   
    //选择外部晶振,参考分频器,清IREFS来启动外部晶振
    //011 If RANGE = 0, Divide Factor is 8; for all other RANGE values, Divide Factor is 256.
    MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
   
    //等待晶振稳定            
    //while (!(MCG_S & MCG_S_OSCINIT_MASK)){}              //等待锁相环初始化结束
    while (MCG_S & MCG_S_IREFST_MASK){}                  //等待时钟切换到外部参考时钟
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}
   
    //进入FBE模式,
    //0x18==25分频=2M,
    //0x08==15分频=3.333M
    //0x09==16分频=3.125M,
    //0x10==17分频=2.94M
    //0x11==18分频=2.7778M
    //0x12==19分频=2.63M,
    //0x13==20分频=2.5M   
    MCG_C5 = MCG_C5_PRDIV(0x0e);               
   
    //确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
    MCG_C6 = 0x0;
   
    //保存FMC_PFAPR当前的值
    temp_reg = FMC_PFAPR;
   
    //通过M&PFD置位M0PFD来禁止预取功能
    FMC_PFAPR |= FMC_PFAPR_M7PFD_MASK | FMC_PFAPR_M6PFD_MASK | FMC_PFAPR_M5PFD_MASK
                     | FMC_PFAPR_M4PFD_MASK | FMC_PFAPR_M3PFD_MASK | FMC_PFAPR_M2PFD_MASK
                     | FMC_PFAPR_M1PFD_MASK | FMC_PFAPR_M0PFD_MASK;   
    ///设置系统分频器
    //MCG=PLL, core = MCG, bus = MCG/3, FlexBus = MCG/3, Flash clock= MCG/8
    SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(2)
                 | SIM_CLKDIV1_OUTDIV3(2) | SIM_CLKDIV1_OUTDIV4(7);      
   
    //从新存FMC_PFAPR的原始值
    FMC_PFAPR = temp_reg;
   
    //设置VCO分频器,使能PLL为100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26
    MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(30);  //VDIV = 31 (x54)
                                                  //VDIV = 26 (x50)
    while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set   
    while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set   
   
    //进入PBE模式   
    //通过清零CLKS位来进入PEE模式
    // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
    MCG_C1 &= ~MCG_C1_CLKS_MASK;
   
    //等待时钟状态位更新
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
    //SIM_CLKDIV2 |= SIM_CLKDIV2_USBDIV(1);  
   
    //设置跟踪时钟为内核时钟
    SIM_SOPT2 |= SIM_SOPT2_TRACECLKSEL_MASK;       
    //在PTA6引脚上使能TRACE_CLKOU功能
    PORTA_PCR6 = ( PORT_PCR_MUX(0x7));  
    //使能FlexBus模块时钟
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;
    //在PTA6引脚上使能FB_CLKOUT功能
    PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
}
作者: chiusir    时间: 2012-3-31 16:37
//锁相环频率为100M测试函数
void pllinit100M(void)
{
        uint32_t temp_reg;
        //使能IO端口时钟   
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                              | SIM_SCGC5_PORTB_MASK
                              | SIM_SCGC5_PORTC_MASK
                              | SIM_SCGC5_PORTD_MASK
                              | SIM_SCGC5_PORTE_MASK );
    //这里处在默认的FEI模式
    //首先移动到FBE模式
    MCG_C2 = 0;  
    //MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;
    //初始化晶振后释放锁定状态的振荡器和GPIO
    SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
    LLWU_CS |= LLWU_CS_ACKISO_MASK;
   
    //选择外部晶振,参考分频器,清IREFS来启动外部晶振
    //011 If RANGE = 0, Divide Factor is 8; for all other RANGE values, Divide Factor is 256.
    MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
   
    //等待晶振稳定            
    //while (!(MCG_S & MCG_S_OSCINIT_MASK)){}              //等待锁相环初始化结束
    while (MCG_S & MCG_S_IREFST_MASK){}                  //等待时钟切换到外部参考时钟
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}
   
    //进入FBE模式,
    //0x18==25分频=2M,
    //0x11==18分频=2.7778M
    //0x12==19分频=2.63M,
    //0x13==20分频=2.5M   
    MCG_C5 = MCG_C5_PRDIV(0x18);               
   
    //确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
    MCG_C6 = 0x0;
   
    //保存FMC_PFAPR当前的值
    temp_reg = FMC_PFAPR;
   
    //通过M&PFD置位M0PFD来禁止预取功能
    FMC_PFAPR |= FMC_PFAPR_M7PFD_MASK | FMC_PFAPR_M6PFD_MASK | FMC_PFAPR_M5PFD_MASK
                     | FMC_PFAPR_M4PFD_MASK | FMC_PFAPR_M3PFD_MASK | FMC_PFAPR_M2PFD_MASK
                     | FMC_PFAPR_M1PFD_MASK | FMC_PFAPR_M0PFD_MASK;   
    ///设置系统分频器
    //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/2, Flash clock= MCG/4
    SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(1)
                 | SIM_CLKDIV1_OUTDIV3(1) | SIM_CLKDIV1_OUTDIV4(3);      
   
    //从新存FMC_PFAPR的原始值
    FMC_PFAPR = temp_reg;
   
    //设置VCO分频器,使能PLL为100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26
    MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(26);  //VDIV = 31 (x55)
                                                  //VDIV = 26 (x50)
    while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set   
    while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set   
   
    //进入PBE模式   
    //通过清零CLKS位来进入PEE模式
    // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
    MCG_C1 &= ~MCG_C1_CLKS_MASK;
   
    //等待时钟状态位更新
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
    //SIM_CLKDIV2 |= SIM_CLKDIV2_USBDIV(1);  
   
        //设置跟踪时钟为内核时钟
    SIM_SOPT2 |= SIM_SOPT2_TRACECLKSEL_MASK;       
    //在PTA6引脚上使能TRACE_CLKOU功能
    PORTA_PCR6 = ( PORT_PCR_MUX(0x7));  
    //使能FlexBus模块时钟
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;
    //在PTA6引脚上使能FB_CLKOUT功能
    PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
}
作者: chiusir    时间: 2012-3-31 16:40
简单说就是:Pll=晶振频率/MCG_C5_PRDIV*(MCG_C6_VDIV+24)。
大家可以参考下。
作者: wangzhi223    时间: 2012-3-31 21:37
说个我自己的理解。其实要先将外部晶振的时钟,分频至2到4M之间(这个是PDF给定的,可能可以稍微高一点),然后再通过PLL倍频到100M或者其他频率
作者: archimedes    时间: 2013-9-22 15:04
龙丘的程序很好用 赞赞赞!
作者: 179170821    时间: 2013-11-26 19:04
chiusir 发表于 2012-3-31 16:37
//锁相环频率为100M测试函数
void pllinit100M(void)
{

    //保存FMC_PFAPR当前的值
    temp_reg = FMC_PFAPR;


请问这里为什么要先保存FMC_PFAPR的值

作者: 野火    时间: 2013-11-26 19:53
亿千二 发表于 2012-3-21 15:57
哥们   MCG_C6怎么设置啊       我明白分频不懂倍频    k60是不是像xs128一样锁相环有公式啊

有专门的公式,直接按公式配就可以……不一定是 50M ,也可以是 8M 或者 12M ……

作者: 179170821    时间: 2013-11-26 23:58
野火 发表于 2013-11-26 19:53
有专门的公式,直接按公式配就可以……不一定是 50M ,也可以是 8M 或者 12M ……

外部晶振为50M,锁相环频率为50/15*54=180M测试函数,
代码中设置MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
也就是设置FRDIV=3,则FLL的分频比为256
那么FLL的参考时钟是50M/256=195.321kHz
但是不是说分频后的FLL的参考时钟不得超过32kHz吗?

void pllinit180M(void)
{
        uint32_t temp_reg;
        //使能IO端口时钟   
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                              | SIM_SCGC5_PORTB_MASK
                              | SIM_SCGC5_PORTC_MASK
                              | SIM_SCGC5_PORTD_MASK
                              | SIM_SCGC5_PORTE_MASK );
    //这里处在默认的FEI模式
    //首先移动到FBE模式
    MCG_C2 = 0;  
    //MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;
    //初始化晶振后释放锁定状态的振荡器和GPIO
    SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
    LLWU_CS |= LLWU_CS_ACKISO_MASK;
   
    //选择外部晶振,参考分频器,清IREFS来启动外部晶振
    //011 If RANGE = 0, Divide Factor is 8; for all other RANGE values, Divide Factor is 256.
    MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
   
    //等待晶振稳定            
    //while (!(MCG_S & MCG_S_OSCINIT_MASK)){}              //等待锁相环初始化结束
    while (MCG_S & MCG_S_IREFST_MASK){}                  //等待时钟切换到外部参考时钟
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}
   
    //进入FBE模式,
    //0x18==25分频=2M,
    //0x08==15分频=3.333M
    //0x09==16分频=3.125M,
    //0x10==17分频=2.94M
    //0x11==18分频=2.7778M
    //0x12==19分频=2.63M,
    //0x13==20分频=2.5M   
    MCG_C5 = MCG_C5_PRDIV(0x0e);               
   
    //确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
    MCG_C6 = 0x0;
   
    //保存FMC_PFAPR当前的值
    temp_reg = FMC_PFAPR;
   
    //通过M&PFD置位M0PFD来禁止预取功能
    FMC_PFAPR |= FMC_PFAPR_M7PFD_MASK | FMC_PFAPR_M6PFD_MASK | FMC_PFAPR_M5PFD_MASK
                     | FMC_PFAPR_M4PFD_MASK | FMC_PFAPR_M3PFD_MASK | FMC_PFAPR_M2PFD_MASK
                     | FMC_PFAPR_M1PFD_MASK | FMC_PFAPR_M0PFD_MASK;   
    ///设置系统分频器
    //MCG=PLL, core = MCG, bus = MCG/3, FlexBus = MCG/3, Flash clock= MCG/8
    SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(2)
                 | SIM_CLKDIV1_OUTDIV3(2) | SIM_CLKDIV1_OUTDIV4(7);      
   
    //从新存FMC_PFAPR的原始值
    FMC_PFAPR = temp_reg;
   
    //设置VCO分频器,使能PLL为100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26
    MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(30);  //VDIV = 31 (x54)
                                                  //VDIV = 26 (x50)
    while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set   
    while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set   
   
    //进入PBE模式   
    //通过清零CLKS位来进入PEE模式
    // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
    MCG_C1 &= ~MCG_C1_CLKS_MASK;
   
    //等待时钟状态位更新
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
    //SIM_CLKDIV2 |= SIM_CLKDIV2_USBDIV(1);  
   
    //设置跟踪时钟为内核时钟
    SIM_SOPT2 |= SIM_SOPT2_TRACECLKSEL_MASK;        
    //在PTA6引脚上使能TRACE_CLKOU功能
    PORTA_PCR6 = ( PORT_PCR_MUX(0x7));  
    //使能FlexBus模块时钟
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;
    //在PTA6引脚上使能FB_CLKOUT功能
    PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
}

作者: 179170821    时间: 2013-11-27 00:12
chiusir 发表于 2012-3-31 16:37
//锁相环频率为50/15*54=180M测试函数
void pllinit180M(void)
{

外部晶振为50M,锁相环频率为50/15*54=180M测试函数,
代码中设置MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
也就是设置FRDIV=3,则FLL的分频比为256
那么FLL的参考时钟是50M/256=195.321kHz
但不是说分频后的FLL的参考时钟不得超过32kHz吗?

void pllinit180M(void)
{
        uint32_t temp_reg;
        //使能IO端口时钟   
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                              | SIM_SCGC5_PORTB_MASK
                              | SIM_SCGC5_PORTC_MASK
                              | SIM_SCGC5_PORTD_MASK
                              | SIM_SCGC5_PORTE_MASK );
    //这里处在默认的FEI模式
    //首先移动到FBE模式
    MCG_C2 = 0;  
    //MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;
    //初始化晶振后释放锁定状态的振荡器和GPIO
    SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
    LLWU_CS |= LLWU_CS_ACKISO_MASK;
   
    //选择外部晶振,参考分频器,清IREFS来启动外部晶振
    //011 If RANGE = 0, Divide Factor is 8; for all other RANGE values, Divide Factor is 256.
    MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
   
    //等待晶振稳定            
    //while (!(MCG_S & MCG_S_OSCINIT_MASK)){}              //等待锁相环初始化结束
    while (MCG_S & MCG_S_IREFST_MASK){}                  //等待时钟切换到外部参考时钟
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}
   
    //进入FBE模式,
    //0x18==25分频=2M,
    //0x08==15分频=3.333M
    //0x09==16分频=3.125M,
    //0x10==17分频=2.94M
    //0x11==18分频=2.7778M
    //0x12==19分频=2.63M,
    //0x13==20分频=2.5M   
    MCG_C5 = MCG_C5_PRDIV(0x0e);               
   
    //确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
    MCG_C6 = 0x0;
   
    //保存FMC_PFAPR当前的值
    temp_reg = FMC_PFAPR;
   
    //通过M&PFD置位M0PFD来禁止预取功能
    FMC_PFAPR |= FMC_PFAPR_M7PFD_MASK | FMC_PFAPR_M6PFD_MASK | FMC_PFAPR_M5PFD_MASK
                     | FMC_PFAPR_M4PFD_MASK | FMC_PFAPR_M3PFD_MASK | FMC_PFAPR_M2PFD_MASK
                     | FMC_PFAPR_M1PFD_MASK | FMC_PFAPR_M0PFD_MASK;   
    ///设置系统分频器
    //MCG=PLL, core = MCG, bus = MCG/3, FlexBus = MCG/3, Flash clock= MCG/8
    SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(2)
                 | SIM_CLKDIV1_OUTDIV3(2) | SIM_CLKDIV1_OUTDIV4(7);      
   
    //从新存FMC_PFAPR的原始值
    FMC_PFAPR = temp_reg;
   
    //设置VCO分频器,使能PLL为100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26
    MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(30);  //VDIV = 31 (x54)
                                                  //VDIV = 26 (x50)
    while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set   
    while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set   
   
    //进入PBE模式   
    //通过清零CLKS位来进入PEE模式
    // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
    MCG_C1 &= ~MCG_C1_CLKS_MASK;
   
    //等待时钟状态位更新
    while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
    //SIM_CLKDIV2 |= SIM_CLKDIV2_USBDIV(1);  
   
    //设置跟踪时钟为内核时钟
    SIM_SOPT2 |= SIM_SOPT2_TRACECLKSEL_MASK;        
    //在PTA6引脚上使能TRACE_CLKOU功能
    PORTA_PCR6 = ( PORT_PCR_MUX(0x7));  
    //使能FlexBus模块时钟
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;
    //在PTA6引脚上使能FB_CLKOUT功能
    PORTC_PCR3 = ( PORT_PCR_MUX(0x5));
}





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2