搜索

[技术问答] 谁能给解释下MS51FB9AE官方给提供的修改24M主频的函数?

[复制链接]
257|16
 楼主 | 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;是不行的呀?

使用特权

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

使用特权

评论回复
| 2020-9-11 18:03 | 显示全部楼层
能用就行了,官方都研究好的,这种系统级的,根本不需要我们考虑啊。

使用特权

评论回复
| 2020-9-11 18:03 | 显示全部楼层
直接调用就行了。谁知道他们什么原理啊,官方手册也没提

使用特权

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

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

使用特权

评论回复
| 2020-9-13 22:47 | 显示全部楼层
不问原因,直接用就行。

使用特权

评论回复
 楼主 | 2020-9-13 22:51 | 显示全部楼层
我是技术控,不搞懂原理不行

使用特权

评论回复
| 2020-9-13 23:59 | 显示全部楼层
哈哈,那没法了,这个官方手册没提到。

使用特权

评论回复
 楼主 | 2020-9-14 09:04 | 显示全部楼层
官方手册在这上几乎没有什么原理性的说明,DEMO例程上也没有注释

使用特权

评论回复
| 2020-9-14 18:28 | 显示全部楼层
不用说原因了,直接说一下情况就可以了。我没有仔细看代码,没有看见。

使用特权

评论回复
 楼主 | 2020-9-14 18:32 | 显示全部楼层
情况就是我现在要给MS51FB9AE上电之后主频切换到24M,如何实现

使用特权

评论回复
| 2020-9-15 07:41 | 显示全部楼层
检查KEIL中最佳化设定,可能是TA已经被简化了。

使用特权

评论回复
 楼主 | 2020-9-15 10:15 | 显示全部楼层
我从来不用KEIL的优化,都是0级,也就是关闭优化

使用特权

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

使用特权

评论回复
| 2020-9-18 09:20 | 显示全部楼层
clr_IAPEN;

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

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

使用特权

评论回复
| 2020-9-18 10:10 | 显示全部楼层
能用就行了,官方都研究好的,这种系统级的,根本不需要我们考虑

使用特权

评论回复
 楼主 | 2020-9-18 13:36 | 显示全部楼层
每个人的学习态度是不同的

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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