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

📄 spi.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -