📄 spi.lis
字号:
.module spi.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\avrisp\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 8BEF ldi R24,-5
0004 9FEF ldi R25,-1
0006 28B2 in R2,0x18
0008 2822 and R2,R24
000A 28BA out 0x18,R2
000C .dbline 15
000C ; wait_ms(2);
000C 02E0 ldi R16,2
000E 10E0 ldi R17,0
0010 00D0 rcall _wait_ms
0012 .dbline 16
0012 ; PORTB &= BIT3_NEG & BIT5_NEG; //MOSI und SCK low
0012 8FED ldi R24,-33
0014 9FEF ldi R25,-1
0016 E7EF ldi R30,-9
0018 FFEF ldi R31,-1
001A E823 and R30,R24
001C 28B2 in R2,0x18
001E 2E22 and R2,R30
0020 28BA out 0x18,R2
0022 .dbline 17
0022 ; DDRB |= BIT3_POS | BIT5_POS; //MOSI und SCK als Ausgang
0022 87B3 in R24,0x17
0024 8862 ori R24,40
0026 87BB out 0x17,R24
0028 .dbline 18
0028 ; SPCR = 0x51; //SPI Master /16
0028 81E5 ldi R24,81
002A 8DB9 out 0xd,R24
002C .dbline 19
002C ; R_RES_OFF;
002C C29A sbi 0x18,2
002E .dbline 20
002E 4427 clr R20
0030 02C0 rjmp L6
0032 L3:
0032 .dbline 20
0032 0000 nop
0034 L4:
0034 .dbline 20
0034 4395 inc R20
0036 L6:
0036 .dbline 20
0036 ; for(i=0;i<200;i++) asm("nop");
0036 483C cpi R20,200
0038 E0F3 brlo L3
003A .dbline 21
003A ; R_RES_ON;
003A 8BEF ldi R24,-5
003C 9FEF ldi R25,-1
003E 28B2 in R2,0x18
0040 2822 and R2,R24
0042 28BA out 0x18,R2
0044 .dbline 22
0044 ; wait_ms(2);
0044 02E0 ldi R16,2
0046 10E0 ldi R17,0
0048 00D0 rcall _wait_ms
004A .dbline 25
004A ;
004A ; //spi_set_speed(eeprom_read_byte(&eeprom_sck_period));
004A ; spi_set_speed(SPI_SPEED_230KHz);
004A 01E0 ldi R16,1
004C 18D0 rcall _spi_set_speed
004E .dbline -2
004E L2:
004E 00D0 rcall pop_gset1
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r i 20 c
0052 .dbend
0052 .dbfunc e spi_disable _spi_disable fV
.even
0052 _spi_disable::
0052 .dbline -1
0052 .dbline 29
0052 ; }
0052 ;
0052 ; void spi_disable(void)
0052 ; {
0052 .dbline 30
0052 ; SPCR=0x00; //SPI aus
0052 2224 clr R2
0054 2DB8 out 0xd,R2
0056 .dbline 31
0056 ; DDRB &= BIT3_NEG & BIT5_NEG; //MOSI und SCK als Eingang (hochohmig)
0056 8FED ldi R24,-33
0058 9FEF ldi R25,-1
005A E7EF ldi R30,-9
005C FFEF ldi R31,-1
005E E823 and R30,R24
0060 27B2 in R2,0x17
0062 2E22 and R2,R30
0064 27BA out 0x17,R2
0066 .dbline 32
0066 ; R_RES_OFF;
0066 C29A sbi 0x18,2
0068 .dbline -2
0068 L7:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbend
006A .dbfunc e spi_reset _spi_reset fV
.even
006A _spi_reset::
006A .dbline -1
006A .dbline 36
006A ; }
006A ;
006A ; void spi_reset(void)
006A ; {
006A .dbline 37
006A ; R_RES_OFF;
006A C29A sbi 0x18,2
006C .dbline 38
006C ; wait_ms(2);
006C 02E0 ldi R16,2
006E 10E0 ldi R17,0
0070 00D0 rcall _wait_ms
0072 .dbline 39
0072 ; R_RES_ON;
0072 8BEF ldi R24,-5
0074 9FEF ldi R25,-1
0076 28B2 in R2,0x18
0078 2822 and R2,R24
007A 28BA out 0x18,R2
007C .dbline -2
007C L8:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbend
007E .dbfunc e spi_set_speed _spi_set_speed fV
007E ; s -> R16
.even
007E _spi_set_speed::
007E 00D0 rcall push_gset1
0080 .dbline -1
0080 .dbline 54
0080 ; }
0080 ;
0080 ; /**
0080 ; Stellt die Geschwindigkeit des SPI-Busses ein (bei f=3.6864MHz)
0080 ; 0: /4 921.50KHz
0080 ; 1: /16 230.37kHz
0080 ; 2: /64 57.59kHz
0080 ; 3: /128 28.79kHz
0080 ; 26: / 4kHz
0080 ; 0xFE: / 603Hz
0080 ;
0080 ; weitere Geschwindigkeiten geplant
0080 ; -> dann per Software-SPI
0080 ; */
0080 ; void spi_set_speed(unsigned char s) {
0080 .dbline 56
0080 402F mov R20,R16
0082 5527 clr R21
0084 4030 cpi R20,0
0086 4507 cpc R20,R21
0088 49F0 breq L13
008A X0:
008A 4130 cpi R20,1
008C E0E0 ldi R30,0
008E 5E07 cpc R21,R30
0090 49F0 breq L14
0092 4230 cpi R20,2
0094 E0E0 ldi R30,0
0096 5E07 cpc R21,R30
0098 51F0 breq L15
009A 0EC0 rjmp L10
009C X1:
009C .dbline 56
009C ;
009C ; switch(s) {
009C L13:
009C .dbline 58
009C ; case 0:
009C ; SPCR&=0xFC;
009C 8DB1 in R24,0xd
009E 8C7F andi R24,252
00A0 8DB9 out 0xd,R24
00A2 .dbline 59
00A2 ; break;
00A2 0DC0 rjmp L11
00A4 L14:
00A4 .dbline 61
00A4 ; case 1:
00A4 ; SPCR&=0xFC;
00A4 8DB1 in R24,0xd
00A6 8C7F andi R24,252
00A8 8DB9 out 0xd,R24
00AA .dbline 62
00AA ; SPCR|=0x01;
00AA 689A sbi 0xd,0
00AC .dbline 63
00AC ; break;
00AC 08C0 rjmp L11
00AE L15:
00AE .dbline 65
00AE ; case 2:
00AE ; SPCR&=0xFC;
00AE 8DB1 in R24,0xd
00B0 8C7F andi R24,252
00B2 8DB9 out 0xd,R24
00B4 .dbline 66
00B4 ; SPCR|=0x02;
00B4 699A sbi 0xd,1
00B6 .dbline 67
00B6 ; break;
00B6 03C0 rjmp L11
00B8 L10:
00B8 .dbline 69
00B8 8DB1 in R24,0xd
00BA 8360 ori R24,3
00BC 8DB9 out 0xd,R24
00BE .dbline 70
00BE L11:
00BE .dbline -2
00BE L9:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -