⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_gprs.c

📁 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 + -