打印
[技术问答]

谁能给解释下MS51FB9AE官方给提供的修改24M主频的函数?

[复制链接]
2441|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
taobaofarmer|  楼主 | 2020-9-11 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 taobaofarmer 于 2020-9-12 15:35 编辑

官方给提供的例程,在Sample_Code->RegBased->Fsys_MoidfyHIRC->FSYS_MHIRC.C->MODIFY_HIRC(HIRC_24);函数里,该函数我给整理了下,只保留调整主频位24M的功能,代码如下:
void Make_HIRC_24MHz(void)
{
    u8 idata hirc_map0, hirc_map1;

    //Check if power on reset, modify HIRC
    SFRS = 0; //?1处

    IAPAL = 0x38;

    set_IAPEN;
    {
                IAPAH = 0x00;
                IAPCN = READ_UID;  //?2处
                set_IAPGO;
                hirc_map0 = IAPFD;
               
                IAPAL++;
                set_IAPGO;
                hirc_map1 = IAPFD;
    }
    clr_IAPEN;

        TA = 0xAA;
        TA = 0x55;
        {
                RCTRIM0 = hirc_map0;
        }
               
        TA = 0xAA;
        TA = 0x55;
        {
                RCTRIM1 = hirc_map1;
        }

        //禁止低功耗模式
        PCON &= CLR_BIT4;
}

首先说明这个函数在MS51FB9AE上执行是失败的,大体过程我知道,是从系统默认的配置里读出24M主频的高低字节配置信息,然后写入RCTRIM0和RCTRIM1里,但是在?2处,为何IAPCN的指令是READ_UID呢?这个指令不是读芯片内部96位unique id吗?
另外?1处 SFRS = 0;啥意思,难道是翻到SFR页0的意思吗?如果这是这样的话,SFRS寄存器是有TA保护的,单单SFRS = 0;是不行的呀?

使用特权

评论回复
沙发
gaoyang9992006| | 2020-9-11 18:02 | 只看该作者
1那个好理解,是分了好3个SFRS的,不同的寄存在在不同的SFRS里,这里下面操作的是对应的0页里。
电源复位时候才给切换的,所以电源复位时候可能直接就可以切换页面吧。

使用特权

评论回复
板凳
zhuotuzi| | 2020-9-11 18:03 | 只看该作者
能用就行了,官方都研究好的,这种系统级的,根本不需要我们考虑啊。

使用特权

评论回复
地板
zhuotuzi| | 2020-9-11 18:03 | 只看该作者
直接调用就行了。谁知道他们什么原理啊,官方手册也没提

使用特权

评论回复
5
taobaofarmer|  楼主 | 2020-9-12 11:25 | 只看该作者
gaoyang9992006 发表于 2020-9-11 18:02
1那个好理解,是分了好3个SFRS的,不同的寄存在在不同的SFRS里,这里下面操作的是对应的0页里。
电源复位时 ...

SFRS寄存器是有TA保护的,单单SFRS = 0;是不行的呀?

使用特权

评论回复
6
xinpian101| | 2020-9-13 22:47 | 只看该作者
不问原因,直接用就行。

使用特权

评论回复
7
taobaofarmer|  楼主 | 2020-9-13 22:51 | 只看该作者
我是技术控,不搞懂原理不行

使用特权

评论回复
8
huangcunxiake| | 2020-9-13 23:59 | 只看该作者
哈哈,那没法了,这个官方手册没提到。

使用特权

评论回复
9
taobaofarmer|  楼主 | 2020-9-14 09:04 | 只看该作者
官方手册在这上几乎没有什么原理性的说明,DEMO例程上也没有注释

使用特权

评论回复
10
单片小菜| | 2020-9-14 18:28 | 只看该作者
不用说原因了,直接说一下情况就可以了。我没有仔细看代码,没有看见。

使用特权

评论回复
11
taobaofarmer|  楼主 | 2020-9-14 18:32 | 只看该作者
情况就是我现在要给MS51FB9AE上电之后主频切换到24M,如何实现

使用特权

评论回复
12
jasontu| | 2020-9-15 07:41 | 只看该作者
检查KEIL中最佳化设定,可能是TA已经被简化了。

使用特权

评论回复
13
taobaofarmer|  楼主 | 2020-9-15 10:15 | 只看该作者
我从来不用KEIL的优化,都是0级,也就是关闭优化

使用特权

评论回复
14
钛酸锂| | 2020-9-15 22:32 | 只看该作者
我试过把MODIFY_HIRC_24()放main()里的第一行,然后用MODIFY_HIRC_16()放相同位置做对比,感觉用MODIFY_HIRC_24()那时快一点,其实官方的demo里也有关于始终修改的试例程序,你可以参考一下

使用特权

评论回复
15
名字是啥样| | 2020-9-18 09:20 | 只看该作者
clr_IAPEN;

        TA = 0xAA;
        TA = 0x55;
        {
                RCTRIM0 = hirc_map0;
        }
               
        TA = 0xAA;
        TA = 0x55;
        {
                RCTRIM1 = hirc_map1;
        }

        //禁止低功耗模式
        PCON &= CLR_BIT4;

使用特权

评论回复
16
别看我照片| | 2020-9-18 10:10 | 只看该作者
能用就行了,官方都研究好的,这种系统级的,根本不需要我们考虑

使用特权

评论回复
17
taobaofarmer|  楼主 | 2020-9-18 13:36 | 只看该作者
每个人的学习态度是不同的

使用特权

评论回复
18
伊斯科明| | 2020-11-13 19:12 | 只看该作者
楼主搞清楚了吗?没搞懂里面一堆的sfr变量都是做啥用的。MS51FB9AE_MS51XB9AE_MS51XB9BE\Library\Device\Include\MS51_16K.h这个头文件里面定义的sfr变量都在哪里知道含义的?

使用特权

评论回复
19
伊斯科明| | 2020-11-16 11:02 | 只看该作者
伊斯科明 发表于 2020-11-13 19:12
楼主搞清楚了吗?没搞懂里面一堆的sfr变量都是做啥用的。MS51FB9AE_MS51XB9AE_MS51XB9BE\Library\Device\In ...

已经找到相关资料了,和我有同样疑问的同学可以在参考这个链接的http://www.nuvoton.com.cn/products/microcontrollers/8bit-8051-mcus/industrial-8051-series/?group=Document&tab=2
找到对应型号的TRM文档就能查看对应寄存器的含义了。

使用特权

评论回复
20
lzsky| | 2021-1-8 09:40 | 只看该作者
楼主这个函数看懂了吗?? IAPFD初值始终没明白哪里来的

使用特权

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

本版积分规则

71

主题

460

帖子

3

粉丝