📄 main.c
字号:
/****************************************************************************
* 文 件 名:main.c
* 功 能:GPS时间信息接收实验程序
* 说 明:通过中断接受ZDA语句,保存入数组。
****************************************************************************/
#include "config.h"
#define UART_BPS 9600 //注意值的修改 // 定义通讯波特率
uint8 buf[2000]; // 定义接收缓存
uint32 i;
/****************************************************************************
* 名 称:UART0_Ini()
* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为4800
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_Init(void)
{
uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
//U0FCR = 0x81; // 使能FIFO,并设置触发点为8个字节
//U0IER = 0x01; // 使能RDA中断
}
/****************************************************************************
* 名 称:IRQ_Eint3()
* 功 能:外部中断EINT3服务函数,当1PPS上升沿到来时响应,接受ZDA语句,放入数组。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void __irq IRQ_Eint3(void)
{
uint32 t;
for(t=36;t!=0 && i<2000;t--)
{
if ((U0LSR&0x01) == 1) //判断是否收到有效数据
buf[i++] = U0RBR;
}
EXTINT = 0x08; // 清除EINT3中断标志
VICVectAddr = 0; // 向量中断结束
}
/****************************************************************************
* 名 称:main()----ZDA_RCV_GPS()
* 功 能:ZDA语句接收函数,当1PPS上升沿到来时响应IRQ_Eint3()中断。
* 说 明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。若由于卫星未定位而
* 退出要记得清除中断和引脚设置。
****************************************************************************/
int main(void)
{
PINSEL1 = 0x00000304; // 设置管脚连接,P0.20设置为EINT3,
// 设置I/O连接到UART0
UART0_Init();
EXTMODE = 0x08; // 设置EINT3中断为边沿触发模式
EXTPOLAR = 0x08; // 设置EINT3中断为上升边沿有效
/* 打开EINT3中断(使用非向量IRQ) */
VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断
VICDefVectAddr = (int)IRQ_Eint3; // 设置中断服务程序地址
EXTINT = 0x08; // 清除EINT3中断标志
VICIntEnable = 1<<17; // 使能EINT3中断,EINT3在Bit17上
while(1); // 等待中断
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -