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

📄 at45db161d.s

📁 使用atmel128对45db161读写程序加LM2009R大液晶显示
💻 S
📖 第 1 页 / 共 2 页
字号:
	adc R31,R11
	ldd R16,z+0
	ldd R17,z+1
	xcall _spi_write
L24:
	.dbline 158
	subi R20,255  ; offset = 1
	sbci R21,255
L26:
	.dbline 158
	cp R20,R22
	cpc R21,R23
	brlo L23
	.dbline 161
; 		spi_write(data[i]);  //写数据
; 		                 
; 	UNSELECT_CHIP;
	sbi 0x18,4
	.dbline 161
	.dbline -2
L22:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r size 22 i
	.dbsym r data 10 pi
	.dbsym r addr 20 i
	.dbend
	.dbfunc e write_page_from_buffer _write_page_from_buffer fV
;         buffer -> R22,R23
;           page -> R20,R21
	.even
_write_page_from_buffer::
	xcall push_gset2
	movw R22,R18
	movw R20,R16
	.dbline -1
	.dbline 166
; }
; //========================================================================
; //将写缓冲区内容写入到主存储器中指定页
; void write_page_from_buffer(uint page,uint buffer)
; {
	.dbline 167
; 	SELECT_CHIP;
	in R24,0x18
	andi R24,239
	out 0x18,R24
	.dbline 167
	.dbline 169
; 	
; 	if(buffer == DF_WRITE_BUFFER) 
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	brne L28
	.dbline 170
; 		spi_write(B2_TO_MM_PAGE_PROG_WITH_ERASE);  //0x86 
	ldi R16,134
	ldi R17,0
	xcall _spi_write
	xjmp L29
L28:
	.dbline 172
; 	else
; 		spi_write(B1_TO_MM_PAGE_PROG_WITH_ERASE);  //0x83
	ldi R16,131
	ldi R17,0
	xcall _spi_write
L29:
	.dbline 173
; 	spi_write((uint)(page>>6));  //2个无关位,12位页地址 PA11~PA0 与10个无关位
	ldi R18,6
	ldi R19,0
	movw R16,R20
	xcall lsr16
	xcall _spi_write
	.dbline 174
; 	spi_write((uint)(page<<2));
	movw R16,R20
	lsl R16
	rol R17
	lsl R16
	rol R17
	xcall _spi_write
	.dbline 175
; 	spi_write(0x00);  // don't cares
	clr R16
	clr R17
	xcall _spi_write
	.dbline 177
; 	
; 	UNSELECT_CHIP;
	sbi 0x18,4
	.dbline 177
	.dbline 179
; 	
; 	df_wait_busy();
	xcall _df_wait_busy
	.dbline -2
L27:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r buffer 22 i
	.dbsym r page 20 i
	.dbend
	.dbfunc e df_write_close _df_write_close fV
	.even
_df_write_close::
	.dbline -1
	.dbline 183
; }
; //========================================================================
; void df_write_close(void)
; {
	.dbline 184
; 	write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER); //缓冲区内容写入到主存储器
	ldi R18,1
	ldi R19,0
	lds R16,_g_CurWritePage
	lds R17,_g_CurWritePage+1
	xcall _write_page_from_buffer
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e df_read_close _df_read_close fV
	.even
_df_read_close::
	.dbline -1
	.dbline 188
; }
; //========================================================================
; void df_read_close(void)
; {
	.dbline 189
; 	;//此处不做任何处理
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e df_read _df_read fV
;           temp -> R10,R11
;           size -> R20,R21
;            buf -> R22,R23
	.even
_df_read::
	xcall push_gset3
	movw R20,R18
	movw R22,R16
	sbiw R28,2
	.dbline -1
	.dbline 193
; }
; //========================================================================
; void df_read(uint *buf,uint size)
; {
	.dbline 196
; 	uint temp;
; 	
; 	if((g_CurReadByte + size) > DF_PAGE_SIZE) //如果当前页未读取数据不够size字节
	lds R2,_g_CurReadByte
	lds R3,_g_CurReadByte+1
	add R2,R20
	adc R3,R21
	ldi R24,528
	ldi R25,2
	cp R24,R2
	cpc R25,R3
	brsh L33
	.dbline 197
; 	{
	.dbline 199
; 		//读当前页剩余数据
; 		temp=DF_PAGE_SIZE - g_CurReadByte;
	lds R2,_g_CurReadByte
	lds R3,_g_CurReadByte+1
	movw R10,R24
	sub R10,R2
	sbc R11,R3
	.dbline 200
; 		read_buffer(g_CurReadByte,buf,temp);
	std y+1,R11
	std y+0,R10
	movw R18,R22
	movw R16,R2
	xcall _read_buffer
	.dbline 203
; 		
; 		//装入下一页
; 		load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
	clr R18
	clr R19
	lds R24,_g_CurReadPage
	lds R25,_g_CurReadPage+1
	adiw R24,1
	sts _g_CurReadPage+1,R25
	sts _g_CurReadPage,R24
	movw R16,R24
	xcall _load_page_to_buffer
	.dbline 206
; 		
; 		//从下一页读剩余数据
; 		g_CurReadByte=size-temp;
	movw R2,R20
	sub R2,R10
	sbc R3,R11
	sts _g_CurReadByte+1,R3
	sts _g_CurReadByte,R2
	.dbline 207
; 		read_buffer(0,buf+temp,g_CurReadByte);
	std y+1,R3
	std y+0,R2
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R18,R16
	add R18,R22
	adc R19,R23
	clr R16
	clr R17
	xcall _read_buffer
	.dbline 208
; 	}
	xjmp L34
L33:
	.dbline 210
; 	else			//如果当前页数据有size字节
; 	{
	.dbline 211
; 		read_buffer(g_CurReadByte,buf,size);
	std y+1,R21
	std y+0,R20
	movw R18,R22
	lds R16,_g_CurReadByte
	lds R17,_g_CurReadByte+1
	xcall _read_buffer
	.dbline 212
; 		g_CurReadByte+=size;
	lds R2,_g_CurReadByte
	lds R3,_g_CurReadByte+1
	add R2,R20
	adc R3,R21
	sts _g_CurReadByte+1,R3
	sts _g_CurReadByte,R2
	.dbline 215
; 		
; 		//如果当前页数据已全部读完
; 		if(g_CurReadByte==DF_PAGE_SIZE)
	movw R24,R2
	cpi R24,16
	ldi R30,2
	cpc R25,R30
	brne L35
	.dbline 216
; 		{
	.dbline 217
; 			load_page_to_buffer(++g_CurReadPage,DF_READ_BUFFER);
	clr R18
	clr R19
	lds R24,_g_CurReadPage
	lds R25,_g_CurReadPage+1
	adiw R24,1
	sts _g_CurReadPage+1,R25
	sts _g_CurReadPage,R24
	movw R16,R24
	xcall _load_page_to_buffer
	.dbline 218
; 			g_CurReadByte=0;			
	clr R2
	clr R3
	sts _g_CurReadByte+1,R3
	sts _g_CurReadByte,R2
	.dbline 219
; 		}
L35:
	.dbline 220
L34:
	.dbline -2
L32:
	adiw R28,2
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp 10 i
	.dbsym r size 20 i
	.dbsym r buf 22 pi
	.dbend
	.dbfunc e read_buffer _read_buffer fV
;              i -> R20,R21
;           size -> R22,R23
;           data -> R10,R11
;           addr -> R20,R21
	.even
_read_buffer::
	xcall push_gset3
	movw R10,R18
	movw R20,R16
	ldd R22,y+6
	ldd R23,y+7
	.dbline -1
	.dbline 225
; 	} 
; }
; //========================================================================
; //从读缓冲区读数据
; void read_buffer(uint addr,uint *data,uint size)
; {
	.dbline 228
; 	uint i;
; 	
; 	SELECT_CHIP;
	in R24,0x18
	andi R24,239
	out 0x18,R24
	.dbline 228
	.dbline 230
; 	
; 	spi_write(BUFFER_1_READ);
	ldi R16,209
	ldi R17,0
	xcall _spi_write
	.dbline 231
; 	spi_write(0x00);                        
	clr R16
	clr R17
	xcall _spi_write
	.dbline 232
; 	spi_write((uint)(addr>>8));
	movw R16,R20
	mov R16,R17
	clr R17
	xcall _spi_write
	.dbline 233
; 	spi_write((uint)addr); 
	movw R16,R20
	xcall _spi_write
	.dbline 234
; 	for(i=0;i<size;i++)      
	clr R20
	clr R21
	xjmp L41
L38:
	.dbline 235
	clr R16
	clr R17
	xcall _spi_write
	movw R2,R16
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	add R30,R10
	adc R31,R11
	std z+1,R3
	std z+0,R2
L39:
	.dbline 234
	subi R20,255  ; offset = 1
	sbci R21,255
L41:
	.dbline 234
	cp R20,R22
	cpc R21,R23
	brlo L38
	.dbline 237
; 		data[i]=spi_write(0);
; 		                 
; 	UNSELECT_CHIP;	
	sbi 0x18,4
	.dbline 237
	.dbline -2
L37:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r size 22 i
	.dbsym r data 10 pi
	.dbsym r addr 20 i
	.dbend
	.dbfunc e Read_Page _Read_Page fV
;           size -> y+8
;            buf -> y+6
;   page_address -> R20,R21
;           page -> R22,R23
	.even
_Read_Page::
	xcall push_gset2
	movw R20,R18
	movw R22,R16
	sbiw R28,2
	.dbline -1
	.dbline 241
; }
; //========================================================================
; void Read_Page(uint page,uint page_address, uint *buf,uint size) //page 页地址, page_address 页内地址, buf 数据 , size 多少个字节
; {
	.dbline 242
;     load_page_to_buffer(page,DF_READ_BUFFER); // 将主存储器指定的页内容读到缓冲区
	clr R18
	clr R19
	movw R16,R22
	xcall _load_page_to_buffer
	.dbline 243
;     read_buffer(page_address,buf,size);       //从读缓冲区读数据
	ldd R0,y+8
	ldd R1,y+9
	std y+1,R1
	std y+0,R0
	ldd R18,y+6
	ldd R19,y+7
	movw R16,R20
	xcall _read_buffer
	.dbline -2
L42:
	adiw R28,2
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l size 8 i
	.dbsym l buf 6 pi
	.dbsym r page_address 20 i
	.dbsym r page 22 i
	.dbend
	.dbfunc e Write_page _Write_page fV
;           size -> y+8
;            buf -> y+6
;   page_address -> R22,R23
;           page -> R20,R21
	.even
_Write_page::
	xcall push_gset2
	movw R22,R18
	movw R20,R16
	sbiw R28,2
	.dbline -1
	.dbline 247
; }
; //========================================================================
; void Write_page(uint page, uint page_address, uint *buf,uint size)  //page 页地址, page_address 页内地址, buf 数据 , size 多少个字节
; { 
	.dbline 248
;     load_page_to_buffer(page,DF_WRITE_BUFFER);	// 将主存储器指定的页内容读到缓冲区
	ldi R18,1
	ldi R19,0
	movw R16,R20
	xcall _load_page_to_buffer
	.dbline 249
;     write_buffer(page_address,buf,size);        //将数据写入写缓冲区
	ldd R0,y+8
	ldd R1,y+9
	std y+1,R1
	std y+0,R0
	ldd R18,y+6
	ldd R19,y+7
	movw R16,R22
	xcall _write_buffer
	.dbline 250
;     write_page_from_buffer(page,DF_WRITE_BUFFER); //将缓冲区内容写入到主存储器中指定页中
	ldi R18,1
	ldi R19,0
	movw R16,R20
	xcall _write_page_from_buffer
	.dbline -2
L43:
	adiw R28,2
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l size 8 i
	.dbsym l buf 6 pi
	.dbsym r page_address 22 i
	.dbsym r page 20 i
	.dbend
	.dbfunc e Page_Scrape _Page_Scrape fV
;           page -> R20,R21
	.even
_Page_Scrape::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 254
; }
; //========================================================================
; void Page_Scrape(uint page)  //page 要擦除的页
; {
	.dbline 255
;   SELECT_CHIP;
	in R24,0x18
	andi R24,239
	out 0x18,R24
	.dbline 255
	.dbline 256
; 	spi_write(0x81);  //页擦除
	ldi R16,129
	ldi R17,0
	xcall _spi_write
	.dbline 257
; 	spi_write((uint)(page>>6));  //2个无关位,12位页地址 PA11~PA0 与10个无关位
	ldi R18,6
	ldi R19,0
	movw R16,R20
	xcall lsr16
	xcall _spi_write
	.dbline 258
; 	spi_write((uint)(page<<2));
	movw R16,R20
	lsl R16
	rol R17
	lsl R16
	rol R17
	xcall _spi_write
	.dbline 259
; 	spi_write(0x00);  // don't cares
	clr R16
	clr R17
	xcall _spi_write
	.dbline 261
; 	
; 	UNSELECT_CHIP;
	sbi 0x18,4
	.dbline 261
	.dbline 263
; 	
; 	df_wait_busy();
	xcall _df_wait_busy
	.dbline -2
L44:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r page 20 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\ICC128\2008控制台\2008console0TEST\flashTest\at45db161d.c
_g_CurWriteByte::
	.blkb 2
	.dbsym e g_CurWriteByte _g_CurWriteByte i
_g_CurWritePage::
	.blkb 2
	.dbsym e g_CurWritePage _g_CurWritePage i
_g_CurReadByte::
	.blkb 2
	.dbsym e g_CurReadByte _g_CurReadByte i
_g_CurReadPage::
	.blkb 2
	.dbsym e g_CurReadPage _g_CurReadPage i

⌨️ 快捷键说明

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