?? gprs.c
字號:
//====================================================================================
// 文 件 名:GPRS.h
// 功能描述: 聲明GPRS模塊常用API函數
// 維護記錄: 2007年12月18日 V1.0 by hongyan.Feng
//====================================================================================
#include "GPRS.h"
#include ".\TFT\TFT_API.h"
char full = FALSE; // 一個回應接收完成標志
char g_RecvBuf[300]; // 接收數據存儲Buffer
//=============================================================
// 語法格式:void delay(int i)
// 功能描述:延時
// 入口參數:i:延時時間
// 出口參數:無
//=============================================================
void delay(int i)
{
i *= 100;
for(; i != 0; i--);
}
//=============================================================
// 語法格式:void UART_Init(void)
// 功能描述:UATR初始化,打開接收中斷
// 入口參數:無
// 出口參數:無
//=============================================================
void UART_Init(unsigned int Bandrate)
{
*P_INT_MASK_CTRL1 &= ~C_INT_UART_DIS; // 打開UART中斷
*P_UART_CLK_CONF = C_UART_CLK_EN
| C_UART_RST_DIS; // 使能UART模塊時鐘
*P_UART_INTERFACE_SEL |= C_UART_PORT_SEL; // 選擇端口作為UART端口
*P_UART_BAUDRATE_SETUP = 27000000 / (Bandrate + 1); // 設置波特率
*P_UART_MODE_CTRL = C_UART_NO_PARITY // 無奇偶校驗
| C_UART_STOP_1BIT // 1bit停止位
| C_UART_DATA_8BIT // 8bit數據位
| C_UART_CTRL_EN // UART使能
| C_UART_RX_INTEN; // UART接收中斷使能
}
//=============================================================
// 語法格式: void UART_SendChar(char cData);
// 實現功能: 通過UART的數據發送端口,串行發送一個字符數據
// 入口參數: cData:待發送的字符數據
// 出口參數: 無
//=============================================================
void UART_SendChar(char cData)
{
while(*P_UART_TXRX_STATUS & C_UART_TXFIFO_FULL); // 發送FIFO滿則等待?
*P_UART_TXRX_DATA = cData;
while(*P_UART_TXRX_STATUS & C_UART_BUSY_FLAG); // 等待發送完成
}
//=============================================================
// 語法格式: void GPRS_SendChar(char cData);
// 實現功能: 向GPRS模塊發送一個字符
// 入口參數: cData: 待發送的字符數據
// 出口參數: 無
//=============================================================
void GPRS_SendChar(char cData)
{
UART_SendChar(cData);
}
//=============================================================
// 語法格式: void GPRS_SendString(char *cmd)
// 實現功能: 向GPRS模塊發送一個字符串
// 入口參數: cmd:待發送的字符串
// 出口參數: 無
//=============================================================
void GPRS_SendString(char *cmd)
{
while(*cmd != '\0')
{
UART_SendChar(*cmd);
cmd++;
delay(10);
}
delay(100);
}
//=============================================================
// 語法格式: void GPRS_SendInt(unsigned int n)
// 實現功能: 向GPRS模塊發送一個ASC形式的整型數
// 入口參數: n:待發送的整形數
// 出口參數: 無
//=============================================================
void GPRS_SendInt(unsigned int n)
{
int i = 0, j = 0;
char Num[32];
char ch;
do
{
Num[i++] = n % 10;
n = (int)n / 10;
}while(n > 0);
for(j = i - 1; j >= 0; j--)
{
ch = Num[j] + 48; //轉化成ASC碼
UART_SendChar(ch);
}
}
//=============================================================
// 語法格式: int GPRS_SendCommand(char *cmd)
// 實現功能: 向GPRS模塊發送命令,如果發送不成功則循環發送命令,直到成功為止
// 入口參數: cmd:命令
// 出口參數: 0:成功
//=============================================================
int GPRS_SendCommand(char *cmd)
{
char Sign = 0;
int i;
while(Sign == 0)
{
GPRS_SendString(cmd);
for(i = 1000; i > 0; i--)
{
if(full == TRUE)
{
if(strcmp(g_RecvBuf, "OK\r\n") == 0)
{
Sign = 1;
break;
}
full = FALSE;
}
}
delay(10000);
}
return 0;
}
//=============================================================
// 語法格式: void GPRS_Reset(void)
// 實現功能: GPRS模塊復位
// 入口參數: 無
// 出口參數: 無
//=============================================================
void GPRS_Reset(void)
{
unsigned int Back;
Back = *P_IOB_GPIO_SETUP;
*P_IOB_GPIO_SETUP = 0x01010100;
delay(100000);
*P_IOB_GPIO_SETUP = Back;
}
//=============================================================
// 語法格式: void GPRS_Init(unsigned int UART_Bandrate)
// 實現功能: GPRS初始化
// 入口參數: 無
// 出口參數: 無
//=============================================================
extern WIN_HANDLE Msg;
void GPRS_Init(unsigned int UART_Bandrate)
{
GPRS_Reset();
UART_Init(UART_Bandrate);
TFT_Print(Msg, "GPRS 初始化中.....\n");
GPRS_SendCommand("AT\r\n");
TFT_Print(Msg, "GPRS通信串口正常\n");
GPRS_SendCommand("AT+CMIC=0,15\r\n");
TFT_Print(Msg, "麥克設置成功\n");
GPRS_SendCommand("AT+CMGF=1\r\n"); // 設置短信為TEXT:1格式,PDU:0
TFT_Print(Msg, "設置短信格式為TEXT 成功\n");
GPRS_SendCommand("AT+CHFA=1\r\n"); // 使用耳機
TFT_Print(Msg, "耳機設置成功\n");
GPRS_SendCommand("AT+CLVL=100\r\n"); // 設置最大音量
TFT_Print(Msg, "中文短消息設置成功\n");
GPRS_SendCommand("AT+CSCS=\"UCS2\"\r\n"); // 設置USC2編碼
TFT_Print(Msg, "USC2設置成功\n");
}
//=============================================================
// 語法格式: void GPRS_IRQ_Service(void)
// 實現功能: GPRS中斷服務函數,該函數在IRQ42()中斷服務函數中調用
// 接收GPRS的回應
// 入口參數: 無
// 出口參數: 無
//=============================================================
void GPRS_IRQ_Service(void)
{
static int iQueuePos = 0;
char uiData;
if(*P_UART_TXRX_STATUS & C_UART_RX_FLAG) // 是否是接收中斷?
{
uiData = *P_UART_TXRX_DATA; // 讀接收數據
g_RecvBuf[iQueuePos++] = uiData;
if(uiData == '\n')
{
g_RecvBuf[iQueuePos] = '\0';
InsertQueue(g_RecvBuf);
full = TRUE;
iQueuePos = 0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -