打印
[技术问题解答]

mc9s08dz60关于系统时钟设置的问题

[复制链接]
8760|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.始终还是不彻底明白什么系统时钟,总线时钟,fll,pll。都什么关系,怎么一回事,到底该多少分频呢?如何设置?
能帮我系统的明了的讲下吗?
2.我想设置成MCGC1=0X80  MCGC2=0X30。但是用pe始终还是差点.如图
3.定时1ms  tpm怎么设置,TPM1SC里面的时钟源,分频因子,如何选择?

QQ截图20140317163945.jpg (283.52 KB )

QQ截图20140317163945.jpg

相关帖子

沙发
FSL_TICS_Robin| | 2014-3-18 10:05 | 只看该作者
Q1:始终还是不彻底明白什么系统时钟,总线时钟,fll,pll。都什么关系,怎么一回事,到底该多少分频呢?如何设置?能帮我系统的明了的讲下吗?
A1:请看手册MC9S08DZ60的“1.3 系统时钟分配”章节以及“第8 章 多功能时钟发生器 (S08MCGV1)”




使用特权

评论回复
板凳
FSL_TICS_Robin| | 2014-3-18 10:55 | 只看该作者
本帖最后由 FSL_TICS_Robin 于 2014-3-18 11:07 编辑

Q2:我想设置成MCGC1=0X80  MCGC2=0X30。但是用pe始终还是差点.如图
A2:你只需根据Warning提示修改配置即可,这些配置限制可以在芯片手册中找到。

不过我不是很清楚为什么你想直接使用外部时钟源的8MHz供给MCGOUT,因为这样一来整个系统时钟频率就比较低了。
你可以使用PLL把主频倍频上去,提高代码执行速度。


使用特权

评论回复
地板
cl234583745|  楼主 | 2014-3-18 12:17 | 只看该作者
本帖最后由 cl234583745 于 2014-3-18 12:29 编辑
FSL_TICS_Robin 发表于 2014-3-18 10:55
Q2:我想设置成MCGC1=0X80  MCGC2=0X30。但是用pe始终还是差点.如图
A2:你只需根据Warning提示修改配置即可 ...

外部接的8m的晶振。
fll pll不知道是做什么用的?就选择了FBE或者 PBE。选择这2个就是没有用fll pll吧?用的是FEE PEE吧?
最后的总线时钟一定要由内部和外部时钟一起生成吗?

使用特权

评论回复
5
cl234583745|  楼主 | 2014-3-18 12:22 | 只看该作者
FSL_TICS_Robin 发表于 2014-3-18 10:55
Q2:我想设置成MCGC1=0X80  MCGC2=0X30。但是用pe始终还是差点.如图
A2:你只需根据Warning提示修改配置即可 ...

前面的图 看不懂 ,后面的能看懂。
警告信息就是改晶振数值吗?1-16m  一直有警告

使用特权

评论回复
6
FSL_TICS_Robin| | 2014-3-18 14:08 | 只看该作者
cl234583745 发表于 2014-3-18 12:17
外部接的8m的晶振。
fll pll不知道是做什么用的?就选择了FBE或者 PBE。选择这2个就是没有用fll pll吧?用 ...

MCG的核心是一个FLL(锁频环)和一个PLL(锁相环)。
FLL和PLL都可以对输入的参考时钟倍频并锁定后输出,输出的时钟供给CPU和各个模块。
锁频环FLL的核心是一个DCO(数字控制振荡器),锁相环PLL的核心是一个VCO(电压控制振荡器)。

一般都会将BUSCLK运行在较高的频率,这就需要在使用外部8MHz晶振情况下通过MCG的FLL或PLL将该时钟源频率提高供内部使用。

使用特权

评论回复
7
cl234583745|  楼主 | 2014-3-18 14:41 | 只看该作者
本帖最后由 cl234583745 于 2014-3-18 14:43 编辑
FSL_TICS_Robin 发表于 2014-3-18 14:08
MCG的核心是一个FLL(锁频环)和一个PLL(锁相环)。
FLL和PLL都可以对输入的参考时钟倍频并锁定后输出, ...

1.设置这些就是为了得到总线时钟吗?如图:尽量得到的最高吗?
2.我试着设置了一下,fll基本总有警告,要么就是总线时钟只能到4m
pll能达到16 24 32m的。越高越好吗?
3.还有一些分频选择我不知道该如何选择,根据什么来选择,都用了自动。

