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

📄 main.c

📁 用于LPC2200系列,中断调试,中断发生,中断终止,已被调试通过
💻 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 + -