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

📄 flash.s

📁 spi的i/o茉莉程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module flash.c
	.area data(ram, con, rel)
_read_string::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.blkb 18
	.area idata
	.word 0,0,0,0,0
	.byte 0,0,0,0,0,0,0,0
	.area data(ram, con, rel)
	.dbfile E:\ICC\SPI\flash.c
	.dbsym e read_string _read_string A[19:19]c
	.area text(rom, con, rel)
	.dbfile E:\ICC\SPI\flash.c
	.dbfunc e Read_abyte _Read_abyte fc
;       address0 -> R20
;       address1 -> R22
;       address2 -> R10
;           data -> R12
;        address -> y+8
	.even
_Read_abyte::
	rcall push_arg4
	rcall push_gset4
	.dbline -1
	.dbline 13
; #include <iom8v.h>
; #include "mytype.h"
; #include "uart.h"
; #include "spi.h"
; 
; extern uint8 table[];
; uint8 read_string[19]={0};//
; 
; /***************************************************************************************
; 读取一个字节   
; *****************************************************************************************/
; uint8 Read_abyte(uint32 address)
; {
	.dbline 16
; uint8 data;
; uint8 address2,address1,address0;
; address2=(uint8)(address>>16);
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	movw R2,R4
	clr R4
	clr R5
	mov R10,R2
	.dbline 17
; address1=(uint8)(address>>8);
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	mov R22,R16
	.dbline 18
; address0=(uint8)address;
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	mov R20,R2
L2:
	.dbline 19
L3:
	.dbline 19
; while((Read_RDSR())&0x01);
	rcall _Read_RDSR
	sbrc R16,0
	rjmp L2
	.dbline 20
; CS_0;
	cbi 0x18,2
	.dbline 21
; Spi_MT(0x03);
	ldi R16,3
	rcall _Spi_MT
	.dbline 22
; Spi_MT(address2);
	mov R16,R10
	rcall _Spi_MT
	.dbline 23
; Spi_MT(address1);
	mov R16,R22
	rcall _Spi_MT
	.dbline 24
; Spi_MT(address0);
	mov R16,R20
	rcall _Spi_MT
	.dbline 25
; data=Spi_MR();
	rcall _Spi_MR
	mov R12,R16
	.dbline 26
; CS_1;
	sbi 0x18,2
	.dbline 27
; return data;
	.dbline -2
L1:
	rcall pop_gset4
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r address0 20 c
	.dbsym r address1 22 c
	.dbsym r address2 10 c
	.dbsym r data 12 c
	.dbsym l address 8 l
	.dbend
	.dbfunc e Write_abyte _Write_abyte fV
;       address0 -> R20
;       address1 -> R22
;       address2 -> R10
;     write_data -> R12
;        address -> y+8
	.even
_Write_abyte::
	rcall push_arg4
	rcall push_gset4
	ldd R12,y+12
	.dbline -1
	.dbline 34
; }
; 
; /***************************************************************************************
; 写入一个字节   
; *****************************************************************************************/
; void Write_abyte(uint32 address,uint8 write_data)
; {
	.dbline 36
; uint8 address2,address1,address0;
; address2=(uint8)(address>>16);
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	movw R2,R4
	clr R4
	clr R5
	mov R10,R2
	.dbline 37
; address1=(uint8)(address>>8);
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	mov R22,R16
	.dbline 38
; address0=(uint8)address;
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	mov R20,R2
L6:
	.dbline 39
L7:
	.dbline 39
; while((Read_RDSR())&0x01);
	rcall _Read_RDSR
	sbrc R16,0
	rjmp L6
	.dbline 40
; WriteEN();
	rcall _WriteEN
	.dbline 41
; CS_0;
	cbi 0x18,2
	.dbline 42
; Spi_MT(0x02);
	ldi R16,2
	rcall _Spi_MT
	.dbline 43
; Spi_MT(address2);
	mov R16,R10
	rcall _Spi_MT
	.dbline 44
; Spi_MT(address1);
	mov R16,R22
	rcall _Spi_MT
	.dbline 45
; Spi_MT(address0);
	mov R16,R20
	rcall _Spi_MT
	.dbline 46
; Spi_MT(write_data);
	mov R16,R12
	rcall _Spi_MT
	.dbline 47
; CS_1;
	sbi 0x18,2
	.dbline -2
L5:
	rcall pop_gset4
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r address0 20 c
	.dbsym r address1 22 c
	.dbsym r address2 10 c
	.dbsym r write_data 12 c
	.dbsym l address 8 l
	.dbend
	.dbfunc e WriteEN _WriteEN fV
	.even
_WriteEN::
	.dbline -1
	.dbline 53
; }
; /***************************************************************************************
; 写入写使能命令 
; *****************************************************************************************/
; void WriteEN(void)
; {
	.dbline 54
; CS_0;
	cbi 0x18,2
	.dbline 55
; Spi_MT(0x06);
	ldi R16,6
	rcall _Spi_MT
	.dbline 56
; CS_1;
	sbi 0x18,2
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WriteDisable _WriteDisable fV
	.even
_WriteDisable::
	.dbline -1
	.dbline 62
; }
; /***************************************************************************************
; 写入写禁止命令 
; *****************************************************************************************/
; void WriteDisable(void)
; {
	.dbline 63
; CS_0;
	cbi 0x18,2
	.dbline 64
; Spi_MT(0x04);
	ldi R16,4
	rcall _Spi_MT
	.dbline 65
; CS_1;
	sbi 0x18,2
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Sector_Erase _Sector_Erase fV
;       address0 -> R20
;       address1 -> R22
;       address2 -> R10
;        address -> y+6
	.even
_Sector_Erase::
	rcall push_arg4
	rcall push_gset3
	.dbline -1
	.dbline 71
; }
; /***************************************************************************************
; 写入段擦除使能命令 
; *****************************************************************************************/
; void Sector_Erase(uint32 address)
; {
	.dbline 73
; uint8 address2,address1,address0;
; address2=(uint8)(address>>16);
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	movw R2,R4
	clr R4
	clr R5
	mov R10,R2
	.dbline 74
; address1=(uint8)(address>>8);
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	mov R22,R16
	.dbline 75
; address0=(uint8)address;
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	mov R20,R2
L12:
	.dbline 76
L13:
	.dbline 76
; while((Read_RDSR())&0x01);
	rcall _Read_RDSR
	sbrc R16,0
	rjmp L12
	.dbline 77
; WriteEN();
	rcall _WriteEN
	.dbline 78
; CS_0;
	cbi 0x18,2
	.dbline 79
; Spi_MT(0xd8);
	ldi R16,216
	rcall _Spi_MT
	.dbline 80
; Spi_MT(address2);
	mov R16,R10
	rcall _Spi_MT
	.dbline 81
; Spi_MT(address1);
	mov R16,R22
	rcall _Spi_MT
	.dbline 82
; Spi_MT(address0);
	mov R16,R20
	rcall _Spi_MT
	.dbline 83
; CS_1;
	sbi 0x18,2
	.dbline 84
; Prints("Erase sector ",0);
	clr R18
	clr R19
	ldi R16,<L15
	ldi R17,>L15
	rcall _Prints
	.dbline 85
; Send_abyte(table[address2/10]);
	ldi R18,10
	ldi R19,0
	mov R16,R10
	clr R17
	rcall div16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	clr R17
	rcall _Send_abyte
	.dbline 86
; Send_abyte(table[address2%10]);
	ldi R18,10
	ldi R19,0
	mov R16,R10
	clr R17
	rcall mod16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	clr R17
	rcall _Send_abyte
	.dbline 87
; Prints(" completed...",1);
	ldi R18,1
	ldi R19,0
	ldi R16,<L16
	ldi R17,>L16
	rcall _Prints
	.dbline -2
L11:
	rcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r address0 20 c
	.dbsym r address1 22 c
	.dbsym r address2 10 c
	.dbsym l address 6 l
	.dbend
	.dbfunc e Bulk_Erase _Bulk_Erase fV
	.even
_Bulk_Erase::
	.dbline -1
	.dbline 94
; }
; 
; /***************************************************************************************
; 写入片擦除使能命令 
; *****************************************************************************************/
; void Bulk_Erase(void)
; {
	.dbline 95
; WriteEN();
	rcall _WriteEN
L18:
	.dbline 96
L19:
	.dbline 96
; while((Read_RDSR())&0x01);
	rcall _Read_RDSR
	sbrc R16,0
	rjmp L18
	.dbline 97
; CS_0;
	cbi 0x18,2
	.dbline 98
; Spi_MT(0xc7);
	ldi R16,199
	rcall _Spi_MT
	.dbline 99
; CS_1;
	sbi 0x18,2
	.dbline 100
; Prints("Bulk Erawe completed...",1);
	ldi R18,1
	ldi R19,0
	ldi R16,<L21
	ldi R17,>L21
	rcall _Prints
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DelayX100ms _DelayX100ms fV
;              i -> y+0
;              x -> y+12
	.even
_DelayX100ms::
	rcall push_arg4
	rcall push_gset2
	sbiw R28,8
	.dbline -1
	.dbline 107
; }
; 
; /***************************************************************************************
;  延时X/100ms
; *****************************************************************************************/
; void DelayX100ms(uint32 x)
; {
	rjmp L24
L23:
	.dbline 110
;  uint32 i;
;  while(x--)
;   {
	.dbline 111
;    i=1295;
	ldi R20,15
	ldi R21,5
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
L26:
	.dbline 112
L27:
	.dbline 112
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+4,R2
	std z+5,R3
	std z+6,R4
	std z+7,R5
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq X0
	rjmp L26
X0:
	.dbline 113
L24:
	.dbline 109
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	movw R30,R28
	std z+4,R2

⌨️ 快捷键说明

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