打印

【MSP430i2xx教程第二讲】时钟系统 & EUSCI_A_UART

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
121
从上图可以清除的看出来,那个说的DCO的三个模式void CS_setupDCO( uint8_t mode )
使用参数所选模式配置 DCO。 如果选择旁路模式,则需要在 CLKIN 管脚接入外部数字时钟
信号来作为所有的设备(CPU、外设等) 的时钟信号。 ACLK 频率是不可以被编程的, 且固定在
旁路时钟频率除以 512。 使用外部吊足模式, 需要在 ROSC 管脚连接一个 20KΩ的电阻器。 与使
用内部电阻相比, 使用外部电阻模式,在绝对误差和温度漂移上, 可以提供更高的时钟精度。 请
根据你所选的设备型号对应的数据手册的详细情况来选择不同的模式。
该函数只有一个参数: mode。
mode: 该参数可以选择的量有 CS_INTERNAL_RESISTOR, CS_EXTERNAL_RESISTOR,
CS_BYPASS_MODE。
就是这个函数,图上给出了,对应的Rint,Rext,CLKIN,其中对DCOBYP置位时候选择CLKIN通道,就是传说中大家疑问的旁路模式,CS_BYPASS_MODE。

[size=16.470588684082px]也就是说旁路模式就是通过DCOBYP将输入旁路到外部的CLKIN,那么当然就电路复杂了,需要外部时钟源设备,还有使用Rext,就是选择外部电阻模式,就需要在ROSC上安装个电阻。选择内部电阻就是默认使用DCO输出16.384MHz.如果需要使用其他频率,需要通过编程CSIRFCAL,CSIRTCAL这两个寄存器。一般不推荐。
[size=16.470588684082px]另外如果使用外部电阻,则是使用20-kΩ 0.1% ±50-ppm/°C
这个规格的电阻,不过也是不推荐,毕竟内部有了电阻了,你再用外部的,不一定准确。同样,如果更改DCO发生频率,需要修改寄存器,不过库函数没有给出方法,那就是,不建议这样用。

使用特权

评论回复
122
lvyunhua| | 2015-4-3 15:57 | 只看该作者
每次只收一个字节的,我们可以这样,不是有停止位和启动位吗,先建立一个规则,把这个指令放到规则里

收到启动位开始接收数据,将数据放到数组中,收到停止位,结束,然后将数组的数据拿出了比较,如果是LED_OFF就关闭LED;如果是LED_ON就打开LED.

使用特权

评论回复
123
数码小叶| | 2015-4-3 16:40 | 只看该作者
gaoyang9992006 发表于 2015-4-3 13:28
性能非常强劲,而且是32位的,且集成了TI独家知识产权的低功耗技术。

不会那么快把FR5969超了吧,5969才出不久啊,我去看看这片子:lol:lol:lol

使用特权

评论回复
124
数码小叶| | 2015-4-3 16:48 | 只看该作者
稳稳の幸福 发表于 2015-4-3 15:25
从上图可以清除的看出来,那个说的DCO的三个模式void CS_setupDCO( uint8_t mode )
使用参数所选模式配置 D ...

字体格式太复杂了,不过那个结构图看着很明了:lol:lol

使用特权

评论回复
125
数码小叶| | 2015-4-3 16:53 | 只看该作者
稳稳の幸福 发表于 2015-4-3 15:25
从上图可以清除的看出来,那个说的DCO的三个模式void CS_setupDCO( uint8_t mode )
使用参数所选模式配置 D ...

还有,更改DCO发生频率,不是没给出方法啊,库函数说的很详细啊,你没看到么

使用特权

评论回复
126
hanzhenfei| | 2015-4-3 18:33 | 只看该作者
强仔00001 发表于 2015-4-1 23:28
其实你可以配置管脚输出时钟出来看看频率的,我经常这样干

MCLK可以输出来看吗?

使用特权

评论回复
127
hanzhenfei| | 2015-4-3 18:47 | 只看该作者
734774645 发表于 2015-4-2 16:57
我看大家都对空闲线多处理器协议那个不懂,我终于找到资料了,附上:

涨知识了。。。

使用特权

评论回复
128
hanzhenfei| | 2015-4-3 18:53 | 只看该作者
734774645 发表于 2015-4-2 16:58
另外百度百科的地址线,就是讨论课程中的这个问题------------------------------------------ ...

写得很好很详细,完整的看了下,赞

使用特权

评论回复
129
hanzhenfei| | 2015-4-3 19:23 | 只看该作者
lvyunhua 发表于 2015-4-3 15:57
收到启动位开始接收数据,将数据放到数组中,收到停止位,结束,然后将数组的数据拿出了比较,如果是LED_O ...

你这里说的 启动位 和 停止位 指的是两个字符吗?

使用特权

评论回复
130
昱枫| | 2015-4-3 19:38 | 只看该作者
为啥使用外部电阻模式,在绝对误差和温度漂移上,可以提供更高的时钟精度,  这对外部电阻的类型、精度又没要求?

使用特权

