#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) |