Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2003548
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类:

2011-01-04 22:11:51

#include "includes.h"
//系统时钟
#define SYS_TICK 50000000
#define TIME_DELAY 1000000//1M,即一秒
/*-------------------------------------UART2-------------------------------*/
//串口中断初始化
void Uart_3_init(alt_u32 baudrate)
{
    int divisor;
    IOWR_ALTERA_AVALON_UART_CONTROL(UART_3_BASE, 0x80);//接收中断使能
    IOWR_ALTERA_AVALON_UART_STATUS(UART_3_BASE, 0x0);//清状态标志
    IOWR_ALTERA_AVALON_UART_RXDATA(UART_3_BASE, 0x0);//清接收寄存器
    divisor = (int)(SYS_TICK/baudrate+0.5);//设置波特率
    IOWR_ALTERA_AVALON_UART_DIVISOR(UART_3_BASE, divisor);
    alt_irq_register(UART_3_IRQ,0,Uart_3_ISR);
}
#ifdef uart_2
//UART发送一个字节子程序
void Uart_2_send(unsigned char data)
{
    alt_u16 status;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_2_BASE);
    while(!(status&0x0040))//等待发送完成     
        status=IORD_ALTERA_AVALON_UART_STATUS(UART_2_BASE);
    IOWR_ALTERA_AVALON_UART_TXDATA(UART_2_BASE,data);
}
//UART发送多个字节子程序
void Uart_2_send_n(unsigned char *ptr)
{
    while(*ptr)
    {
       Uart_2_send(*ptr);
       ptr++;
    }
    Uart_2_send(0x0a);//显示完一个字符串就回车换行
}
//UART接收子程序
int Uart_2_receive(void)
{
    alt_u16 status;
    int temp;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_2_BASE);
    while(!(status&0x0080))//等待发送完成     
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_2_BASE);
    temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_2_BASE);
    return temp;
}
//串口中断初始化
void Uart_2_init()
{
    IOWR_ALTERA_AVALON_UART_CONTROL(UART_2_BASE, 0x80);//接收中断使能
    IOWR_ALTERA_AVALON_UART_STATUS(UART_2_BASE, 0x0);//清状态标志
    IOWR_ALTERA_AVALON_UART_RXDATA(UART_2_BASE, 0x0);//清接收寄存器
   ////////////////////// alt_irq_register(UART_2_IRQ,0,Uart_2_ISR);
}
#endif
#ifdef uart_3
/*-------------------------------------UART3-------------------------------*/
void Uart_3_send(unsigned char data)
{
    alt_u16 status;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_3_BASE);
    while(!(status&0x0040))//等待发送完成     
        status=IORD_ALTERA_AVALON_UART_STATUS(UART_3_BASE);
    IOWR_ALTERA_AVALON_UART_TXDATA(UART_3_BASE,data);
}
//UART发送多个字节子程序
void Uart_3_send_n(unsigned char *ptr)
{
    while(*ptr)
    {
       Uart_3_send(*ptr);
       ptr++;
    }
    Uart_3_send(0x0a);//显示完一个字符串就回车换行
}
//UART接收子程序
int Uart_3_receive(void)
{
    alt_u16 status;
    int temp;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_3_BASE);
    while(!(status&0x0080))//等待发送完成     
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_3_BASE);
    temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_3_BASE);
    return temp;
}
#ifdef uart_3
    #ifndef uart_2
    alt_u8 flag=0;
    alt_u8 flag1=0;
    #endif
alt_u8 rx_buff[10240];
void Uart_3_ISR(void * context,alt_u32 id)
{
    alt_u8 temp;
    temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_3_BASE);
    //Uart_3_send(temp);
    if(temp=='$')
    {
         flag=1;
         rx_count=0;
    }
    if(temp!='$'&&temp!=',')
    rx_count++;
 
    if(flag==1)
    {
       rx_buff[rx_count]=temp;
        if(rx_buff[1]=='G'&&rx_buff[2]=='P'&&rx_buff[3]=='R'&&rx_buff[4]\=='M'&&rx_buff[5]=='C')
        {
            flag1=1;
            rx_count=0;
            IOWR(LED_RED_BASE,0,1<<17);
        }
        if(flag1==1)
        {
            if(rx_count<=6)
            {
                 time[0]=rx_buff[1];
              time[1]=rx_buff[2];
               time[2]=rx_buff[3];
                time[3]=rx_buff[4];
                 time[4]=rx_buff[5];
                 time[5]=rx_buff[6];
            }
            else
            {
            rx_count=0;
            flag=0;
            flag1=0;
            }
           
        }
    }
  
  
    //printf("%s",rx_buff);
    //IOWR_ALTERA_AVALON_UART_RXDATA(UART_3_BASE, 0x0);//清接收寄存器
   
}
#endif
void  main()
{
    led_init();
    lcd_init();//液晶初始化
    Uart_init();
    alt_u8 bhour;
    while(1)
    { 
        //if(flag==0)
        {
             bhour=(time[0]-'0')*10+time[1]-'0'+TIME_BASE;
        if(bhour>24)
            bhour=bhour-24;
        dis_buff[0]=bhour/10+'0';
        dis_buff[1]=bhour%10+'0';
        dis_buff[2]=':';
        dis_buff[3]=time[2];
        dis_buff[4]=time[3];
        dis_buff[5]=':';
        dis_buff[6]=time[4];
        dis_buff[7]=time[5];
        lcd_line1();
       
        }lcd_show_text(dis_buff);//printf("%s",rx_buff);
      
 
    }
   
}
阅读(4977) | 评论(0) | 转发(0) |
0

上一篇:GPS输出数据手册

下一篇:GPS卫星授时

给主人留下些什么吧!~~