评论回复
131
hanzhenfei| | 2015-4-3 20:15 | 只看该作者
uint32_t CS_getMCLK(void);  uint32_t CS_getSMCLK(void); uint32_t CS_getACLK(void);这三个函数是获取当前的时钟频率。1.  文中写到此外,使用这个API前应该调用CS_setupDCO(),以便DCO被校准,这样计算才是精确的。  补充一下啊,获取这个API其实还要调用void CS_initClockSignal (uint8_t clockSource, uint8_t clockSourceDivider)函数配置MCLK,SMCLK分频系数,不然怎么获得时钟频率呢。 不过我们一般在MAIN函数开始就会先调用CS_setupDCO和CS_initClockSignal 这两个函数来初始化时钟了。    之后如果在调用uint32_t CS_getMCLK(void);  uint32_t CS_getSMCLK(void); uint32_t CS_getACLK(void);这几个函数应该就不用在用CS_setupDCO这个函数了吧。

2.这三个函数都有说明: 当设备安装在DCO旁路模式下,它不能正常工作.   因为旁路模式使用的是外部晶振,MCU本身不知道晶振频率故当然也不能获取MCLK,ACLK频率了。


3.虽但说这第三个函数 当设备安装在DCO旁路模式下,它不能正常工作。 但是也有可能因为不知道误调用了这几个函数,编译器也不会报错啊。
  但是头文件中看这个函数使用。
  //*****************************************************************************//
//! \brief Get the current SMCLK frequency in Hz
//!
//! This API returns the current SMCLK frequency in Hz. It does not work when
//! the device is setup in DCO bypass mode. Also, CS_setupDCO() should be
//! called before this API so that the DCO has been calibrated and this
//! calculation is accurate.
//!
//!
//! \return Current SMCLK frequency in Hz, 0 when in bypass mode
//
//*****************************************************************************
extern uint32_t CS_getSMCLK(void);
注意红色部分,在bypass mode模式返回0.  那我们看源文件。

uint32_t CS_getSMCLK(void) {
    uint8_t divider = (CSCTL1 & 0x70) >> 4;
    return(CS_DCO_FREQ >> divider);
}
如果使用bypass模式作为DCO时钟,在调用设置SMCLK分频CS_initClockSignal 如果调用CS_getSMCLK返回就是错误的频率。
则返回的要源文件函数中也不会返回0,这里写的感觉有点问题,不知道个人理解的对不对。
个人感觉可以这样写
uint32_t CS_getSMCLK(void) {
    uint8_t divider = (CSCTL1 & 0x70) >> 4;
    if(in DCO bypass mode)
        return  0;
    else
        return(CS_DCO_FREQ >> divider);
}  这样就对应cs。h头文件的说明了,哈哈。。



使用特权

评论回复
132
gaoyang9992006| | 2015-4-3 20:22 | 只看该作者
hanzhenfei 发表于 2015-4-3 20:15
uint32_t CS_getMCLK(void);  uint32_t CS_getSMCLK(void); uint32_t CS_getAC ...

系统返回的频率是根据寄存器的配置来确定的,如果使用了旁路模式,系统不确定外部输入的频率所以没法确定,只能是提供一个返回0

使用特权

评论回复
133
112207301219| | 2015-4-3 20:57 | 只看该作者
dirtwillfly 发表于 2015-4-1 13:22
使用外部晶振更稳定。
至于哪个省电,这个还真不知道。我猜使用DCO更省电 ...

外部晶振更稳定,DCO是压控振荡器,和RC振荡器原理类似,受电压和温度的影响较大,而晶振是靠石英晶体谐振,与石英晶体本身的谐振频率有关,受外界温度电压的影响较小。
DCO功耗更低,我使用外部晶振时LPM2的待机电流约为1.2mA, 使用DOC能达到50uA.

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
dirtwillfly + 4 很给力!
134
112207301219| | 2015-4-3 21:02 | 只看该作者
hanzhenfei 发表于 2015-4-1 12:44
DCO旁路模式什么概念?

旁路模式就是可以通过一个时钟输入管脚将外部时钟信号灌入系统。文档里是这么说的。

使用特权

评论回复
135
112207301219| | 2015-4-3 21:08 | 只看该作者
数码小叶 发表于 2015-4-1 17:06
一般来讲都是外接的吧,也不一样,看你买的啥了,至于省电,内接的DCO有配置寄存器,应该更省 ...

实测内部晶振更省电

使用特权

评论回复
136
112207301219| | 2015-4-3 21:18 | 只看该作者
Leeone 发表于 2015-4-1 17:00
1、内部振荡器能不能屏蔽,外接有源晶振
2、内置空闲线和地址位通信协议的多处理器系统,这个是怎么应用的 ...

DCO旁路模式就是相当于屏蔽内部振荡器。可以接有源晶振,比无源的稳定。

使用特权

评论回复
137
dirtwillfly| | 2015-4-3 21:30 | 只看该作者
gaoyang9992006 发表于 2015-4-3 13:25
他那个全面的是复制的我教程的内容。

呵呵

使用特权

评论回复
138
hanzhenfei| | 2015-4-3 21:32 | 只看该作者
gaoyang9992006 发表于 2015-4-3 20:22
系统返回的频率是根据寄存器的配置来确定的,如果使用了旁路模式,系统不确定外部输入的频率所以没法确定 ...

提供的函数不能返回0吧

使用特权

评论回复
139
112207301219| | 2015-4-3 21:59 | 只看该作者
数码小叶 发表于 2015-4-2 09:12
左右移太麻烦,单页就可以了,不知道为啥要分栏

打印出来看着挺舒服的

使用特权

评论回复
140
songchenping| | 2015-4-4 11:54 | 只看该作者
如果DCO采用旁路模式,CLKIN管脚可以输入的最大频率有多大啊?

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则