📄 interface.lis
字号:
.module interface.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRISP~1\icc\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 89
0000 ; #ifndef __iom88v_h /*meag8*/
0000 ; UCSRB = (1<<RXEN) | (1<<TXEN);
0000 88E1 ldi R24,24
0002 8AB9 out 0xa,R24
0004 .dbline 90
0004 ; UBRRL = 1;
0004 81E0 ldi R24,1
0006 89B9 out 0x9,R24
0008 .dbline 91
0008 ; UBRRH = 0;
0008 2224 clr R2
000A 20BC out 0x20,R2
000C .dbline -2
000C L2:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e interface_getc _interface_getc fI
.even
000E _interface_getc::
000E .dbline -1
000E .dbline 106
000E ; #else /*mega88*/
000E ; UCSR0B = (1<<RXEN0) | (1<<TXEN0);
000E ; UBRR0L = 1;
000E ; UBRR0H = 0;
000E ; #endif
000E ; }
000E ;
000E ; /**
000E ; Reads a byte from the UART interface
000E ;
000E ; Autor: Lukas Salzburger
000E ;
000E ; @return received character or -1 if no character has been received
000E ; */
000E ; signed int interface_getc(void) { /*获取PC机发来的一字节信息*/
000E .dbline 109
000E ;
000E ; #ifndef __iom88v_h /*meag8*/
000E ; if (UCSRA & (1<<RXC)) {
000E 5F9B sbis 0xb,7
0010 03C0 rjmp L4
0012 .dbline 109
0012 .dbline 110
0012 ; return UDR;
0012 0CB1 in R16,0xc
0014 1127 clr R17
0016 02C0 rjmp L3
0018 L4:
0018 .dbline 112
0018 ; }
0018 ; else {
0018 .dbline 113
0018 ; return -1;
0018 0FEF ldi R16,-1
001A 1FEF ldi R17,-1
001C .dbline -2
001C L3:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbend
001E .dbfunc e interface_putc _interface_putc fV
001E ; t -> R16
.even
001E _interface_putc::
001E .dbline -1
001E .dbline 132
001E ; }
001E ; #else /*mega88*/
001E ; if (UCSR0A & (1<<RXC0)) {
001E ; return UDR0;
001E ; }
001E ; else {
001E ; return -1;
001E ; }
001E ; #endif
001E ; }
001E ;
001E ; /**
001E ; Writes a byte to the UART
001E ;
001E ; Autor: Lukas Salzburger
001E ;
001E ; @param t Byte to be written
001E ; */
001E ; void interface_putc(unsigned char t) {
001E L7:
001E .dbline 135
001E L8:
001E .dbline 135
001E ;
001E ; #ifndef __iom88v_h /*meag8*/
001E ; while (!(UCSRA & (1<<UDRE)));
001E 5D9B sbis 0xb,5
0020 FECF rjmp L7
0022 .dbline 137
0022 ;
0022 ; UDR = t;
0022 0CB9 out 0xc,R16
0024 .dbline 138
0024 ; checksum ^= t;
0024 20900000 lds R2,_checksum
0028 2026 eor R2,R16
002A 20920000 sts _checksum,R2
002E .dbline -2
002E L6:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r t 16 c
0030 .dbend
0030 .dbfunc e interface_print _interface_print fV
0030 ; s -> R20,R21
.even
0030 _interface_print::
0030 00D0 rcall push_gset1
0032 A801 movw R20,R16
0034 .dbline -1
0034 .dbline 155
0034 ; #else /*mega88*/
0034 ; while (!(UCSR0A & (1<<UDRE0)));
0034 ;
0034 ; UDR0 = t;
0034 ; checksum ^= t;
0034 ; #endif
0034 ; }
0034 ;
0034 ; #endif
0034 ;
0034 ; /**
0034 ; Writes a string to USB
0034 ;
0034 ; @param s The string to be send
0034 ; */
0034 ; void interface_print(unsigned char *s)
0034 ; {
0034 05C0 rjmp L12
0036 L11:
0036 .dbline 157
0036 .dbline 158
0036 FA01 movw R30,R20
0038 0081 ldd R16,z+0
003A F1DF rcall _interface_putc
003C .dbline 159
003C 4F5F subi R20,255 ; offset = 1
003E 5F4F sbci R21,255
0040 .dbline 160
0040 L12:
0040 .dbline 156
0040 ; while(*s)
0040 FA01 movw R30,R20
0042 2080 ldd R2,z+0
0044 2220 tst R2
0046 B9F7 brne L11
0048 .dbline -2
0048 L10:
0048 00D0 rcall pop_gset1
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r s 20 pc
004C .dbend
004C .dbfunc e interface_put16 _interface_put16 fV
004C ; t -> R20,R21
.even
004C _interface_put16::
004C 00D0 rcall push_gset1
004E A801 movw R20,R16
0050 .dbline -1
0050 .dbline 170
0050 ; {
0050 ; interface_putc(*s);
0050 ; s++;
0050 ; }
0050 ; }
0050 ;
0050 ; /**
0050 ; Sends a 16 bit value over the USB
0050 ; MSB first
0050 ;
0050 ; @param t Value to be send
0050 ; */
0050 ; void interface_put16(unsigned int t)
0050 ; {
0050 .dbline 171
0050 ; interface_putc((t>>8)&0xFF);
0050 8A01 movw R16,R20
0052 012F mov R16,R17
0054 1127 clr R17
0056 1070 andi R17,0
0058 E2DF rcall _interface_putc
005A .dbline 172
005A ; interface_putc((t>>0)&0xFF);
005A 042F mov R16,R20
005C 1070 andi R17,0
005E DFDF rcall _interface_putc
0060 .dbline -2
0060 L14:
0060 00D0 rcall pop_gset1
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r t 20 i
0064 .dbend
0064 .dbfunc e interface_reset_check _interface_reset_check fV
.even
0064 _interface_reset_check::
0064 .dbline -1
0064 .dbline 179
0064 ; }
0064 ;
0064 ; /**
0064 ; Resets the checksum accumulator
0064 ; */
0064 ; void interface_reset_check(void)
0064 ; {
0064 .dbline 180
0064 ; checksum=0;
0064 2224 clr R2
0066 20920000 sts _checksum,R2
006A .dbline -2
006A L15:
006A .dbline 0 ; func end
006A 0895 ret
006C .dbend
006C .dbfunc e interface_send_check _interface_send_check fV
.even
006C _interface_send_check::
006C .dbline -1
006C .dbline 187
006C ; }
006C ;
006C ; /**
006C ; Sends the accumulated checksum
006C ; */
006C ; void interface_send_check(void)
006C ; {
006C .dbline 188
006C ; interface_putc(checksum);
006C 00910000 lds R16,_checksum
0070 D6DF rcall _interface_putc
0072 .dbline 189
0072 ; checksum=0;
0072 2224 clr R2
0074 20920000 sts _checksum,R2
0078 .dbline -2
0078 L16:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRISP~1\icc\interface.c
0000 _checksum::
0000 .blkb 1
0001 .dbsym e checksum _checksum c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -