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

📄 spi.lis

📁 sunplus spca514 cdmp3 源码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                         .module spi.c
                         .area data(ram, con, rel)
 0000                 _vfd_address::
 0000                   .blkb 1
                         .area idata
 0000 00                .byte 0
                         .area data(ram, con, rel)
 0001                   .dbfile D:\avrmcu\AT980\spi.c
 0001                   .dbsym s vfd_address _vfd_address c
 0001                 _spi_command::
 0001                   .blkb 1
                         .area idata
 0001 00                .byte 0
                         .area data(ram, con, rel)
 0002                   .dbfile D:\avrmcu\AT980\spi.c
 0002                   .dbsym s spi_command _spi_command c
                         .area text(rom, con, rel)
 0000                   .dbfile D:\avrmcu\AT980\spi.c
 0000                   .dbfunc s spi_init _spi_init fI
                         .even
 0000                 _spi_init::
 0000                   .dbline -1
 0000                   .dbline 18
                       ; //SPI initialisation
                       ; // clock rate: 2000000hz
                       ; #include "iom163.h"
                       ; #include <macros.h>
                       ; #define SPI_WAIT_COMMAND 0
                       ; #define SPI_WRITE_LOW    1
                       ; #define SPI_WRITE_HIGH   2
                       ; #define SPI_READ_LOW     3
                       ; #define SPI_READ_HIGH    4
                       ; #define SPI_ERR          5
                       ; unsigned char vfd_address=0;
                       ; unsigned char spi_command=0;
                       ; extern unsigned char g_vfd_grid_buffer[];
                       ; //unsigned char buffer[24];
                       ; extern unsigned int dvd_key;
                       ; void spi_err(void);
                       ; void spi_init(void)
                       ; {
 0000                   .dbline 19
                       ;  SPCR= 0x00; //diable spi
 0000 2224              clr R2
 0002 2DB8              out 0xd,R2
 0004                   .dbline 20
                       ;  SPSR= 0x00; //2X
 0004 2EB8              out 0xe,R2
 0006                   .dbline -2
 0006                   .dbline 22
                       ;  //SPCR= 0xEC; //setup SPI CPOL:1;CPHA:1;
                       ; }
 0006                 L1:
 0006                   .dbline 0 ; func end
 0006 0895              ret
                         .area vector(rom, abs)
                         .org 40
 0028 0C940400          jmp _spi_stc_isr
                         .area text(rom, con, rel)
 0008                   .dbfile D:\avrmcu\AT980\spi.c
 0008                   .dbfunc s spi_stc_isr _spi_stc_isr fI
                         .area func_lit(rom, con, rel)
 0000                 L17:
 0000 2700              .word `L8
 0002 5900              .word `L15
 0004 6A00              .word `L16
 0006 4300              .word `L13
 0008 4E00              .word `L14
                         .area text(rom, con, rel)
 0008                   .dbfile D:\avrmcu\AT980\spi.c
                       ;              i -> <dead>
                       ;       spi_data -> R20
                       ;     spi_status -> R22
                         .even
 0008                 _spi_stc_isr::
 0008 0E940000          xcall push_lset
 000C 0E940000          xcall push_gset2
 0010                   .dbline -1
 0010                   .dbline 26
                       ; 
                       ; #pragma interrupt_handler spi_stc_isr:11
                       ; void spi_stc_isr(void)
                       ; {
 0010                   .dbline 30
                       ;  //byte in SPDR has been sent/received
                       ;  register unsigned char spi_status,spi_data,i;
                       ;  //SPCR &=0x7f; //disable spi interrupt 
                       ;  spi_status = SPSR;
 0010 6EB1              in R22,0xe
 0012                   .dbline 31
                       ;  spi_data = SPDR;
 0012 4FB1              in R20,0xf
 0014                   .dbline 34
                       ;  //Set_FS2(0);
                       ;  //Set_FS1(1);
                       ;  if(spi_status&0x40)
 0014 66FF              sbrs R22,6
 0016 02C0              rjmp L3
 0018                   .dbline 35
                       ;  {
 0018                   .dbline 36
                       ;    spi_err();
 0018 6FD0              xcall _spi_err
 001A                   .dbline 37
                       ;    return;
 001A 69C0              xjmp L2
 001C                 L3:
 001C                   .dbline 38
                       ;  };
 001C                   .dbline 39
                       ;  switch(spi_command)
 001C 60910100          lds R22,_spi_command
 0020 7727              clr R23
 0022 6030              cpi R22,0
 0024 E0E0              ldi R30,0
 0026 7E07              cpc R23,R30
 0028 0CF4              brge X1
 002A 60C0              xjmp L5
 002C                 X1:
 002C 84E0              ldi R24,4
 002E 90E0              ldi R25,0
 0030 8617              cp R24,R22
 0032 9707              cpc R25,R23
 0034 0CF4              brge X2
 0036 5AC0              xjmp L5
 0038                 X2:
 0038 80E0              ldi R24,<L17
 003A 90E0              ldi R25,>L17
 003C FB01              movw R30,R22
 003E EE0F              lsl R30
 0040 FF1F              rol R31
 0042 E80F              add R30,R24
 0044 F91F              adc R31,R25
 0046 0590              lpm R0,Z+
 0048 1490              lpm R1,Z
 004A F001              movw R30,R0
 004C 0994              ijmp
 004E                 X0:
 004E                   .dbline 40
                       ;  {
 004E                 L8:
 004E                   .dbline 42
                       ;   case SPI_WAIT_COMMAND:
                       ;         if((spi_data&0xC3)==0x42)
 004E 842F              mov R24,R20
 0050 837C              andi R24,195
 0052 8234              cpi R24,66
 0054 51F4              brne L9
 0056                   .dbline 43
                       ;         {  //read key
 0056                   .dbline 44
                       ;           asm("SBI 0x17,6");
 0056 BE9A              SBI 0x17,6
 0058                   .dbline 45
                       ;           SPDR =(unsigned char)dvd_key;
 0058 30900100          lds R3,_dvd_key+1
 005C 20900000          lds R2,_dvd_key
 0060 2FB8              out 0xf,R2
 0062                   .dbline 46
                       ;           spi_command= SPI_READ_LOW;
 0062 83E0              ldi R24,3
 0064 80930100          sts _spi_command,R24
 0068                   .dbline 47
                       ;         }
 0068 42C0              xjmp L6
 006A                 L9:
 006A                   .dbline 48
                       ;         else if((spi_data&0xC0)==0xc0)
 006A 842F              mov R24,R20
 006C 807C              andi R24,192
 006E 803C              cpi R24,192
 0070 41F4              brne L11
 0072                   .dbline 49
                       ;         { //write
 0072                   .dbline 50
                       ;           vfd_address = spi_data&0x3f;
 0072 842F              mov R24,R20
 0074 8F73              andi R24,63
 0076 80930000          sts _vfd_address,R24
 007A                   .dbline 51
                       ;           spi_command = SPI_WRITE_LOW;
 007A 81E0              ldi R24,1
 007C 80930100          sts _spi_command,R24
 0080                   .dbline 52
                       ;         }
 0080 36C0              xjmp L6
 0082                 L11:
 0082                   .dbline 54
                       ;         else
                       ;           spi_err();
 0082 3AD0              xcall _spi_err
 0084                   .dbline 55
                       ;        break;

⌨️ 快捷键说明

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