/****************************************Copyright (c)**************************************************** ** Guangzhou ZHIYUAN electronics Co.,LTD. ** ** http://www.embedtools.com ** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2010-02-04 ** Last Version: V1.0 ** Descriptions: The main() function example template ** **-------------------------------------------------------------------------------------------------------- ** Created by: Lanwuqiang ** Created date: 2010-02-05 ** Version: V1.0 ** Descriptions: 添加用户应用程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ZhangNingbo ** Modified date: 2010-02-25 ** Version: V1.0 ** Descriptions: 串口MODEM接口示例程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: ** Version: ** Descriptions: ** ** Rechecked by: *********************************************************************************************************/ #include "..\config.h" #include /********************************************************************************************************* 变量与宏定义 *********************************************************************************************************/ #define BEEP (1ul << 7) /* 蜂鸣器P2.7 */ #define BEEPOFF() GPIO2DATA |= BEEP /* 蜂鸣器关 */ #define BEEPON() GPIO2DATA &=~BEEP /* 蜂鸣器开 */ #define UART_BPS 115200 /* 串口通信波特率 */ volatile INT8U GucRcvNew; /* 串口接收新数据的标志 */ char GucRcvBuf[10] ; /* 串口接收数据缓冲区 */ INT32U GulNum; /* 串口接收数据的个数 */ /********************************************************************************************************* ** Function name: myDelay ** Descriptions: 软件延时 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void myDelay (INT32U ulTime) { INT32U i; i = 0; while (ulTime--) { for (i = 0; i < 5000; i++); } } /********************************************************************************************************* ** Function name: uartInit ** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartInit (void) { INT16U usFdiv; SYSAHBCLKCTRL |= (1ul << 12); /* 打开UART功能部件时钟 */ UARTCLKDIV = 0x01; /* UART时钟分频 */ U0LCR = 0x83; /* 允许设置波特率 */ usFdiv = (FAHBCLK / UARTCLKDIV / 16) / UART_BPS; /* 设置波特率 */ U0DLM = usFdiv / 256; U0DLL = usFdiv % 256; U0LCR = 0x03; /* 锁定波特率 */ U0FCR = 0x87; /* 使能FIFO,设置8个字节触发点 */ U0IER = 0x01; /* 使能接收中断 */ U0MCR = 0x03; /* 使能DTR和RTS输出低 */ } /********************************************************************************************************* ** Function name: uartSendByte ** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式 ** input parameters: ucDat: 要发送的数据 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartSendByte (INT8U ucDat) { U0THR = ucDat; /* 写入数据 */ while ((U0LSR & 0x40) == 0) { /* 等待数据发送完毕 */ } } /********************************************************************************************************* ** Function name: uartSendStr ** Descriptions: 向串口发送字符串 ** input parameters: pucStr: 要发送的字符串指针 ** ulNum: 要发送的数据个数 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartSendStr (INT8U const *pucStr, INT32U ulNum) { INT32U i; for (i = 0; i < ulNum; i++) { /* 发送指定个字节数据 */ uartSendByte (*pucStr++); } } /********************************************************************************************************* * Function Name: uartIsr * Description: UART中断服务函数 * Input: 无 * Output: 无 * Return: 无 *********************************************************************************************************/ void uartIsr (void) { GulNum = 0; while ((U0IIR & 0x01) == 0) { /* 判断是否有中断挂起 */ switch (U0IIR & 0x0E) { /* 判断中断标志 */ case 0x04: /* 接收数据中断 */ GucRcvNew = 1; /* 置接收新数据标志 */ for (GulNum = 0; GulNum < 8; GulNum++) { /* 连续接收8个字节 */ GucRcvBuf[GulNum] = U0RBR; } break; case 0x0C: /* 字符超时中断 */ GucRcvNew = 1; while ((U0LSR & 0x01) == 0x01) { /* 判断数据是否接收完毕 */ GucRcvBuf[GulNum] = U0RBR; GulNum++; } break; default: break; } } } /********************************************************************************************************* ** Function name: main ** Descriptions: 短接P1.7与TXD、P1.6与RXD,P2.2与DCD,P2.1与DSR,P0.7与CTS,P2.3与RI,P2.0与DTR,P1.5与RTS ** 波特率为115200,连接串口与TR-800,如果收发数据正确蜂鸣器连续蜂鸣,如果错误则没有反应 ** (基于EasyCortex M3-1300开发板) ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ int main (void) { targetInit(); /* 初始化目标板,切勿删除 */ pinInit(); /* 引脚初始化 */ SYSAHBCLKCTRL |= (1ul << 6); GPIO2DIR |= BEEP; uartInit(); /* 串口初始化 */ zyIsrSet(NVIC_UART, (unsigned long)uartIsr, PRIO_ONE); /* 设置优先级 */ while (1) { uartSendStr("ATE0\r", 5); /* 向Modem发送AT指令 */ if (GucRcvNew == 1) { /* 判断是否有新数据 */ GucRcvNew = 0; /* 清除标志 */ if (strcmp(GucRcvBuf, "\r\nOK\r\n ") == 0) { /* 如果收到正确的返回值就退出 */ break; } memset(GucRcvBuf, 0, 20); } myDelay(50); } while (1) { /* 收到正确的反回值BEEP一直响 */ BEEPON(); myDelay(300); BEEPOFF(); myDelay(300); } } /********************************************************************************************************* End Of File *********************************************************************************************************/