2013-02-26 3 views
3

저는 저가의 uC, 즉 Atmega128을 사용하는 일부 임베디드 시스템에서 작업하고 있습니다. 내 시스템에는 AT 명령을 통해 구동되는 모뎀도 포함됩니다. 적절한 C 라이브러리 (GCC 용)를 찾으려고했으나 찾을 수 없습니다. 가능한 모든 AT 명령을 uC 메모리에 넣고 "범용"라이브러리를 사용하는 것이 불합리하다는 것을 알고 있지만 (단지 전체 작업을 위해 약 30 개의 명령이 필요합니다), 필자는 적절한 (예 : ) 경량 , robust) uC에서 송수신 된 UART 문자열을 처리하기위한 제어 메커니즘. 입증 된 라이브러리 또는 기능을 아는 사람이 있습니까? 아니면 누군가가 좋은 리소스/제안을 가르쳐 줄 수 있습니까?마이크로 컨트롤러와 AT 모뎀을 연결하기위한 C 라이브러리

+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++; 
} 

에 응답을 알 수 msgindex라인 피드수신 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++; 

} 

검사에 대한 자세한 설명을 참조하십시오.

관련 문제