打印

LIN的自动波特率问题

[复制链接]
1172|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shitou45823258|  楼主 | 2022-3-21 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大神们好!按照PIC16F18系列自动波特率的时序,在LIN_RX_IDLE里面,ABD使能,在LIN_RX_SYNC里面,读一次RC1REG将RCIF置0,波特率自动填充SP1BRG里面。现在在LIN_RX_SYNC里面,SPIBRG的值读出是对的,但是程序跳到LIN_RX_PID里面,读出PID报错,数据为0。请大神们指点,谢谢!case LIN_RX_IDLE:
            if(EUSART1_is_rx_ready() > 0){
                //Start Timer
                LIN_startTimer(READ_TIMEOUT);
                LIN_rxInProgress = true;
                LIN_rxState = LIN_RX_BREAK;
                BAUD1CONbits.ABDEN = 1;//set auto baud detection
            }
            break;
case LIN_RX_BREAK:
            if(EUSART1_is_rx_ready() > 0){
                if(LIN_breakCheck() == true){  //Read Break
                    LIN_rxState = LIN_RX_SYNC;
                } else {
                    LIN_rxState = LIN_RX_ERROR;
                }
            }
            break;
case LIN_RX_SYNC:
            if(EUSART1_is_rx_ready() > 0){
                while (BAUDCONbits.ABDEN == 1)
               {
                   if (BAUDCONbits.ABDOVF == 1)
                   {
                       BAUDCONbits.ABDEN  = 0;    // abort auto baud
                       BAUDCONbits.ABDOVF = 0;    // start auto baud
                       BAUDCONbits.ABDEN  = 1;    // restart auto baud
                   }
                }
                index = EUSART1_Read();
                RC1REG_DATA=RC1REG;
                if((SP1BRGL+(SP1BRGH<<8))>0)
                {
                    LIN_rxState = LIN_RX_PID;

                }else
                {
                    LIN_rxState = LIN_RX_ERROR;
                }

          }
         break;

使用特权

评论回复

相关帖子

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

本版积分规则

1

主题

1

帖子

0

粉丝