📄 uart.lst
字号:
C51 COMPILER V6.00i UART 10/22/2004 10:43:05 PAGE 1
C51 COMPILER 6.00i, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: G:\mc89c51\keilc51\Bin\C51.EXE UART.C DB OE LARGE ROM(LARGE)
stmt level source
1 //#include <reg52.h>
2 #include <intrins.h>
3 //#include <stdio.h>
4 //#include <string.h>
5 #include <absacc.h>
6 #include "intr_init.h"
7 #include "type.h"
8 #include "Port_reg.h"
9 #include "General.h"
10 #include "uart16554.h"
11
12
13 data uint8 ext0cnt=0, extcnt;
14 data uint16 g711data=0x6000;
15
16 data uint8 UART_IIR;
17 data uint8 led0_tmr_cnt, Led0Tmr=150;
18
19 xdata Cmd_Basebuf tx0, rx0; //com2
20 xdata Cmd_Basebuf tx1; //com1
21 xdata Cmd_Basebuf rx2; //com3
22 xdata Cmd_Basebuf tx3,rx3; //com4
23 xdata Cmd_Basebuf tx4, rx4; //com5(W78E516 SERIAL)
24
25 code uint8 serial1[]="serial 1 tx ok!\n\r";
26 code uint8 serial2[]="serial 2 tx ok!\n\r";
27 code uint8 serial3[]="serial 3 tx ok!\n\r";
28 code uint8 serial4[]="serial 4 tx ok!\n\r";
29 code uint8 serial5[]="serial 5 tx ok!\n\r";
30 code uint8 no_connect_ser4[]="Codec serial 4 no connect!\n\r";
31
32 void test_xram(void)
33 {
34 1 uint16 i;
35 1
36 1 for(i=0x7f00; i<0x8000; i++){
37 2 XBYTE[i] = 0x55;
38 2 }
39 1
40 1 for(i=0x7f00; i<0x8000; i++){
41 2 if(XBYTE[i] != 0x55){
42 3 Led0Tmr = 50;
43 3 return;
44 3 }
45 2 }
46 1
47 1 Led0Tmr = 80;
48 1 }
49
50
51 void cmd_buf_init(void)
52 {
53 1 tx0.iBase = TX0_BASE;
54 1 tx0.iLen = CMD_BUFFER_LEN;
55 1 tx0.iPut = 0;
C51 COMPILER V6.00i UART 10/22/2004 10:43:05 PAGE 2
56 1 tx0.iGet = 0;
57 1
58 1 rx0.iBase = RX0_BASE;
59 1 rx0.iLen = CMD_BUFFER_LEN;
60 1 rx0.iPut = 0;
61 1 rx0.iGet = 0;
62 1
63 1 tx1.iBase = TX1_BASE;
64 1 tx1.iLen = CMD_BUFFER_LEN;
65 1 tx1.iPut = 0;
66 1 tx1.iGet = 0;
67 1
68 1 rx2.iBase = RX2_BASE;
69 1 rx2.iLen = CMD_BUFFER_LEN;
70 1 rx2.iPut = 0;
71 1 rx2.iGet = 0;
72 1
73 1 tx3.iBase = TX3_BASE;
74 1 tx3.iLen = CMD_BUFFER_LEN;
75 1 tx3.iPut = 0;
76 1 tx3.iGet = 0;
77 1
78 1 rx3.iBase = RX3_BASE;
79 1 rx3.iLen = CMD_BUFFER_LEN;
80 1 rx3.iPut = 0;
81 1 rx3.iGet = 0;
82 1
83 1 tx4.iBase = TX4_BASE;
84 1 tx4.iLen = CMD_BUFFER_LEN;
85 1 tx4.iPut = 0;
86 1 tx4.iGet = 0;
87 1
88 1 rx4.iBase = RX4_BASE;
89 1 rx4.iLen = CMD_BUFFER_LEN;
90 1 rx4.iPut = 0;
91 1 rx4.iGet = 0;
92 1 }
93
94 void put_byte_data(Cmd_Basebuf *tx, uint8 senddata)
95 {
96 1 XBYTE[tx->iBase + tx->iPut] = senddata;
97 1 if(++tx->iPut >= tx->iLen){
98 2 tx->iPut = 0;
99 2 }
100 1 }
101
102 void put_buf_data(Cmd_Basebuf *tx, uint8 *buf, uint8 len)
103 {
104 1 uint8 i;
105 1
106 1 for(i=0; i<len; i++){
107 2 XBYTE[tx->iBase + tx->iPut] = buf[i];
108 2 if(++tx->iPut >= tx->iLen){
109 3 tx->iPut = 0;
110 3 }
111 2 }
112 1 }
113
114
115 void printf_com_ok(void)
116 {
117 1 put_buf_data((Cmd_Basebuf*)&tx1, serial1, sizeof(serial1));
C51 COMPILER V6.00i UART 10/22/2004 10:43:05 PAGE 3
118 1 put_buf_data((Cmd_Basebuf*)&tx0, serial2, sizeof(serial2));
119 1 //put_buf_data((Cmd_Basebuf*)&tx2, serial3, sizeof(serial3));
120 1 put_buf_data((Cmd_Basebuf*)&tx3, serial4, sizeof(serial4));
121 1 put_buf_data((Cmd_Basebuf*)&tx4, serial5, sizeof(serial5));
122 1 }
123
124 // DEFAULT BAUDRATE IS 9600 AT CRYSTAL IS 1.8432MHZ.
125 void UART_INIT(uint16 uart_addr, uint8 baud)
126 {
127 1 //FIFO mode, receive 1 bytes will innterrupt
128 1 LOC_BYTE(uart_addr + UARTFCR_OFFSET) = TRIGGER_LEVEL1 | RESETTRAFIFO | RESETRECFIFO | FIFOEN;
129 1 LOC_BYTE(uart_addr + UARTLCR_OFFSET) = LCRDLAB | DATA8; //LCR7=1 to Access Divisor Latches
130 1 LOC_BYTE(uart_addr + UARTDLL_OFFSET) = baud;
131 1 LOC_BYTE(uart_addr + UARTDLM_OFFSET) = 0;
132 1 LOC_BYTE(uart_addr + UARTLCR_OFFSET) &= 0x7f; //LCR7=0 to Access Receiver Buffer
133 1 LOC_BYTE(uart_addr + UARTIER_OFFSET) = ERBI; // ETBEI | ERLSI | EDSSI;
134 1 LOC_BYTE(uart_addr + UARTMCR_OFFSET) = EXTINTENABLE; //ENABLE EXTINT
135 1 }
136
137 void TL16554Init(void)
138 {
139 1 UART_INIT(UART1BASE, RATE9600);
140 1 UART_INIT(UART2BASE, RATE9600);
141 1 UART_INIT(UART3BASE, RATE9600);
142 1 UART_INIT(UART4BASE, RATE9600);
143 1 }
144
145 /*
146 void send_char_com(uint8 ch)
147 {
148 SBUF=ch;
149 while(TI==0);
150 TI=0;
151 }
152 */
153
154 void Serial(void ) interrupt 4
155 {
156 1 if(TI){
157 2 TI = 0;
158 2 //SBUF = 0x55;
159 2 }
160 1
161 1 if(RI){
162 2 RI = 0;
163 2 XBYTE[rx4.iBase + rx4.iPut] = SBUF;
164 2 if(++rx4.iPut == rx4.iLen ){
165 3 rx4.iPut = 0;
166 3 }
167 2 }
168 1 } // end of Serial()
169
170
171 void Timer0(void) interrupt 1 //2.0ms
172 {
173 1 //int i;
174 1
175 1 TR0=0;
176 1 TH0= TMR_HI;
177 1 TL0= TMR_LO;
178 1 TR0=1;
179 1
C51 COMPILER V6.00i UART 10/22/2004 10:43:05 PAGE 4
180 1 if(++led0_tmr_cnt >= Led0Tmr){ //RUN LED
181 2 led0_tmr_cnt = 0;
182 2 P1_2 = ~P1_2;
183 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -