找回密码
 立即注册
查看: 438|回复: 2

【官网例子分析系列】例子13--EEPROM (第一部分)

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:224
  • 最近打卡:2025-05-07 08:02:46

79

主题

631

回帖

1148

积分

金牌会员

积分
1148
发表于 2024-5-6 23:32:18 | 显示全部楼层 |阅读模式
/*
IE2  
        EUSB:USB 中断允许位。 (注意:此位为只写位,不可读取,读取始终为 0 )
                0:禁止 USB 中断
                1:允许 USB 中断
        ET4:定时/计数器 T4 的溢出中断允许位。
                0:禁止 T4 中断
                1:允许 T4 中断
        ET3:定时/计数器 T3 的溢出中断允许位。
                0:禁止 T3 中断
                1:允许 T3 中断
        ES4:串行口 4 中断允许位。
                0:禁止串行口 4 中断
                1:允许串行口 4 中断
        ES3:串行口 3 中断允许位。
                0:禁止串行口 3 中断
                1:允许串行口 3 中断
        ET2:定时/计数器 T2 的溢出中断允许位。
                0:禁止 T2 中断
                1:允许 T2 中断
        ESPI:SPI 中断允许位。
                0:禁止 SPI 中断
                1:允许 SPI 中断
        ES2:串行口 2 中断允许位。
                0:禁止串行口 2 中断
                1:允许串行口 2 中断
               
P_SW2  
        I2C_S[1:0]  
        CMPO_S  
        S4_S  
        S3_S  
        S2_S    RxD2    TxD2
        0       P1.0    P1.1
        1       P4.6    P4.7
S2CFG
        S2MOD0:帧错误检测控制位
                0:无帧错检测功能
                1:使能帧错误检测功能。此时 S2CON 的 S2SM0/FE 为 FE 功能,即为帧错误检测标志位。
        S2M0x6:串口 2 模式 0 的通讯速度控制
                0:串口 2 模式 0 的波特率不加倍,固定为 Fosc/12
                1:串口 2 模式 0 的波特率 6 倍速,即固定为 Fosc/12*6 = Fosc/2
        W1:当需要使用串口 2 时,此位必须设置为“1”,否则可能会产生不可预期的错误。若不需使用串口
                2,则不用特别设置 W1

S2CON
        S2SM0/FE:当S2CFG寄存器中的S2MOD0位为1时,该位为帧错误检测标志位
        S2SM1  
        S2SM2:允许模式 2 或模式 3 多机通信控制位。
        S2REN:允许/禁止串口接收控制位
                0:禁止串口接收数据
                1:允许串口接收数据
        S2TB8:当串口 2 使用模式 2 或模式 3 时,S2TB8 为要发送的第 9 位数据,按需要由软件置位或清 0。
                在模式 0 和模式 1 中,该位不用。
        S2RB8:当串口 2 使用模式 2 或模式 3 时,S2RB8 为接收到的第 9 位数据,一般用作校验位或者地址帧
                /数据帧标志位。在模式 0 和模式 1 中,该位不用。
        S2TI:串口 2 发送中断请求标志位。在模式 0 中,当串口发送数据第 8 位结束时,由硬件自动将 S2TI
                置 1,向主机请求中断,响应中断后 S2TI 必须用软件清零。在其他模式中,则在停止位开始发送
                时由硬件自动将 S2TI 置 1,向 CPU 发请求中断,响应中断后 S2TI 必须用软件清零。
        S2RI:串口 2 接收中断请求标志位。在模式 0 中,当串口接收第 8 位数据结束时,由硬件自动将 S2RI
                置 1,向主机请求中断,响应中断后 S2RI 必须用软件清零。在其他模式中,串行接收到停止位的
                中间时刻由硬件自动将 S2RI 置 1,向 CPU 发中断申请,响应中断后 S2RI 必须由软件清零。
*/
void UART2_config(u8 brt)    // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
{
    /*********** 波特率固定使用定时器2 *****************/
    if(brt == 2)
    {
        SetTimer2Baudraye((u16)(65536UL - (MAIN_Fosc / 4) / Baudrate2));

        S2CFG |= 0x01;     //使用串口2时,W1位必需设置为1,否则可能会产生不可预期的错误
        S2CON = (S2CON & 0x3f) | 0x40;    //UART2模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率
        ES2   = 1;         //允许中断
        S2REN = 1;         //允许接收
        S2_S  = 1;         //UART2 switch to: 0: P1.0 P1.1,  1: P4.6 P4.7

        RX2_TimeOut = 0;
        B_TX2_Busy = 0;
        TX2_Cnt = 0;
        RX2_Cnt = 0;
    }
}

void UART2_int (void) interrupt 8
{
    if(S2RI)
    {
        S2RI = 0;    //Clear Rx flag
        RX2_Buffer[RX2_Cnt] = S2BUF;
        if(++RX2_Cnt >= UART2_BUF_LENGTH)   RX2_Cnt = 0;
        RX2_TimeOut = 5;
    }

    if(S2TI)
    {
        S2TI = 0;    //Clear Tx flag
        B_TX2_Busy = 0;
    }
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:224
  • 最近打卡:2025-05-07 08:02:46

79

主题

631

回帖

1148

积分

金牌会员

积分
1148
发表于 2024-5-7 12:22:06 | 显示全部楼层
这个例子先暂停更新,我得理解理解,内容有点多。如果各位有什么心得,也请分享在下方。谢谢。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:224
  • 最近打卡:2025-05-07 08:02:46

79

主题

631

回帖

1148

积分

金牌会员

积分
1148
发表于 2024-6-17 08:53:27 | 显示全部楼层
为啥没有讲解自己的理解呢?希望大佬们多留自己的总结啊,从不同角度去总结这个例子。有助于新人理解,也可以从他人的理解角度去思考问题啊。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-8 00:54 , Processed in 0.149728 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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