4.明白了不少比原来。干脆麻烦你帮我设置个看看吧,没有什么要求,就是8m的晶振,其他也都是用总线时钟

QQ截图20140318143809.jpg (59.43 KB )

QQ截图20140318143809.jpg

使用特权

评论回复
8
FSL_TICS_Robin| | 2014-3-18 15:16 | 只看该作者
cl234583745 发表于 2014-3-18 14:41
1.设置这些就是为了得到总线时钟吗?如图:尽量得到的最高吗?
2.我试着设置了一下,fll基本总有警告,要 ...

你这样设置就可以啦
一般就是用PLL也就是PEE模式,#2楼绿色走向。
PLL output clock freq的频率其实就是VCO的输出频率,在手册末的“表A-12. CG 频率规范(温度范围 = –40 至125 °C )”有列出范围。
Internal bus clock从#2楼第二章图中可以看到,BUSCLK由MCGOUT输出频率二分频,所以得到了24MHz。

使用特权

评论回复
9
cl234583745|  楼主 | 2014-3-19 09:59 | 只看该作者
FSL_TICS_Robin 发表于 2014-3-18 15:16
你这样设置就可以啦
一般就是用PLL也就是PEE模式,#2楼绿色走向。
PLL output clock freq的频率其实就是V ...

设置时钟用到pll跟定时器有关系吗?


网上找到的现成程序:定时不是用装初值吗?每次都装满不是就只能定处分频种类的时间了吗?
我选择总线时钟24m。设置总线24m 1分频    TPM1SC=0x48;//TPM1时钟源为总线时钟;分频系数为一;溢出中断允许   655534/24000=2.7   就是定时2.7ms吗?选择了多少分频就在*多少,就定时这么几种时间,也不精确?这么随意的精确定时呢?
//=================================================================================================
//函数名:Init_tpm1_counter
//作用:初始化TPM1,内部时钟工作于自时钟模式,总线频率4M;自由计数;溢出时间间隔=65535/4000近似16ms
//=================================================================================================
void Init_tpm1_counter(void)
{
        TPM1SC=0x48;//TPM1时钟源为总线时钟;分频系数为一;溢出中断允许
        TPM1CNTH=0;//任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
}
//=======================================================================================================
//函数名:Init_tpm2_counter
//作用:初始化TPM2,内部时钟工作于自时钟模式,总线频率4M;自由计数;溢出时间间隔=65535/(4000/64)近似1048ms
//========================================================================================================
void Init_tpm2_counter(void)
{
        TPM2SC=0x4e;//TPM2时钟源为总线时钟;分频系数为64;溢出中断允许
        TPM2CNTH=0;//任意时刻对TPM2CNTH或TPM2CNTL的写操作将计数寄存器的计数值复位(清零)
}
//======================

//==================计数器1溢出中断服务程序==========================
interrupt VectorNumber_Vtpm1ovf void TPM1_OVF_ISR(void)
{
        if((TPM1SC & 0x80)==0x80)
                {
                  TPM1SC_TOF=0;
                        PTBD_PTBD5=~PTBD_PTBD5;
                }
}
//==================计数器2溢出中断服务程序==========================
interrupt VectorNumber_Vtpm2ovf void TPM2_OVF_ISR(void)
{
        if((TPM2SC & 0x80)==0x80)
                {
                        TPM2SC_TOF=0;
                        PTAD_PTAD6=~PTAD_PTAD6;
                }
}

使用特权

评论回复
10
FSL_TICS_Robin| | 2014-3-19 10:18 | 只看该作者
cl234583745 发表于 2014-3-19 09:59
设置时钟用到pll跟定时器有关系吗?

Q1:设置时钟用到pll跟定时器有关系吗?
A1:如果你的TPM时钟源选择总线时钟BUSCLK,而总线时钟BUSCLK是由MCGOUT时钟分频来的,同时MCG选择PLL输出时钟作为MCGOUT时钟。
那么就有关系了。

使用特权

评论回复
11
FSL_TICS_Robin| | 2014-3-19 10:32 | 只看该作者
cl234583745 发表于 2014-3-19 09:59
设置时钟用到pll跟定时器有关系吗?

Q2:选择了多少分频就在*多少,就定时这么几种时间,也不精确?这么随意的精确定时呢?
A2:请看一下手册中“16.3.3 TPM 计数器模数寄存器(TPMxMODH:TPMxMODL)”介绍,counter并不是必须从0~0xFFFF,你可以通过设置这个寄存器来自定义溢出时的counter值。

