串口程序

代码
1 /*硬件环境:DE2开发板
2 * 本程序主要功能:
3 * 1.每隔1秒钟用串口向外发送一个字符串
4 * 2.当用串口调试助手向其发送0-9这9个数字时,八个数码管都依次显示0-9
5 * */
6  /*配置的系统的波特率是115200*/
7 #include "altera_avalon_uart_regs.h"
8 #include "system.h"
9 #include "altera_avalon_pio_regs.h"
10 #include "alt_types.h"
11 #include "sys/alt_irq.h"
12 #include <stdio.h>
13 #include <string.h>
14 #define UART_BASE 0x00681000
15 #define UART_IRQ 2
16 #define TIME_DELAY 1000000//1M,即一秒
17 //UART发送一个字节子程序
18 void Uart_send(unsigned char data)
19 {
20 alt_u16 status;
21 status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
22 while(!(status&0x0040))//等待发送完成
23 status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
24 IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,data);
25 }
26 //UART发送多个字节子程序
27 void Uart_send_n(unsigned char *ptr)
28 {
29 while(*ptr)
30 {
31 Uart_send(*ptr);
32 ptr++;
33 }
34 Uart_send(0x0a);//显示完一个字符串就回车换行
35 }
36
37 //UART接收子程序
38 int Uart_receive(void)
39 {
40 alt_u16 status;
41 int temp;
42 status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
43 while(!(status&0x0080))//等待发送完成
44 status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
45 temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
46 return temp;
47 }
48 //串口接收中断服务程序
49 void Uart_ISR(void * context,alt_u32 id)
50 {
51 unsigned char temp;
52 temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
53 switch(temp)
54 {
55 case '0':
56 IOWR(SEG7_DISPLAY_BASE,0,0x00000000);break;
57 case '1':
58 IOWR(SEG7_DISPLAY_BASE,0,0x11111111);break;
59 case '2':
60 IOWR(SEG7_DISPLAY_BASE,0,0x22222222);break;
61 case '3':
62 IOWR(SEG7_DISPLAY_BASE,0,0x33333333);break;
63 case '4':
64 IOWR(SEG7_DISPLAY_BASE,0,0x44444444);break;
65 case '5':
66 IOWR(SEG7_DISPLAY_BASE,0,0x55555555);break;
67 case '6':
68 IOWR(SEG7_DISPLAY_BASE,0,0x66666666);break;
69 case '7':
70 IOWR(SEG7_DISPLAY_BASE,0,0x77777777);break;
71 case '8':
72 IOWR(SEG7_DISPLAY_BASE,0,0x88888888);break;
73 case '9':
74 IOWR(SEG7_DISPLAY_BASE,0,0x99999999);break;
75 }
76 }
77 //串口中断初始化
78 void Uart_init()
79 {
80 IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);//接收中断使能
81 IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);//清状态标志
82 // IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x0);//清接收寄存器
83 alt_irq_register(UART_IRQ,0,Uart_ISR);
84 }
85 int main()
86 {
87 Uart_init();
88 while(1)
89 {
90 Uart_send_n("NIOS,I love u!");
91 //Uart_send_n(64);
92 usleep(TIME_DELAY);//延时一微秒
93 }
94 }
95
96

 

posted @ 2010-08-26 11:21  xxfighting  阅读(1621)  评论(0编辑  收藏  举报