打印
[PIC®/AVR®/dsPIC®产品]

关于MCC 生成串口中断代码

[复制链接]
1617|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linkenpark123|  楼主 | 2021-12-9 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实话说,我确实是看不懂串口接收中断的代码,不知道是怎么用的。有那位大老有经验请教下吗?
uint8_t EUSART1_Read(void)
{
    uint8_t readValue  = 0;
   
    while(0 == eusart1RxCount)
    {
    }
   
    eusart1RxLastError = eusart1RxStatusBuffer[eusart1RxTail];
   
    readValue = eusart1RxBuffer[eusart1RxTail++];
    if(sizeof(eusart1RxBuffer) <= eusart1RxTail)  
    {
        eusart1RxTail = 0;
    }
    PIE3bits.RC1IE = 0;  //USART接收中断启用位 0:关闭,阻塞的方式是手动把中断启用位置1,置0
    eusart1RxCount--;
    PIE3bits.RC1IE = 1; //1开启

    return readValue;
    }

/*接收中断函数*/
void EUSART1_Receive_ISR(void)
{

    eusart1RxStatusBuffer[eusart1RxHead].status = 0;

    if(RC1STAbits.FERR){
        eusart1RxStatusBuffer[eusart1RxHead].ferr = 1;
        EUSART1_FramingErrorHandler();
    }

    if(RC1STAbits.OERR){
        eusart1RxStatusBuffer[eusart1RxHead].oerr = 1;
        EUSART1_OverrunErrorHandler();
    }
   
    if(eusart1RxStatusBuffer[eusart1RxHead].status){
        EUSART1_ErrorHandler();
    } else {
        EUSART1_RxDataHandler();
    }
   
    // or set custom function using EUSART1_SetRxInterruptHandler()
}

/*中断回调函数*/
void EUSART1_RxDataHandler(void){
    // use this default receive interrupt handler code
    eusart1RxBuffer[eusart1RxHead++] = RC1REG;   //把接收的字符存入数组
    if(sizeof(eusart1RxBuffer) <= eusart1RxHead) //如果缓冲区溢出,则清零忽略
    {                                            //sizeof(数组名),代表整个数组的存//下标数组名,sizeof(eusart1RxBuffer) 字节数
        eusart1RxHead = 0;                       
    }   
    eusart1RxCount++;   
}

使用特权

评论回复
沙发
linkenpark123|  楼主 | 2021-12-9 14:31 | 只看该作者
真的看不懂他的逻辑,

使用特权

评论回复
板凳
lcczg| | 2021-12-9 14:58 | 只看该作者
本帖最后由 lcczg 于 2021-12-9 14:59 编辑

你可以理解为一个公共数组eusart1RxBuffer, 中断函数往里面写,EUSART1_Read往外面读。两者之间独立,各管各的。好处是没有耦合,不会丢失收到的数据。

使用特权

评论回复
地板
wangchangwenqq| | 2021-12-9 16:56 | 只看该作者
缓冲区是个 FIFO 结构

使用特权

评论回复
5
andreilei| | 2021-12-10 09:18 | 只看该作者
《电子的奇妙世界》用定格动画的方式讲述发生在电子世界的故事,呈现元器件们的奇妙冒险!
整容二极管
晶振的噩梦
谁杀死了LED
保险丝的葬礼
妄自尊大的发光二极管
————
电子的奇妙世界,视频公开课
https://open.21ic.com/open/lesson/5766

使用特权

评论回复
6
keaibukelian| | 2022-1-7 13:44 | 只看该作者
很多标志量不知道代表啥

使用特权

评论回复
7
木木guainv| | 2022-1-7 13:46 | 只看该作者
希望可以多加点注释

使用特权

评论回复
8
tpgf| | 2022-1-7 14:00 | 只看该作者
这样做比较安全

使用特权

评论回复
9
guanjiaer| | 2022-1-7 14:05 | 只看该作者
默认的是几个啊

使用特权

评论回复
10
heimaojingzhang| | 2022-1-7 14:24 | 只看该作者
可以自己再定一个

使用特权

评论回复
11
labasi| | 2022-1-7 14:25 | 只看该作者
这个代码是自己写的吗

使用特权

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

本版积分规则

1

主题

2

帖子

1

粉丝