华邦新唐颖特新的个人空间 https://www.eechina.com/space-uid-140263.html [收藏] [复制] [RSS]

博客

如何改变N76E003的频率HIRC,以用于更准确的UART传输?

已有 970 次阅读2018-6-11 09:58 |个人分类:MCU| N76E003、Nuvoton, 新唐、MCU

N76E003的HIRC频率为16 MHz,常温下偏差在1%以内。当用于38400以上baud rate的UART传输时,会因为16 MHz无法除频出38400 Hz的频率,造成baud rate偏差过大,无法稳定传输。

此时用户可以更改HIRC的频率到16.588 MHz,就能产生精准的baud rate。

  • 更改HIRC频率的步骤如下:
     1. Trim value = RCTRIM0(HIRCTRIM[8:1]) + RCTRIM1(HIRCTRIM[0])

    将Trim value–15可以调整HIRC的频率为16.6 MHz。

    2. 将计算值写回RCTRIM0 和RCTRIM1,写入后HIRC的更改会立即生效。

    3. 每次上电后HIRC会恢复成16 MHz,使用者需要通过写SFR来更改HIRC。

    4. 按照16.588 MHz重新计算baud rate,再设定timer产生的baud rate就能符合标准baud rate。

  • 范例程序如下:

    sfr RCTRIM0 = 0x84;

    sfr RCTRIM1 = 0x85;

    bit BIT_TMP;

     

    #define set_IAPEN  BIT_TMP = EA; EA=0; TA=0xAA; TA=0x55; CHPCON |= SET_BIT0; EA= BIT_TMP

    #define set_IAPGO  BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; IAPTRG |= SET_BIT0; EA = BIT_TMP

    #define clr_IAPEN  BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; CHPCON &= ~SET_BIT0; EA=BIT_TMP

     

    unsigned char hircmap0,hircmap1;

    unsigned int trimvalue16bit;

     

    void MODIFY_HIRC_VLAUE(void)

    {

        set_IAPEN;

        IAPAL = 0x30;

        IAPAH = 0x00;

        IAPCN = READ_UID;

        set_IAPGO;

        hircmap0 = IAPFD;

        IAPAL = 0x31;

        IAPAH = 0x00;

        set_IAPGO;

        hircmap1 = IAPFD;

        clr_IAPEN;

        trimvalue16bit = ((hircmap0<<1)+(hircmap1&0x01));

        trimvalue16bit = trimvalue16bit - 15;

        hircmap1 = trimvalue16bit&0x01;

        hircmap0 = trimvalue16bit>>1;

        TA=0XAA;

        TA=0X55;

        RCTRIM0 = hircmap0;

        TA=0XAA;

        TA=0X55;

        RCTRIM1 = hircmap1;

  • 了解更多N76E003使用,Q q 755060328



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
返回顶部