使用特权

评论回复
12
cl234583745|  楼主 | 2014-3-19 11:17 | 只看该作者
FSL_TICS_Robin 发表于 2014-3-19 10:18
Q1:设置时钟用到pll跟定时器有关系吗?
A1:如果你的TPM时钟源选择总线时钟BUSCLK,而总线时钟BUSCLK是由M ...

我的如上图7楼,不就是你说的那样吗?那具体有关系在哪里呢?跟定时器的哪里有关系呢

使用特权

评论回复
13
cl234583745|  楼主 | 2014-3-19 11:27 | 只看该作者
FSL_TICS_Robin 发表于 2014-3-19 10:32
Q2:选择了多少分频就在*多少,就定时这么几种时间,也不精确?这么随意的精确定时呢?
A2:请看一下手册中 ...

9楼,我网上找的现成代码那样写有什么好处,就是方便吗?一边都怎么定时呢
不是往计数寄存器写初值吗?计数模数寄存器有什么区别。看不懂呀:'(。BDM是什么意思呢

使用特权

评论回复
14
FSL_TICS_Robin| | 2014-3-19 11:29 | 只看该作者
cl234583745 发表于 2014-3-19 11:17
我的如上图7楼,不就是你说的那样吗?那具体有关系在哪里呢?跟定时器的哪里有关系呢 ...

在你那样设置下
TPM定时器的counter增长频率 与 PLL输出频率相关。

使用特权

评论回复
15
FSL_TICS_Robin| | 2014-3-19 11:37 | 只看该作者
cl234583745 发表于 2014-3-19 11:27
9楼,我网上找的现成代码那样写有什么好处,就是方便吗?一边都怎么定时呢
不是往计数寄存器写初值吗?计 ...

16.3.2 计数器的寄存器(TPMxCNTH:TPMxCNTL)是给你看当前counter增长到多少了的,对其写操作会使counter清零。(请看手册详细描述)

16.3.3 TPM 计数器模数寄存器(TPMxMODH:TPMxMODL)是用来规定counter最大值,一旦达到定义最大值,counter将归0.

使用特权

评论回复
16
FSL_TICS_Robin| | 2014-3-19 11:41 | 只看该作者
cl234583745 发表于 2014-3-19 11:27
9楼,我网上找的现成代码那样写有什么好处,就是方便吗?一边都怎么定时呢
不是往计数寄存器写初值吗?计 ...

BDM其实就是TPM在使用BDM仿真时,这个TPM模块表现可能与烧进flash运行时有所不同。
(我没有用过8位的芯片,你还是需要看手册。Kinetis芯片里是需要注意仿真时定时器的特性的。)

使用特权

评论回复
17
cl234583745|  楼主 | 2014-3-19 13:58 | 只看该作者
FSL_TICS_Robin 发表于 2014-3-19 11:37
16.3.2 计数器的寄存器(TPMxCNTH:TPMxCNTL)是给你看当前counter增长到多少了的,对其写操作会使counter ...

mod/65535 * 65535/24000 = 要定的时间
mod = 24000 * 要定时间
是这样吗

使用特权

评论回复
18
FSL_TICS_Robin| | 2014-3-19 14:18 | 只看该作者
cl234583745 发表于 2014-3-19 13:58
mod/65535 * 65535/24000 = 要定的时间
mod = 24000 * 要定时间
是这样吗

你的计算公式有点混乱
你只需要记住:counter每+1,消耗1个counter时钟源周期的时间。



使用特权

评论回复
19
cl234583745|  楼主 | 2014-3-19 15:06 | 只看该作者
FSL_TICS_Robin 发表于 2014-3-19 14:18
你的计算公式有点混乱
你只需要记住:counter每+1,消耗1个counter时钟源周期的时间。

mod = 24000 * 要定时间   /分频因子
这回对了吧

使用特权

评论回复
20
FSL_TICS_Robin| | 2014-3-19 15:31 | 只看该作者
cl234583745 发表于 2014-3-19 15:06
mod = 24000 * 要定时间   /分频因子
这回对了吧

定时时间=Tcounter*mod
Tcounter=1/Fcounter
Fcounter=BUSCLK/分频因子  (选择BUSCLK作为TPM时钟源时)


使用特权

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

本版积分规则

99

主题

644

帖子

1

粉丝