📄 gprs_q2403.c
字号:
/****************************************************************************
【文 件 名 称】GPRS_Q2403.c
【功 能 描 述】FS2410XP教学平台实验程序
【程 序 版 本】3.0
【创建及创建日期】优龙公司/2005-XX-XX
【修改及修改日期】2005-5-23
****************************************************************************/
//头文件定义
#include "def.h"
#include "2410addr.h"
#include "config.h"
#include "board.h"
#define RX_BUF_SIZE 1024
static char rx_buf[RX_BUF_SIZE];
static U16 rx_buf_head, rx_buf_tail;
#define RX_BUF_EMPTY() (rx_buf_head==rx_buf_tail)
#define RX_BUF_INC() (rx_buf_head = (rx_buf_head+1)&(RX_BUF_SIZE-1));
#define RX_BUF_DEC() (rx_buf_tail = (rx_buf_tail+1)&(RX_BUF_SIZE-1));
/********************************************************************
Function name: Uart1RxInt
Parameter : void
Description : 串口1接收中断处理程序
Return : void
Argument : void
Autor & date :
*********************************************************************/
static void __irq Uart1RxInt(void)
{
ClearSubPending(BIT_SUB_RXD1); //rSUBSRCPND = BIT_SUB_RXD0; //Clear pending bit (Requested)
ClearPending(BIT_UART1);
//printf("URT1 rx interrupt!\n");
rx_buf[rx_buf_head] = RdURXH1();
RX_BUF_INC();
if(RX_BUF_EMPTY())
RX_BUF_DEC();
}
/********************************************************************
Function name: Echo_Rx_Data
Parameter : void
Description : 串口回显函数
Return : void
Argument : void
Autor & date :
*********************************************************************/
static void Echo_Rx_Data(void)
{
while(!RX_BUF_EMPTY()) {
putch(rx_buf[rx_buf_tail]);
RX_BUF_DEC();
}
}
/********************************************************************
Function name: GPRS_Cmd
Parameter : void
Description : 串口发送命令字符串并等待回显
Return : void
Argument : void
Autor & date :
*********************************************************************/
void GPRS_Cmd( char *pt )
{
int i=0;
// char ch[1];
while( pt[i] )
{
SerialSwitch( 1 ) ; //选择UART通道为串口1
//if( pt[i]=='\n' ) SerialTxChar('\r');
SerialTxChar( pt[i] );
SerialSwitch( 0 ) ; //选择UART通道为串口0
i++;
}
Delay(10);
Echo_Rx_Data();
}
/********************************************************************
Function name: GPRS_KeyUartPoll
Parameter : void
Description : 回显模块送回的信息
Return : void
Argument : void
Autor & date :
*********************************************************************/
void GPRS_KeyUartPoll()
{
char ch[1];
//while( getkey() != ESC_KEY )
{
if(rUTRSTAT1 & 0x1)
{
SerialSwitch( 1 ) ; //选择UART通道为串口1
//ch[0] = SerialRxChar() ;
ch[0] = SerialRxKey();
SerialSwitch( 0 ) ; //选择UART通道为串口0
//SerialTxChar( ch[0] );
if(ch[0])
printf("%c", ch[0]);
}
}
}
/********************************************************************
Function name: Test_GPRS_Init
Parameter : void
Description : GPRS初始化
Return : void
Argument : void
Autor & date :
*********************************************************************/
void Test_GPRS_Init()
{
printf("Initialize GPRS modem...\n");
rGPGCON &= ~((3<<4)|(3<<12));
rGPGCON |= (1<<4)|(1<<12);
rGPGDAT &= ~(1<<2);
rGPGDAT &= ~(1<<6);
rGPHCON |= 0xf<<12; //RTS1, CTS1
rGPHUP |= 3<<6; //Uart port pull-up disable
SerialChgBaud( 115200 ) ;
rx_buf_head = rx_buf_tail = 0;
pISR_UART1 = (U32)Uart1RxInt; //串口接收数据中断
ClearSubPending(BIT_SUB_RXD1);
ClearPending(BIT_UART1);
EnableSubIrq(BIT_SUB_RXD1);
EnableIrq(BIT_UART1);
GPRS_Cmd("AT\n");
Delay(500);
// GPRS_Cmd("AT\n");
// Delay(500);
//下面选择通道1,使用带麦克的耳机
GPRS_Cmd("AT+SPEAKER=1\n"); //设置通话通道为1
Delay(500);
GPRS_Cmd("AT+VGR=255\n");//设置受话器音量最大
Delay(500);
GPRS_Cmd("AT+VGT=255\n");//设置通道1的话筒增益
Delay(500);
}
/********************************************************************
Function name: Test_GPRS_Exit
Parameter : void
Description : GPRS退出
Return : void
Argument : void
Autor & date :
*********************************************************************/
static void Test_GPRS_Exit(void)
{
DisableSubIrq(BIT_SUB_RXD1);
DisableIrq(BIT_UART1);
}
/********************************************************************
Function name: GPRS_HOLD
Parameter : void
Description : 发送挂机命令ATH
Return : void
Argument : void
Autor & date :
*********************************************************************/
void GPRS_HOLD()
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATH\r");
}
/********************************************************************
Function name: GPRS_ANSWER
Parameter : void
Description : 发送接听命令ATA
Return : void
Argument : void
Autor & date :
*********************************************************************/
void GPRS_ANSWER()
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATA\r");
}
/********************************************************************
Function name: GPRS_CALL
Parameter : *num:电话号码的指针变量
Description : 发送拨打命令ATD
Return : void
Argument : void
Autor & date :
*********************************************************************/
void GPRS_CALL(char *number)
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATD");
GPRS_Cmd(number);
GPRS_Cmd(";\r");
}
/********************************************************************
Function name: GPRS_MGS
Parameter : *num:电话号码的指针变量
*text:要发送的文本信息
Description : 输入一组数字用作电话号码
Return : void
Argument : void
Autor & date :
*********************************************************************/
static void GPRS_MGS(char *number, char *text)
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("AT+CMGF=1\r");//发送修改字符集命令,TEXT模式
Delay(500);
GPRS_Cmd("AT+CMGS="); //发送发短信命令
GPRS_Cmd(number);
GPRS_Cmd("\n");
GPRS_Cmd(text);
SerialSwitch( 1 ) ; //选择UART通道为串口1
SerialTxChar( 26 ); //"CTRL+Z"的ASCII码
SerialSwitch( 0 ) ; //选择UART通道为串口0
Delay(100);
Echo_Rx_Data();
}
/********************************************************************
Function name: InputNumber
Parameter : *num:存放电话号码的指针
Description : 输入一组数字用作电话号码
Return : 成功返回非0
Argument : void
Autor & date :
*********************************************************************/
static int InputNumber(char *num)
{
int key;
int i=0;
for(i=0; i<20; i++)
num[i] = 0;
i = 0;
printf("Please input the number:\n");
while(1)
{
key = getch();
switch(key)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
num[i++] = key;
printf("%c",key);
break;
case ENTER_KEY: //数字输入完毕
//num[i++] = key;
return i;
break;
default: //数字输入错误!!!
printf( "输入错误,请重新输入!!!\n");
return 0;
break ;
}
}
}
/********************************************************************
Function name: Test_Q2403A
Parameter : void
Description : GSM/GPRS短信发送等功能
Return : void
Argument : void
Autor & date :
*********************************************************************/
void Test_GPRS_Q2403(void)
{
U16 key ;
char number[20];
char Message[64] = {"Hello! "} ;
Test_GPRS_Init(); //GPRS/GSM初始化
Test_Again:
printf( "\nGSM/GPRS TEST, press ESC key to exit !\n" ) ;
printf(" 1 : Send short message\n");
printf(" 2 : Call the number\n");
printf(" 3 : Ring off\n");
printf(" 4 : Pick up\n");
while(1)
{
key = getkey();
if(key==ESC_KEY)
break;
Echo_Rx_Data();
switch( key )
{
case '1': printf("Send short message\t\t\n");
if( !InputNumber(number) )break;
printf("\nNow send short message...\n");
GPRS_MGS( number, Message );
goto Test_Again;
case '2': printf("Call the number\t\t\n");
if( !InputNumber(number) ) break;
printf("\nNow send a call...\n");
GPRS_CALL(number);
goto Test_Again;
case '3': printf("Ring off\t\t\n");
GPRS_HOLD();
goto Test_Again;
case '4': printf("Pick up\t\t\n");
GPRS_ANSWER();
goto Test_Again;
}
}
Test_GPRS_Exit(); //GPRS/GSM退出
}
/*************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -