21ic问答首页 - 谁能给解释下MS51FB9AE官方给提供的修改24M主频的函数?
谁能给解释下MS51FB9AE官方给提供的修改24M主频的函数?
taobaofarmer2020-09-11
本帖最后由 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;是不行的呀?
官方给提供的例程,在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;是不行的呀?
赞0
评论
2021-03-30
赞0
评论
2021-03-30
赞0
评论
2021-01-08
赞0
评论
2021-01-08
赞0
已经找到相关资料了,和我有同样疑问的同学可以在参考这个链接的http://www.nuvoton.com.cn/products/microcontrollers/8bit-8051-mcus/industrial-8051-series/?group=Document&tab=2
找到对应型号的TRM文档就能查看对应寄存器的含义了。
评论
2020-11-16
赞0
评论
2020-11-13
赞0
评论
2020-09-18
赞0
评论
2020-09-18
赞0
TA = 0xAA;
TA = 0x55;
{
RCTRIM0 = hirc_map0;
}
TA = 0xAA;
TA = 0x55;
{
RCTRIM1 = hirc_map1;
}
//禁止低功耗模式
PCON &= CLR_BIT4;
评论
2020-09-18
您需要登录后才可以回复 登录 | 注册