📄 interface.lis
字号:
.module interface.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\interface.c
0000 .dbfunc e interface_init _interface_init fV
.even
0000 _interface_init::
0000 .dbline -1
0000 .dbline 95
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 ;
0000 ; #include <iccioavr.h>
0000 ; #include "tools.h"
0000 ; #include "interface.h"
0000 ;
0000 ; #include "config.h"
0000 ;
0000 ; unsigned char checksum;
0000 ;
0000 ; #ifdef CONFIG_INTERFACE_USB
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 ; #define USART_BAUD_RATE 115200
0000 ; #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1)
0000 ;
0000 ; /**
0000 ; Initializes the rs232 interface
0000 ;
0000 ; Autor: Lukas Salzburger
0000 ; */
0000 ; void interface_init(void)
0000 ; {
0000 .dbline 96
0000 ; UCSRB = (1<<RXEN) | (1<<TXEN);
0000 88E1 ldi R24,24
0002 8AB9 out 0xa,R24
0004 .dbline 97
0004 ; UBRRL = (unsigned char) USART_BAUD_SELECT;
0004 87E0 ldi R24,7
0006 89B9 out 0x9,R24
0008 .dbline 98
0008 ; UBRRH = (unsigned char) (USART_BAUD_SELECT>>8);
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 109
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)
000E ; {
000E .dbline 111
000E ;
000E ; if (UCSRA & (1<<RXC))
000E 5F9B sbis 0xb,7
0010 03C0 rjmp L4
0012 X0:
0012 .dbline 112
0012 ; {
0012 .dbline 113
0012 ; return UDR;
0012 0CB1 in R16,0xc
0014 1127 clr R17
0016 02C0 xjmp L3
0018 L4:
0018 .dbline 115
0018 ; }
0018 ; else 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 126
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 ; {
001E L7:
001E .dbline 128
001E ;
001E ; while (!(UCSRA & (1<<UDRE)));
001E L8:
001E .dbline 128
001E 5D9B sbis 0xb,5
0020 FECF rjmp L7
0022 X1:
0022 .dbline 130
0022 ;
0022 ; UDR = t;
0022 0CB9 out 0xc,R16
0024 .dbline 131
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 4A93 st -y,R20
0032 5A93 st -y,R21
0034 A801 movw R20,R16
0036 .dbline -1
0036 .dbline 142
0036 ; }
0036 ;
0036 ; #endif
0036 ;
0036 ; /**
0036 ; Writes a string to USB
0036 ;
0036 ; @param s The string to be send
0036 ; */
0036 ; void interface_print(unsigned char *s)
0036 ; {
0036 05C0 xjmp L12
0038 L11:
0038 .dbline 144
0038 ; while (*s)
0038 ; {
0038 .dbline 145
0038 ; interface_putc(*s);
0038 FA01 movw R30,R20
003A 0081 ldd R16,z+0
003C F0DF xcall _interface_putc
003E .dbline 146
003E ; s++;
003E 4F5F subi R20,255 ; offset = 1
0040 5F4F sbci R21,255
0042 .dbline 147
0042 ; }
0042 L12:
0042 .dbline 143
0042 FA01 movw R30,R20
0044 2080 ldd R2,z+0
0046 2220 tst R2
0048 B9F7 brne L11
004A X2:
004A .dbline -2
004A L10:
004A .dbline 0 ; func end
004A 5991 ld R21,y+
004C 4991 ld R20,y+
004E 0895 ret
0050 .dbsym r s 20 pc
0050 .dbend
0050 .dbfunc e interface_put16 _interface_put16 fV
0050 ; t -> R20,R21
.even
0050 _interface_put16::
0050 4A93 st -y,R20
0052 5A93 st -y,R21
0054 A801 movw R20,R16
0056 .dbline -1
0056 .dbline 157
0056 ; }
0056 ;
0056 ; /**
0056 ; Sends a 16 bit value over the USB
0056 ; MSB first
0056 ;
0056 ; @param t Value to be send
0056 ; */
0056 ; void interface_put16(unsigned int t)
0056 ; {
0056 .dbline 158
0056 ; interface_putc((t>>8)&0xFF);
0056 8A01 movw R16,R20
0058 012F mov R16,R17
005A 1127 clr R17
005C 1070 andi R17,0
005E DFDF xcall _interface_putc
0060 .dbline 159
0060 ; interface_putc((t>>0)&0xFF);
0060 8A01 movw R16,R20
0062 1070 andi R17,0
0064 DCDF xcall _interface_putc
0066 .dbline -2
0066 L14:
0066 .dbline 0 ; func end
0066 5991 ld R21,y+
0068 4991 ld R20,y+
006A 0895 ret
006C .dbsym r t 20 i
006C .dbend
006C .dbfunc e interface_reset_check _interface_reset_check fV
.even
006C _interface_reset_check::
006C .dbline -1
006C .dbline 166
006C ; }
006C ;
006C ; /**
006C ; Resets the checksum accumulator
006C ; */
006C ; void interface_reset_check(void)
006C ; {
006C .dbline 167
006C ; checksum=0;
006C 2224 clr R2
006E 20920000 sts _checksum,R2
0072 .dbline -2
0072 L15:
0072 .dbline 0 ; func end
0072 0895 ret
0074 .dbend
0074 .dbfunc e interface_send_check _interface_send_check fV
.even
0074 _interface_send_check::
0074 .dbline -1
0074 .dbline 174
0074 ; }
0074 ;
0074 ; /**
0074 ; Sends the accumulated checksum
0074 ; */
0074 ; void interface_send_check(void)
0074 ; {
0074 .dbline 175
0074 ; interface_putc(checksum);
0074 00910000 lds R16,_checksum
0078 D2DF xcall _interface_putc
007A .dbline 176
007A ; checksum=0;
007A 2224 clr R2
007C 20920000 sts _checksum,R2
0080 .dbline -2
0080 L16:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\单片机\源程序\Snail_mkII\STK500_V2\ICC\interface.c
0000 _checksum::
0000 .blkb 1
0001 .dbsym e checksum _checksum c
0001 ; }
0001 ;
0001 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -