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