📄 interface.lis
字号:
.module interface.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\icc\stk500\avrasp\interface.c
0000 .dbfunc e interface_init _interface_init fV
.even
0000 _interface_init::
0000 .dbline -1
0000 .dbline 87
0000 ; /** \file
0000 ; <b>USB receive and transmit</b><br>
0000 ; Autor: Matthias Wei遝r<br>
0000 ; Copyright 2005: Matthias Wei遝r<br>
0000 ; License: QPL (see license.txt)
0000 ; <hr>
0000 ; */
0000 ; #include "stk500.h"
0000 ;
0000 ; unsigned char checksum;
0000 ;
0000 ; //#ifdef CONFIG_INTERFACE_USB
0000 ; #if 0
0000 ;
0000 ; //Hardware
0000 ; #define USB_TXE (PINB&BIT6_POS)
0000 ; #define USB_RXF (PINC&BIT3_POS)
0000 ; #define USB_RD_ON PORTC&=BIT1_NEG
0000 ; #define USB_RD_OFF PORTC|=BIT1_POS
0000 ; #define USB_WR_ON PORTC|=BIT2_POS
0000 ; #define USB_WR_OFF PORTC&=BIT2_NEG
0000 ;
0000 ; /**
0000 ; Initializes the usb interface
0000 ; */
0000 ; void interface_init(void)
0000 ; {
0000 ; PORTC |= BIT1_POS; //USB_RD inactive
0000 ; DDRC |= BIT1_POS|BIT2_POS; //USB_RD, USB_WR as output
0000 ; }
0000 ;
0000 ; /**
0000 ; Reads a byte from the USB interface
0000 ;
0000 ; @return received character or -1 if no character has been received
0000 ; */
0000 ; signed int interface_getc(void)
0000 ; {
0000 ; unsigned char t;
0000 ;
0000 ; if(!USB_RXF)
0000 ; {
0000 ; USB_RD_ON;
0000 ; asm("NOP");
0000 ; t = PIND;
0000 ; USB_RD_OFF;
0000 ;
0000 ; return t;
0000 ; }
0000 ; else return -1;
0000 ; }
0000 ;
0000 ; /**
0000 ; Writes a byte to the USB
0000 ;
0000 ; @param t Byte to be written
0000 ; */
0000 ; void interface_putc(unsigned char t)
0000 ; {
0000 ; while(USB_TXE);
0000 ;
0000 ; //PORTD auf Ausgang
0000 ; DDRD = 0xFF;
0000 ; //Daten auf den Port
0000 ; PORTD = t;
0000 ;
0000 ; USB_WR_ON;
0000 ; USB_WR_OFF;
0000 ;
0000 ; //PORTC auf Eingang
0000 ; DDRD = 0x00;
0000 ; //Pull-Ups ein
0000 ; PORTD = 0xFF;
0000 ;
0000 ; checksum ^= t;
0000 ; }
0000 ;
0000 ; #endif
0000 ;
0000 ; #ifdef CONFIG_INTERFACE_RS232
0000 ;
0000 ; /**
0000 ; Initializes the rs232 interface
0000 ; 3.6864MHz
0000 ; Autor: Lukas Salzburger
0000 ; */
0000 ; void interface_init(void) {
0000 .dbline 88
0000 ; UCSR0B = (1<<RXEN0) | (1<<TXEN0);
0000 88E1 ldi R24,24
0002 8093C100 sts 193,R24
0006 .dbline 89
0006 ; UBRR0L = 1;
0006 81E0 ldi R24,1
0008 8093C400 sts 196,R24
000C .dbline 90
000C ; UBRR0H = 0;
000C 2224 clr R2
000E 2092C500 sts 197,R2
0012 .dbline -2
0012 L2:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e interface_getc _interface_getc fI
.even
0014 _interface_getc::
0014 .dbline -1
0014 .dbline 100
0014 ; }
0014 ;
0014 ; /**
0014 ; Reads a byte from the UART interface
0014 ;
0014 ; Autor: Lukas Salzburger
0014 ;
0014 ; @return received character or -1 if no character has been received
0014 ; */
0014 ; signed int interface_getc(void) { /*获取PC机发来的一字节信息*/
0014 .dbline 102
0014 ;
0014 ; if (UCSR0A & (1<<RXC0)) {
0014 2090C000 lds R2,192
0018 27FE sbrs R2,7
001A 04C0 rjmp L4
001C .dbline 102
001C .dbline 103
001C ; return UDR0;
001C 0091C600 lds R16,198
0020 1127 clr R17
0022 02C0 rjmp L3
0024 L4:
0024 .dbline 105
0024 ; }
0024 ; else {
0024 .dbline 106
0024 ; return -1;
0024 0FEF ldi R16,-1
0026 1FEF ldi R17,-1
0028 .dbline -2
0028 L3:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e interface_putc _interface_putc fV
002A ; t -> R16
.even
002A _interface_putc::
002A .dbline -1
002A .dbline 117
002A ; }
002A ; }
002A ;
002A ; /**
002A ; Writes a byte to the UART
002A ;
002A ; Autor: Lukas Salzburger
002A ;
002A ; @param t Byte to be written
002A ; */
002A ; void interface_putc(unsigned char t) {
002A L7:
002A .dbline 119
002A L8:
002A .dbline 119
002A ;
002A ; while (!(UCSR0A & (1<<UDRE0)));
002A 2090C000 lds R2,192
002E 25FE sbrs R2,5
0030 FCCF rjmp L7
0032 .dbline 121
0032 ;
0032 ; UDR0 = t;
0032 0093C600 sts 198,R16
0036 .dbline 122
0036 ; checksum ^= t;
0036 20900000 lds R2,_checksum
003A 2026 eor R2,R16
003C 20920000 sts _checksum,R2
0040 .dbline -2
0040 L6:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r t 16 c
0042 .dbend
0042 .dbfunc e interface_print _interface_print fV
0042 ; s -> R20,R21
.even
0042 _interface_print::
0042 00D0 rcall push_gset1
0044 A801 movw R20,R16
0046 .dbline -1
0046 .dbline 133
0046 ; }
0046 ;
0046 ; #endif
0046 ;
0046 ; /**
0046 ; Writes a string to USB
0046 ;
0046 ; @param s The string to be send
0046 ; */
0046 ; void interface_print(unsigned char *s)
0046 ; {
0046 05C0 rjmp L12
0048 L11:
0048 .dbline 135
0048 .dbline 136
0048 FA01 movw R30,R20
004A 0081 ldd R16,z+0
004C EEDF rcall _interface_putc
004E .dbline 137
004E 4F5F subi R20,255 ; offset = 1
0050 5F4F sbci R21,255
0052 .dbline 138
0052 L12:
0052 .dbline 134
0052 ; while(*s)
0052 FA01 movw R30,R20
0054 2080 ldd R2,z+0
0056 2220 tst R2
0058 B9F7 brne L11
005A .dbline -2
005A L10:
005A 00D0 rcall pop_gset1
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r s 20 pc
005E .dbend
005E .dbfunc e interface_put16 _interface_put16 fV
005E ; t -> R20,R21
.even
005E _interface_put16::
005E 00D0 rcall push_gset1
0060 A801 movw R20,R16
0062 .dbline -1
0062 .dbline 148
0062 ; {
0062 ; interface_putc(*s);
0062 ; s++;
0062 ; }
0062 ; }
0062 ;
0062 ; /**
0062 ; Sends a 16 bit value over the USB
0062 ; MSB first
0062 ;
0062 ; @param t Value to be send
0062 ; */
0062 ; void interface_put16(unsigned int t)
0062 ; {
0062 .dbline 149
0062 ; interface_putc((t>>8)&0xFF);
0062 8A01 movw R16,R20
0064 012F mov R16,R17
0066 1127 clr R17
0068 1070 andi R17,0
006A DFDF rcall _interface_putc
006C .dbline 150
006C ; interface_putc((t>>0)&0xFF);
006C 042F mov R16,R20
006E 1070 andi R17,0
0070 DCDF rcall _interface_putc
0072 .dbline -2
0072 L14:
0072 00D0 rcall pop_gset1
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbsym r t 20 i
0076 .dbend
0076 .dbfunc e interface_reset_check _interface_reset_check fV
.even
0076 _interface_reset_check::
0076 .dbline -1
0076 .dbline 157
0076 ; }
0076 ;
0076 ; /**
0076 ; Resets the checksum accumulator
0076 ; */
0076 ; void interface_reset_check(void)
0076 ; {
0076 .dbline 158
0076 ; checksum=0;
0076 2224 clr R2
0078 20920000 sts _checksum,R2
007C .dbline -2
007C L15:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbend
007E .dbfunc e interface_send_check _interface_send_check fV
.even
007E _interface_send_check::
007E .dbline -1
007E .dbline 165
007E ; }
007E ;
007E ; /**
007E ; Sends the accumulated checksum
007E ; */
007E ; void interface_send_check(void)
007E ; {
007E .dbline 166
007E ; interface_putc(checksum);
007E 00910000 lds R16,_checksum
0082 D3DF rcall _interface_putc
0084 .dbline 167
0084 ; checksum=0;
0084 2224 clr R2
0086 20920000 sts _checksum,R2
008A .dbline -2
008A L16:
008A .dbline 0 ; func end
008A 0895 ret
008C .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\ICCAVR\icc\stk500\avrasp\interface.c
0000 _checksum::
0000 .blkb 1
0001 .dbsym e checksum _checksum c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -