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

📄 spi.lis

📁 AVR单片机,STK500下载线制作全套资料,包括程序,电路图
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module spi.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRISP~1\icc\spi.c
 0000                   .dbfunc e spi_enable _spi_enable fV
 0000           ;              i -> R20
                        .even
 0000           _spi_enable::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 11
 0002           ; /**   \file 
 0002           ;       <b>SPI</b><br>
 0002           ;       Autor: Matthias Wei遝r<br>
 0002           ;       Copyright 2005: Matthias Wei遝r<br>
 0002           ;       License: QPL (see license.txt)
 0002           ;       <hr>
 0002           ; */
 0002           ; #include "stk500.h"
 0002           ; 
 0002           ; void spi_enable(void)
 0002           ; {
 0002                   .dbline 14
 0002           ;       unsigned char i;
 0002           ;       
 0002           ;       R_RES_ON;
 0002 9798              cbi 0x12,7
 0004                   .dbline 15
 0004           ;       wait_ms(2);
 0004 02E0              ldi R16,2
 0006 10E0              ldi R17,0
 0008 00D0              rcall _wait_ms
 000A                   .dbline 16
 000A           ;       PORTB &= BIT3_NEG & BIT5_NEG;   //MOSI und SCK low
 000A 8FED              ldi R24,-33
 000C 9FEF              ldi R25,-1
 000E E7EF              ldi R30,-9
 0010 FFEF              ldi R31,-1
 0012 E823              and R30,R24
 0014 28B2              in R2,0x18
 0016 2E22              and R2,R30
 0018 28BA              out 0x18,R2
 001A                   .dbline 17
 001A           ;       DDRB |= BIT3_POS | BIT5_POS;    //MOSI und SCK als Ausgang
 001A 87B3              in R24,0x17
 001C 8862              ori R24,40
 001E 87BB              out 0x17,R24
 0020                   .dbline 18
 0020           ;       SPCR = 0x51;                                    //SPI Master /16
 0020 81E5              ldi R24,81
 0022 8DB9              out 0xd,R24
 0024                   .dbline 19
 0024           ;       R_RES_OFF;
 0024 979A              sbi 0x12,7
 0026                   .dbline 20
 0026 4427              clr R20
 0028 02C0              rjmp L6
 002A           L3:
 002A                   .dbline 20
 002A 0000              nop
 002C           L4:
 002C                   .dbline 20
 002C 4395              inc R20
 002E           L6:
 002E                   .dbline 20
 002E           ;       for(i=0;i<200;i++) asm("nop");
 002E 483C              cpi R20,200
 0030 E0F3              brlo L3
 0032                   .dbline 21
 0032           ;       R_RES_ON;
 0032 9798              cbi 0x12,7
 0034                   .dbline 22
 0034           ;       wait_ms(2);
 0034 02E0              ldi R16,2
 0036 10E0              ldi R17,0
 0038 00D0              rcall _wait_ms
 003A                   .dbline 25
 003A           ;       
 003A           ;       //spi_set_speed(eeprom_read_byte(&eeprom_sck_period));
 003A           ;       spi_set_speed(SPI_SPEED_230KHz);
 003A 01E0              ldi R16,1
 003C 14D0              rcall _spi_set_speed
 003E                   .dbline -2
 003E           L2:
 003E 00D0              rcall pop_gset1
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbsym r i 20 c
 0042                   .dbend
 0042                   .dbfunc e spi_disable _spi_disable fV
                        .even
 0042           _spi_disable::
 0042                   .dbline -1
 0042                   .dbline 29
 0042           ; }
 0042           ; 
 0042           ; void spi_disable(void)
 0042           ; {
 0042                   .dbline 30
 0042           ;       SPCR=0x00;                                              //SPI aus
 0042 2224              clr R2
 0044 2DB8              out 0xd,R2
 0046                   .dbline 31
 0046           ;       DDRB &= BIT3_NEG & BIT5_NEG;    //MOSI und SCK als Eingang (hochohmig)
 0046 8FED              ldi R24,-33
 0048 9FEF              ldi R25,-1
 004A E7EF              ldi R30,-9
 004C FFEF              ldi R31,-1
 004E E823              and R30,R24
 0050 27B2              in R2,0x17
 0052 2E22              and R2,R30
 0054 27BA              out 0x17,R2
 0056                   .dbline 32
 0056           ;       R_RES_OFF;
 0056 979A              sbi 0x12,7
 0058                   .dbline -2
 0058           L7:
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbend
 005A                   .dbfunc e spi_reset _spi_reset fV
                        .even
 005A           _spi_reset::
 005A                   .dbline -1
 005A                   .dbline 36
 005A           ; }
 005A           ; 
 005A           ; void spi_reset(void)
 005A           ; {
 005A                   .dbline 37
 005A           ;       R_RES_OFF;
 005A 979A              sbi 0x12,7
 005C                   .dbline 38
 005C           ;       wait_ms(2);
 005C 02E0              ldi R16,2
 005E 10E0              ldi R17,0
 0060 00D0              rcall _wait_ms
 0062                   .dbline 39
 0062           ;       R_RES_ON;       
 0062 9798              cbi 0x12,7
 0064                   .dbline -2
 0064           L8:
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbend
 0066                   .dbfunc e spi_set_speed _spi_set_speed fV
 0066           ;              s -> R16
                        .even
 0066           _spi_set_speed::
 0066 00D0              rcall push_gset1
 0068                   .dbline -1
 0068                   .dbline 54
 0068           ; }
 0068           ; 
 0068           ; /**
 0068           ;       Stellt die Geschwindigkeit des SPI-Busses ein (bei f=3.6864MHz)
 0068           ;       0:              /4                      921.50KHz
 0068           ;       1:              /16                     230.37kHz
 0068           ;       2:              /64                      57.59kHz
 0068           ;       3:              /128             28.79kHz
 0068           ;       26:             /                       4kHz
 0068           ;       0xFE:   /                       603Hz
 0068           ;       
 0068           ;       weitere Geschwindigkeiten geplant
 0068           ;       -> dann per Software-SPI        
 0068           ; */
 0068           ; void spi_set_speed(unsigned char s) {
 0068                   .dbline 56
 0068 402F              mov R20,R16
 006A 5527              clr R21
 006C 4030              cpi R20,0
 006E 4507              cpc R20,R21
 0070 49F0              breq L13
 0072           X0:
 0072 4130              cpi R20,1
 0074 E0E0              ldi R30,0
 0076 5E07              cpc R21,R30
 0078 49F0              breq L14
 007A 4230              cpi R20,2
 007C E0E0              ldi R30,0
 007E 5E07              cpc R21,R30
 0080 51F0              breq L15
 0082 0EC0              rjmp L10
 0084           X1:
 0084                   .dbline 56
 0084           ;       
 0084           ;       switch(s) {
 0084           L13:
 0084                   .dbline 58
 0084           ;               case 0:
 0084           ;                       SPCR&=0xFC;
 0084 8DB1              in R24,0xd
 0086 8C7F              andi R24,252
 0088 8DB9              out 0xd,R24
 008A                   .dbline 59
 008A           ;                       break;
 008A 0DC0              rjmp L11
 008C           L14:
 008C                   .dbline 61
 008C           ;               case 1:
 008C           ;                       SPCR&=0xFC;
 008C 8DB1              in R24,0xd
 008E 8C7F              andi R24,252
 0090 8DB9              out 0xd,R24
 0092                   .dbline 62
 0092           ;                       SPCR|=0x01;
 0092 689A              sbi 0xd,0
 0094                   .dbline 63
 0094           ;                       break;
 0094 08C0              rjmp L11
 0096           L15:
 0096                   .dbline 65
 0096           ;               case 2:
 0096           ;                       SPCR&=0xFC;
 0096 8DB1              in R24,0xd
 0098 8C7F              andi R24,252
 009A 8DB9              out 0xd,R24
 009C                   .dbline 66
 009C           ;                       SPCR|=0x02;
 009C 699A              sbi 0xd,1
 009E                   .dbline 67
 009E           ;                       break;
 009E 03C0              rjmp L11
 00A0           L10:
 00A0                   .dbline 69
 00A0 8DB1              in R24,0xd
 00A2 8360              ori R24,3
 00A4 8DB9              out 0xd,R24
 00A6                   .dbline 70
 00A6           L11:
 00A6                   .dbline -2
 00A6           L9:
 00A6 00D0              rcall pop_gset1
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r s 16 c
 00AA                   .dbend
 00AA                   .dbfunc e spi_clock_pulse _spi_clock_pulse fV

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -