【已解决】使用HSI-PLL方式提供系统时钟发现的问题

[复制链接]
2467|8
 楼主| zitral 发表于 2015-1-30 17:33 | 显示全部楼层 |阅读模式
本帖最后由 zitral 于 2015-2-4 09:55 编辑

使用HSI-PLL方式提供系统时钟,PLL倍频系数大于16(我用的30),我用这种方式倍到120MHZ(4*30),板子正常运行,测试发现系统时钟确实是这个频率!但是,我跑的操作系统,运行RCC_GetClocksFreq这个函数得到的各频率值是不对的!跟踪发现是在RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_30)的时候(RCC_PLLMul_30是我自己定义的#define RCC_PLLMul_30     ((uint32_t)0x08340000)),如下图,红圈部分的赋值操作很诡异!tmpreg的值是0x08340600正确,调试的时候过这一步,RCC->CFGR的值却是0x20340600,我就纳闷了!RCC_GetClocksFreq函数中要用到RCC->CFGR寄存器的值!
QQ截图20150130172758.png
 楼主| zitral 发表于 2015-1-30 17:36 | 显示全部楼层
本帖最后由 zitral 于 2015-1-30 20:23 编辑

写进去是一个值,读出来是另一个值,我也是醉了!现在可以确定写进去的是正确的,至于读出来的值,我就不知道该怎么解释了,下面的图片是keil调试中memory查看的CFGR的值!
QQ截图20150130202227.png
我用的单片机是GD32F103RG,在KEIL5下调试,有人遇到过这种情况么?是不是跟寄存器的读写状态有关呢?
sunmeat 发表于 2015-1-31 10:55 | 显示全部楼层
zitral 发表于 2015-1-30 17:36
写进去是一个值,读出来是另一个值,我也是醉了!现在可以确定写进去的是正确的,至于读出来的值,我就不知 ...

写的是正确的,读的时候,是按STM32的寄存器读的,GD32比STM32多了一个29位,你自己看看GD32的寄存器说明就知道了。
sunmeat 发表于 2015-1-31 10:55 | 显示全部楼层
https://bbs.21ic.com/icview-874575-1-1.html
你看看这个帖子,就明白了
 楼主| zitral 发表于 2015-1-31 11:29 | 显示全部楼层
sunmeat 发表于 2015-1-31 10:55
https://bbs.21ic.com/icview-874575-1-1.html
你看看这个帖子,就明白了

嗯,我看过了,GD的特殊定义是在27位,为PLL倍频系数的第五位(高位),我配置的时候也是按这一位配置的,芯片正常工作,系统时钟就是我设置值,但是读到的RCC->CFGR值却是29位为1,理解不能的是这个!
gg270 发表于 2015-2-3 17:33 | 显示全部楼层
zitral 发表于 2015-1-30 17:36
写进去是一个值,读出来是另一个值,我也是醉了!现在可以确定写进去的是正确的,至于读出来的值,我就不知 ...

请问你的样片是什么时候拿到的?能否提供芯片上的全部标签?
 楼主| zitral 发表于 2015-2-3 18:49 | 显示全部楼层
gg270 发表于 2015-2-3 17:33
请问你的样片是什么时候拿到的?能否提供芯片上的全部标签?

应该是去年比较早些的时候,GD32F103RGT6,AEP1991,AM1346
gg270 发表于 2015-2-3 21:26 | 显示全部楼层
zitral 发表于 2015-2-3 18:49
应该是去年比较早些的时候,GD32F103RGT6,AEP1991,AM1346

样片比较老,关于倍频增加的那个位,早期确实存在写27位读29位的情况,你这边可以重新申请样片。申请样片发送邮件给lg@realsense.com.cn即可
 楼主| zitral 发表于 2015-2-4 09:53 | 显示全部楼层
gg270 发表于 2015-2-3 21:26
样片比较老,关于倍频增加的那个位,早期确实存在写27位读29位的情况,你这边可以重新申请样片。申请样片 ...

好的,多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部