搜索
bottom↓
回复: 11

芯唐 M0516 PLL问题

[复制链接]

出0入0汤圆

发表于 2011-9-14 23:13:36 | 显示全部楼层 |阅读模式
// SYSCLK REGS
#define  SYSCLK_PWRCON     (*(volatile uint32_t *)(CLK_BA + 0x00))
#define  SYSCLK_AHBCLK     (*(volatile uint32_t *)(CLK_BA + 0x04))
#define  SYSCLK_APBCLK     (*(volatile uint32_t *)(CLK_BA + 0x08))
#define  SYSCLK_CLKSTATUS  (*(volatile uint32_t *)(CLK_BA + 0x0C))
#define  SYSCLK_CLKSEL0    (*(volatile uint32_t *)(CLK_BA + 0x10))
#define  SYSCLK_CLKSEL1    (*(volatile uint32_t *)(CLK_BA + 0x14))
#define  SYSCLK_CLKSEL2    (*(volatile uint32_t *)(CLK_BA + 0x1C))
#define  SYSCLK_CLKDIV     (*(volatile uint32_t *)(CLK_BA + 0x18))
#define  SYSCLK_PLLCON     (*(volatile uint32_t *)(CLK_BA + 0x20))
#define  SYSCLK_FRQDIV     (*(volatile uint32_t *)(CLK_BA + 0x24))

#define  unlock_reg() REGWRPROT=0x59;\
                      REGWRPROT=0x16;\
                REGWRPROT = 0x88
#define  lock_reg()   REGWRPROT = 0x00

#define XTAL12M 0x0001
#define OSC22M  0x0004
#define OSC10K  0x0010

#define ClkSrc_XTAL12M  0x00
#define ClkSrc_PLL      0x02
#define ClkSrc_OSC10K   0x03
#define ClkSrc_OSC22M   0x07

#define PLL_enable()      SYSCLK_PLLCON &= 0xFFFAFFFF
#define PLL_disable()     SYSCLK_PLLCON |= 0x00050000
#define PLL_SRC_XTAL12M() SYSCLK_PLLCON |= 0x00080000
#define PLL_SRC_OSC22M()  SYSCLK_PLLCON &= 0xFFF7FFFF

void sys_clk_init(void)
{
        unlock_reg(); // 解锁寄存器
       
        SYSCLK_PWRCON |= XTAL12M; // OSC22M // OSC10K
        while((SYSCLK_CLKSTATUS & XTAL12M) == 0 ); //等待外部晶体稳定

        PLL_SRC_XTAL12M(); // PLL时钟源为外部12M晶体
        SYSCLK_PLLCON &= 0xFFFF0000; // 默认值
        SYSCLK_PLLCON |= 0x0000C22E;
        PLL_enable();
        while((SYSCLK_CLKSTATUS & 0x0004) == 0 );//等待PLL稳定

        SYSCLK_CLKSEL0 &= 0x38; // 切换到XTAL12M
        SYSCLK_CLKSEL0 |= ClkSrc_PLL; // 切换到PLL时钟
        SYSCLK_CLKDIV |= 0x00; //Divider=0, HCLK频率=源频率(SYSCLK_CLKSEL0)/(Divider+1)
        lock_reg(); // 锁定寄存器
}

以上这段程序设定的PLL时钟竟然是66M的,因为作为UART时钟时和作为TIMER0时钟时,如果按66M进行计算就是比较准确的。曾怀疑计算公式问题,作使用外部12M时钟或者内部22.1184时钟时按公式计算出来的与实际的相符,有没高手遇到过此问题,或者此程序哪里出了问题,请各位高手拍砖,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-9-15 00:04:02 | 显示全部楼层
计算公式是无问题的,请详细看数据手册,还有PLL的部分设置是需要满足一定约束条件的。
我用内部22M四倍频到88M刷LCD一直很稳定。

出0入0汤圆

 楼主| 发表于 2011-9-15 07:07:07 | 显示全部楼层
PLL的倍频设置全是按默认值设置的,按照手册及公式算应该是48M才对。

出0入0汤圆

发表于 2011-9-15 07:29:06 | 显示全部楼层
你的芯片配置位没有设置成外部时钟吧?

(原文件名:1.jpg)

出0入0汤圆

发表于 2011-9-15 09:05:34 | 显示全部楼层
请教一下 plc_avr 烈火狂龙:你用串口ISP时INT0(P3.2)需不需要接地啊?看到9哥说要接地,但记得看芯唐的一份资料上说最新的ISP不需要管脚接地呢!

出0入0汤圆

 楼主| 发表于 2011-9-15 09:45:15 | 显示全部楼层
回复【3楼】plc_avr 烈火狂龙
-----------------------------------------------------------------------
我是使用NU_LINK下载的。
已经搞定,原来是芯唐的中文手册有问题。手册里说“0”是选择内部22.1184M,“1”选择外部4-24M,实际上应该反过来。谢谢1楼“22M四倍频到88M”这句的提示,22四倍频是88M,3倍频是66M,刚好是我那种情况的频率。所以我把PLL时钟源设置调过来,出来的频率就正确了。

出0入0汤圆

发表于 2011-9-15 10:29:25 | 显示全部楼层
【4楼】 dragonwww
新唐最新的ISP V1.41不需要接地。里面有提供LDROM烧写文件,用ICP直接烧好,设置LDROM启动就行了。

出0入0汤圆

发表于 2012-8-15 10:20:18 | 显示全部楼层
找了好久的手册也找不到公式,LZ能否帮忙一下,列个公式出来?求分析~!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-8-15 21:54:26 | 显示全部楼层
有个M0的PLL计算器:

出0入0汤圆

发表于 2012-8-15 23:48:23 | 显示全部楼层
新唐的ISP源代是开放的,自己修改一下那个ISP要不要上电后脚拉低不就行了?

出0入0汤圆

发表于 2012-8-16 14:41:38 | 显示全部楼层
还有个M051项目初始化网页工具,填入PLL,比如48M,
就能自动产生PLL的设置代码
  http://nuvoton-m0.com/code



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-5 15:10:32 | 显示全部楼层
学习了~最后那个网址不错~可以参考!谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-6 22:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表