📄 main_gprs.c
字号:
/*
*********************************************************
* Copyright (c)
* All rights reserved.
*
* 文件名称:main_uart.c
* 文件标识:程序实现体
* 摘 要:本文件是对UART串口0功能的测试
*
* 当前版本:1.0
* 作 者:刘征
* 完成日期:2005.4.3
*
* 取代版本:
* 作 者:
* 完成日期:
*********************************************************
*/
#define GLOBAL_CLK 1
/*
*********************************************************
* 头文件
*********************************************************
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.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));
//串口1接收中断处理
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();
}
static void Echo_Rx_Data(void)
{
while(!RX_BUF_EMPTY()) {
Uart_SendByte(rx_buf[rx_buf_tail]);
RX_BUF_DEC();
}
}
/****************************************************************************
【功能说明】串口发送命令字符串并等待回显
****************************************************************************/
void GPRS_Cmd( char *pt )
{
Uart_Select( 1 ) ; //选择UART通道为串口1
Uart_Printf( pt );
Uart_Select( 0 ) ; //选择UART通道为串口0
Delay(10);
Echo_Rx_Data();
}
/****************************************************************************
【功能说明】初始化开发平台
****************************************************************************/
void GPRS_Init(void)
{
U32 mpll_val = 0 ;
Port_Init(); //端口初始化
Isr_Init(); //中断初始化
mpll_val = (92<<12)|(1<<4)|(1);
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(14, 12);
cal_cpu_bus_clk();
Uart_Init(0,0,115200); //串口初始化 波特率为115200
Uart_Init(0,1,115200);
Uart_Select(0); //选者串口0
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);
Clk0_Disable();
Clk1_Disable();
}
/****************************************************************************
【功能说明】发送挂机命令ATH
****************************************************************************/
void GPRS_HOLD()
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATH\r");
}
/****************************************************************************
【功能说明】发送接听命令ATA
****************************************************************************/
void GPRS_ANSWER()
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATA\r");
}
/****************************************************************************
【功能说明】发送拨打命令ATDT
****************************************************************************/
void GPRS_CALL(char *number)
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATDT");
GPRS_Cmd(number);
GPRS_Cmd(";\r");
}
/****************************************************************************
【功能说明】发送短信
****************************************************************************/
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("\"\r");
Delay(500);
GPRS_Cmd(text);
Uart_Select( 1 ) ; //选择UART通道为串口1
Uart_SendByte( 26 ); //"CTRL+Z"的ASCII码
Uart_Select( 0 ) ; //选择UART通道为串口0
Delay(100);
Echo_Rx_Data();
Delay(5000); //等待5秒
Echo_Rx_Data();
}
/****************************************************************************
【功能说明】输入一组数字用作电话号码
****************************************************************************/
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 = Uart_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;
Uart_Printf("%c",key);
break;
case ENTER_KEY: //数字输入完毕
//num[i++] = key;
return i;
break;
default: //数字输入错误!!!
Uart_Printf( "输入错误,请重新输入!!!\n");
return 0;
break ;
}
}
}
/****************************************************************************
【功能说明】GPRS模块Q2403实验程序
****************************************************************************/
void Main(void)
{
U16 key ;
char number[20];
GPRS_Init();
Test_Again:
Uart_Printf( "\nGSM/GPRS TEST, press ESC key to exit !\n" ) ;
Uart_Printf(" 1 : Send sh1111111ort message\n");
Uart_Printf(" 2 : Call the number\n");
Uart_Printf(" 3 : Ring off\n");
Uart_Printf(" 4 : Pick up\n");
while(1)
{
key = Uart_Getch();
if(key==ESC_KEY)
break;
/* if(key) {
putch(key);
WrUTXH1(key);
}
*/
Echo_Rx_Data();
switch( key )
{
case '1':
Uart_Printf("Send short message\t\t\n");
Uart_Printf("Please enter the phone number.\n");
if( !InputNumber(number) )break;
Uart_Printf("\nNow send short message...\n");
GPRS_MGS(number,"www.SinoSys.com");
//printf("\n");
//break;
goto Test_Again;
case '2':
Uart_Printf("Call the number\t\t\n");
Uart_Printf("Please enter the phone number.\n");
if( !InputNumber(number) ) break;
Uart_Printf("\nNow send a call...\n");
GPRS_CALL(number);
//printf("\n");
//break;
goto Test_Again;
case '3': Uart_Printf("Ring off\t\t\n");
GPRS_HOLD();
//break;
goto Test_Again;
case '4': Uart_Printf("Pick up\t\t\n");
GPRS_ANSWER();
//break;
goto Test_Again;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -