📄 uart3.lis
字号:
.module uart3.c
.area text(rom, con, rel)
0000 .dbfile E:\item\GPS-1280\uart3.c
0000 .dbfunc e uart3_register_init _uart3_register_init fV
.even
0000 _uart3_register_init::
0000 .dbline -1
0000 .dbline 12
0000 ; #include <iom1280v.h>
0000 ; #include <macros.h>
0000 ; #include "define.h"
0000 ; #include "gps.h"
0000 ;
0000 ; uart uart3;
0000 ;
0000 ; uchar uart3_recv_buf[1000];
0000 ;
0000 ; //-------------------------------------------------------------
0000 ; void uart3_register_init(void)
0000 ; {
0000 .dbline 14
0000 ; //U2X3=1
0000 ; UCSR3A=(1<<U2X3);
0000 82E0 ldi R24,2
0002 80933001 sts 304,R24
0006 .dbline 16
0006 ; //异步模式,数据格式:8位数据位,1位停止位,无奇偶校验
0006 ; UCSR3C=( (1<<UCSZ31) | (1<<UCSZ30) );
0006 86E0 ldi R24,6
0008 80933201 sts 306,R24
000C .dbline 18
000C ; //Focs=14.7456MHZ baudrate=9600
000C ; UBRR3H=0x00;
000C 2224 clr R2
000E 20923501 sts 309,R2
0012 .dbline 19
0012 ; UBRR3L=191;
0012 8FEB ldi R24,191
0014 80933401 sts 308,R24
0018 .dbline 21
0018 ; //发送和接收使能
0018 ; UCSR3B |=(1<<RXEN3);
0018 80913101 lds R24,305
001C 8061 ori R24,16
001E 80933101 sts 305,R24
0022 .dbline 22
0022 ; UCSR3B |=(1<<TXEN3);
0022 80913101 lds R24,305
0026 8860 ori R24,8
0028 80933101 sts 305,R24
002C .dbline 24
002C ; //接收中断使能
002C ; UCSR3B |=(1<<RXCIE3);
002C 80913101 lds R24,305
0030 8068 ori R24,128
0032 80933101 sts 305,R24
0036 .dbline -2
0036 L1:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
0038 .dbfunc e uart3_init _uart3_init fV
.even
0038 _uart3_init::
0038 .dbline -1
0038 .dbline 28
0038 ; }
0038 ; //-------------------------------------------------------------
0038 ; void uart3_init(void)
0038 ; {
0038 .dbline 29
0038 ; uart3_register_init();
0038 E3DF xcall _uart3_register_init
003A .dbline 31
003A ;
003A ; uart3.state = UART_STATE_NULL;
003A 2224 clr R2
003C 2092E803 sts _uart3,R2
0040 .dbline 32
0040 ; uart3.time = UART_TIME;
0040 88E8 ldi R24,136
0042 93E1 ldi R25,19
0044 A0E0 ldi R26,0
0046 B0E0 ldi R27,0
0048 9093EA03 sts _uart3+1+1,R25
004C 8093E903 sts _uart3+1,R24
0050 B093EC03 sts _uart3+1+2+1,R27
0054 A093EB03 sts _uart3+1+2,R26
0058 .dbline 33
0058 ; uart3.last_recv_len = 0;
0058 3324 clr R3
005A 3092EE03 sts _uart3+5+1,R3
005E 2092ED03 sts _uart3+5,R2
0062 .dbline 34
0062 ; uart3.recv_len = 0;
0062 3092F003 sts _uart3+7+1,R3
0066 2092EF03 sts _uart3+7,R2
006A .dbline 35
006A ; uart3.send_len = 0;
006A 3092F203 sts _uart3+9+1,R3
006E 2092F103 sts _uart3+9,R2
0072 .dbline -2
0072 L2:
0072 .dbline 0 ; func end
0072 0895 ret
0074 .dbend
.area vector(rom, abs)
.org 216
00D8 0C943A00 jmp _uart3_rx_isr
.area text(rom, con, rel)
0074 .dbfile E:\item\GPS-1280\uart3.c
0074 .dbfunc e uart3_rx_isr _uart3_rx_isr fV
.even
0074 _uart3_rx_isr::
0074 2A92 st -y,R2
0076 8A93 st -y,R24
0078 9A93 st -y,R25
007A EA93 st -y,R30
007C FA93 st -y,R31
007E 2FB6 in R2,0x3f
0080 2A92 st -y,R2
0082 .dbline -1
0082 .dbline 40
0082 ; }
0082 ; //-------------------------------------------------------------
0082 ; #pragma interrupt_handler uart3_rx_isr:iv_USART3_RXC
0082 ; void uart3_rx_isr(void)
0082 ; {
0082 .dbline 41
0082 ; uart3_recv_buf[uart3.recv_len]=UDR3;
0082 80E0 ldi R24,<_uart3_recv_buf
0084 90E0 ldi R25,>_uart3_recv_buf
0086 E091EF03 lds R30,_uart3+7
008A F091F003 lds R31,_uart3+7+1
008E E80F add R30,R24
0090 F91F adc R31,R25
0092 20903601 lds R2,310
0096 2082 std z+0,R2
0098 .dbline 42
0098 ; (uart3.recv_len)++;
0098 8091EF03 lds R24,_uart3+7
009C 9091F003 lds R25,_uart3+7+1
00A0 0196 adiw R24,1
00A2 9093F003 sts _uart3+7+1,R25
00A6 8093EF03 sts _uart3+7,R24
00AA .dbline -2
00AA L7:
00AA .dbline 0 ; func end
00AA 2990 ld R2,y+
00AC 2FBE out 0x3f,R2
00AE F991 ld R31,y+
00B0 E991 ld R30,y+
00B2 9991 ld R25,y+
00B4 8991 ld R24,y+
00B6 2990 ld R2,y+
00B8 1895 reti
00BA .dbend
00BA .dbfunc e uart0_check_rev_data _uart0_check_rev_data fc
.even
00BA _uart0_check_rev_data::
00BA .dbline -1
00BA .dbline 46
00BA ; }
00BA ; //-------------------------------------------------------------
00BA ; bool uart0_check_rev_data(void)
00BA ; {
00BA .dbline 47
00BA ; if((uart3.last_recv_len) != (uart3.recv_len)){
00BA 2090EF03 lds R2,_uart3+7
00BE 3090F003 lds R3,_uart3+7+1
00C2 4090ED03 lds R4,_uart3+5
00C6 5090EE03 lds R5,_uart3+5+1
00CA 4214 cp R4,R2
00CC 5304 cpc R5,R3
00CE 51F0 breq L11
00D0 X0:
00D0 .dbline 47
00D0 .dbline 48
00D0 ; (uart3.last_recv_len) = (uart3.recv_len);
00D0 2090EF03 lds R2,_uart3+7
00D4 3090F003 lds R3,_uart3+7+1
00D8 3092EE03 sts _uart3+5+1,R3
00DC 2092ED03 sts _uart3+5,R2
00E0 .dbline 49
00E0 ; return true;
00E0 01E0 ldi R16,1
00E2 01C0 xjmp L10
00E4 L11:
00E4 .dbline 51
00E4 ; }
00E4 ; return false;
00E4 0027 clr R16
00E6 .dbline -2
00E6 L10:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbend
00E8 .dbfunc e uart3_function _uart3_function fc
.even
00E8 _uart3_function::
00E8 0E940000 xcall push_xgset300C
00EC .dbline -1
00EC .dbline 55
00EC ; }
00EC ; //-------------------------------------------------------------
00EC ; unsigned char uart3_function(void)
00EC ; {
00EC .dbline 56
00EC ; switch(uart3.state)
00EC 4091E803 lds R20,_uart3
00F0 5527 clr R21
00F2 4030 cpi R20,0
00F4 4507 cpc R20,R21
00F6 79F0 breq L21
00F8 X1:
00F8 4130 cpi R20,1
00FA E0E0 ldi R30,0
00FC 5E07 cpc R21,R30
00FE 49F1 breq L26
0100 X2:
0100 4230 cpi R20,2
0102 E0E0 ldi R30,0
0104 5E07 cpc R21,R30
0106 09F4 brne X8
0108 38C0 xjmp L30
010A X8:
010A X3:
010A 4330 cpi R20,3
010C E0E0 ldi R30,0
010E 5E07 cpc R21,R30
0110 09F4 brne X9
0112 65C0 xjmp L38
0114 X9:
0114 X4:
0114 7DC0 xjmp L18
0116 L21:
0116 .dbline 59
0116 ; {
0116 ; case UART_STATE_NULL:
0116 ; uart3.state = UART_STATE_CHECK_RECV;
0116 81E0 ldi R24,1
0118 8093E803 sts _uart3,R24
011C .dbline 60
011C ; uart3.time = UART_TIME;
011C 88E8 ldi R24,136
011E 93E1 ldi R25,19
0120 A0E0 ldi R26,0
0122 B0E0 ldi R27,0
0124 9093EA03 sts _uart3+1+1,R25
0128 8093E903 sts _uart3+1,R24
012C B093EC03 sts _uart3+1+2+1,R27
0130 A093EB03 sts _uart3+1+2,R26
0134 .dbline 61
0134 ; uart3.last_recv_len = 0;
0134 2224 clr R2
0136 3324 clr R3
0138 3092EE03 sts _uart3+5+1,R3
013C 2092ED03 sts _uart3+5,R2
0140 .dbline 62
0140 ; uart3.recv_len = 0;
0140 3092F003 sts _uart3+7+1,R3
0144 2092EF03 sts _uart3+7,R2
0148 .dbline 63
0148 ; uart3.send_len = 0;
0148 3092F203 sts _uart3+9+1,R3
014C 2092F103 sts _uart3+9,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -