⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.lis

📁 很好的制作AVR32 ICE的资料
💻 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 + -