📄 gps_cpu_port.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: GPS_CPU_PORT.c
** Last modified Date: 2005-06-17
** Last Version: 1.0
** Descriptions: cpu port function of GPS
**
**------------------------------------------------------------------------------------------------------
** Created by: Yehaoben
** Created date: 2005-06-17
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.H"
/*********************************************************************************************************
** Function name: UART_Ini
**
** Descriptions: Initial uart
**
** input parameters: baud bandrate
** Returned value: None
**
** Used global variables: None
** Calling modules: None
**
** Created by: Yehaoben
** Created Date: 2005/06/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 UART_Ini(uint32 baud)
{ uint32 bak;
U0IER = U0IER & (~0x02); /* 队列空,则禁止发送中断 */
/* 参数过滤 */
if( (0==baud)||(baud>115200) ) return(0);
/* 设置串口波特率 */
U0LCR = 0x80; // DLAB位置1
bak = (Fpclk>>4)/baud;
U0DLM = bak>>8;
U0DLL = bak&0xff;
/* 设置串口模式 */
bak = 3; // 设置字长度
bak |= 0<<4; // 设置奇偶校验
U0LCR = bak;
// U0FCR = 0x00;
U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节
U0IER = 0x01; // 允许RBR中断,即接收中断
return(1);
}
/*********************************************************************************************************
** Function name: IRQ_UART
**
** Descriptions: UART interrupt server function
**
** input parameters: None
** Returned value: None
**
** Used global variables: None
** Calling modules: None
**
** Created by: Yehaoben
** Created Date: 2005/06/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
extern void ZLG_GPS_RVC_HANDLE(uint8 i);
void IRQ_UART(void)
{
uint8 IIR, temp, i;
OS_ENTER_CRITICAL();
while(((IIR = U0IIR) & 0x01) == 0)
{ /* 有中断未处理完 */
switch (IIR & 0x0e)
{
case 0x02: /* THRE中断 */
break;
case 0x04: // 读取FIFO的数据,并清除中断标志
case 0x0c: /* 字符超时指示 */
while((U0LSR&0x01)!=0)
{
i = U0RBR;
ZLG_GPS_RVC_HANDLE(i);
}
break;
case 0x06: /* 接收线状态 */
temp = U0LSR;
break;
default :
break;
}
}
VICVectAddr = 0; // 通知中断控制器中断结束
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** Function name: ZLG_GPS_Send_String
**
** Descriptions: Send string
**
** input parameters: char *:string pointer
** Returned value: None
**
** Used global variables: None
** Calling modules: None
**
** Created by: Yehaoben
** Created Date: 2005/06/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ZLG_GPS_Send_String(char * strptr)
{
uint8 i,j,k,l;
k = strlen(strptr);
l = 0;
do
{
j = (k > 16) ? 16 : k;
for(i=0; i<j; i++)
U0THR = strptr[i + (l * 16)];
l++;
k = k - j;
while( (U0LSR&0X00000040) == 0);
}while(k > 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -