2013-02-26 5 views
3

Я работаю над некоторой встроенной системой, где я использую low-end uC, то есть Atmega128. В мою систему также входит модем, управляемый с помощью AT-команд. Я попытался найти любую подходящую библиотеку C (для GCC), но не смог найти ее. Хотя я знаю, что ставить «все» возможную команду AT в память uC, и поэтому наличие библиотеки «общего назначения» необоснованно (и мне просто нужно около 30 команд для всей операции), мне просто нужно получить некоторые подходящие (то есть легкий , надежный) механизм управления для обработки переданных и принятых строк UART в uC. Кто-нибудь знает какие-либо проверенные библиотеки или функции? Или, может быть, кто-нибудь может указать мне на хорошие ресурсы/предложения?C библиотека для интерфейса микроконтроллера и модем AT

+0

Вы хотите иметь возможность разговаривать с интерфейсом RS-232 или у вас уже есть эта возможность и нужно захватить строки UART? –

+0

Мне не нужна помощь с UART, я уже работаю. Мне нужна помощь в разработке программы. :) – TomiL

+2

Набор команд AT и протокол тривиально просты, запрограммируйте его самостоятельно. – Clifford

ответ

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 и перевод строки, чтобы узнать ответ получен.