用于连接微控制器和AT调制解调器的C库

时间:2013-02-26 17:54:41

标签: gcc embedded microcontroller modem uart

我正在研究一些嵌入式系统,我使用的是低端uC,即Atmega128。 我的系统还包括调制解调器,通过AT命令驱动。我试图寻找任何合适的C库(对于GCC),但找不到任何。虽然我知道将“all”可能的AT命令集放入uC内存并因此具有“通用”库是不合理的(我只需要大约30个命令进行整个操作),我只需要得到一些合适的(即轻量级,强大的)控制机制,用于处理uC中发送和接收的UART字符串。 有人知道任何经过验证的库或功能吗?或者也许有人可以指点我一些好的资源/建议?

1 个答案:

答案 0 :(得分:0)

我希望您可以将其用于GSM或GPRS调制解调器接口,假设您尚未指定应用程序。

简介:GSM,GPRS调制解调器也使用AT命令接口与外部控制器进行通信。

请参阅http://ww1.microchip.com/downloads/en/AppNotes/01373A.pdf

上的详细说明
void UART_Buf(void)
{
        ch=SCI2D;
        if(rx_buffer[2] == 'O' && rx_buffer[3] =='K')
        {   
          rx_buffer[5] = '\0';
          msgindex=2;    // code for OK
          rx_wr_i=0;    
        }
        if(rx_buffer[2] == 'B' && rx_buffer[3] =='U' && rx_buffer[4] == 'S' && rx_buffer[5] =='Y')
        {   
          msgindex=3;    // Code for Busy
          rx_wr_i=0;    
        }

        if(rx_buffer[2] == 'N' && rx_buffer[3] =='O' && rx_buffer[4] == ' ' && rx_buffer[5] =='C' && rx_buffer[6] =='A' && rx_buffer[7] =='R'&& rx_buffer[8] =='R' && rx_buffer[9] =='I' && rx_buffer[10] =='E' && rx_buffer[11] =='R')
        {   
          msgindex=3;    // Code for  No Carrier
          rx_wr_i=0;    
        }
        if(rx_buffer[2] == 'E' && rx_buffer[3] =='R' && rx_buffer[4] == 'R' && rx_buffer[5] =='O' && rx_buffer[6] =='R' )
        {   
          msgindex=4;    // Code for Error
            rx_wr_i=0;  
        } 
         if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'M' && rx_buffer[5] =='S' )
        {   
          msgindex=3;
        } 
         if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'M' && rx_buffer[5] =='E' )
        {   
          msgindex=3;
        }     
        if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'M' && rx_buffer[5] =='G' && rx_buffer[6]== 'R')
        {   
          msgindex=6;
        }

        if(rx_buffer[2]=='E' && rx_buffer[3]=='R' && rx_buffer[4] == 'R' && rx_buffer[5] =='O' && rx_buffer[6] == 'R')
        {   
          msgindex=3;
        } 

        if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'S' && rx_buffer[5] =='Q' )
        {
          msgindex=7;
        }

        if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'O' && rx_buffer[5] =='L'&& rx_buffer[6] =='P' )
        {
         msgindex=8;
        }
        if(ch == '\r')
          linefeed++;
}

和ISR

__interrupt void isrVsci2rx(void)
{
      SCI2S1_RDRF = 0;
      rx_buffer[rx_ack++]= SCI2D;
      if(rx_ack>RX_BUFFER_MASK)
        rx_ack=0;
      UART_Buf();
      rx_length++;

}

检查 msgindex 换行 以了解收到的回复。