📄 spi.lis
字号:
.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 + -