📄 at45db041d.lst
字号:
394 2433 CLR R3
395 2C23 MOV R2,R3
396 2433 CLR R3
397 FC27 SBRC R2,7
398 9430 COM R3
399 2D0C MOV R16,R12
39A 0F00 LSL R16
39B 1F11 ROL R17
39C 2902 OR R16,R2
39D 2913 OR R17,R3
39E DD18 RCALL _SPI_Write_Byte
(0588) SPI_Write_Byte((unsigned char)BA);
39F 2D0A MOV R16,R10
3A0 DD16 RCALL _SPI_Write_Byte
(0589) //4 don’t care bytes
(0590) for(i=0;i<4;i++) SPI_Write_Byte(0xFF);
3A1 2744 CLR R20
3A2 C003 RJMP 0x03A6
3A3 EF0F LDI R16,0xFF
3A4 DD12 RCALL _SPI_Write_Byte
3A5 9543 INC R20
3A6 3044 CPI R20,4
3A7 F3D8 BCS 0x03A3
(0591)
(0592) for(i=0;i<DataLen;i++) rData[i] = SPI_Read_Byte(0xFF);//读取数据
3A8 2744 CLR R20
3A9 C00A RJMP 0x03B4
3AA EF0F LDI R16,0xFF
3AB DD23 RCALL _SPI_Read_Byte
3AC 2FE4 MOV R30,R20
3AD 27FF CLR R31
3AE 800E LDD R0,Y+6
3AF 801F LDD R1,Y+7
3B0 0DE0 ADD R30,R0
3B1 1DF1 ADC R31,R1
3B2 8300 STD Z+0,R16
3B3 9543 INC R20
3B4 2E24 MOV R2,R20
3B5 2433 CLR R3
3B6 8408 LDD R0,Y+8
3B7 8419 LDD R1,Y+9
3B8 1420 CP R2,R0
3B9 0431 CPC R3,R1
3BA F378 BCS 0x03AA
(0593)
(0594) Disable_DFLASH();
3BB DD20 RCALL _Disable_DFLASH
3BC 940C 0584 JMP pop_xgset303C
_DF_Chip_Erase:
Chip_Erase_Command --> Y,+0
i --> R20
3BE 934A ST R20,-Y
3BF 9724 SBIW R28,4
(0595) }
(0596) /************************************************************
(0597) *擦除FLASH全部内容
(0598) *not affect sectors that are protected or locked down
(0599) ************************************************************/
(0600) void DF_Chip_Erase(void)
(0601) {
(0602) unsigned char Chip_Erase_Command[4]={0xC7,0x94,0x80,0x9A};//整片擦除操作码
3C0 E880 LDI R24,0x80
3C1 E090 LDI R25,0
3C2 01FE MOVW R30,R28
3C3 E004 LDI R16,4
3C4 E010 LDI R17,0
3C5 93FA ST R31,-Y
3C6 93EA ST R30,-Y
3C7 939A ST R25,-Y
3C8 938A ST R24,-Y
3C9 940E 059E CALL asgncblk
(0603) unsigned char i;
(0604)
(0605) DF_Check_Busy_State();
3CB DD2D RCALL _DF_Check_Busy_State
(0606) Enable_DFLASH();
3CC DD07 RCALL _Enable_DFLASH
(0607)
(0608) for(i=0;i<4;i++)
3CD 2744 CLR R20
3CE C008 RJMP 0x03D7
(0609) {
(0610) SPI_Write_Byte(Chip_Erase_Command[i]);
3CF 01CE MOVW R24,R28
3D0 2FE4 MOV R30,R20
3D1 27FF CLR R31
3D2 0FE8 ADD R30,R24
3D3 1FF9 ADC R31,R25
3D4 8100 LDD R16,Z+0
3D5 DCE1 RCALL _SPI_Write_Byte
3D6 9543 INC R20
3D7 3044 CPI R20,4
3D8 F3B0 BCS 0x03CF
(0611) }
(0612)
(0613) Disable_DFLASH();
3D9 DD02 RCALL _Disable_DFLASH
3DA 9624 ADIW R28,4
3DB 9149 LD R20,Y+
3DC 9508 RET
(0614) }
(0615) /************************************************************
(0616) *DataFlash初始化(其实是初始化驱动FLASH用到的SPI)
(0617) ************************************************************/
(0618) void DataFlash_Init(void)
(0619) {
(0620) SPI_Init();
_DataFlash_Init:
3DD DCCF RCALL _SPI_Init
3DE 9508 RET
(0621) }
(0622) /************************************************************
(0623) *FLASH复位
(0624) ************************************************************/
(0625) void DF_Reset(void)
(0626) {
(0627) SPI_PORT&=~(1<<RESET); //使能复位
_DF_Reset:
3DF 98C3 CBI 0x18,3
(0628) DF_Delay(100);
3E0 E604 LDI R16,0x64
3E1 E010 LDI R17,0
3E2 DCAA RCALL _DF_Delay
(0629) SPI_PORT|=(1<<RESET); //禁止复位
3E3 9AC3 SBI 0x18,3
(0630) DF_Delay(100);
3E4 E604 LDI R16,0x64
3E5 E010 LDI R17,0
3E6 DCA6 RCALL _DF_Delay
3E7 9508 RET
_Test_Flash_Buffer_to_Buffer:
TestReadBuffer --> Y,+14
TestWriteBuffer --> Y,+4
i --> R20
3E8 934A ST R20,-Y
3E9 9768 SBIW R28,0x18
(0631) }
(0632) /************************************************************
(0633) *Test DataFlash
(0634) ************************************************************/
(0635) //Test_Flash_Buffer_to_Buffer
(0636) void Test_Flash_Buffer_to_Buffer(void)
(0637) {
(0638) unsigned char i;
(0639) unsigned char TestWriteBuffer[10]={1,2,3,4,5,6,7,8,9,10};
3EA E884 LDI R24,0x84
3EB E090 LDI R25,0
3EC 01FE MOVW R30,R28
3ED 9634 ADIW R30,4
3EE E00A LDI R16,0xA
3EF E010 LDI R17,0
3F0 93FA ST R31,-Y
3F1 93EA ST R30,-Y
3F2 939A ST R25,-Y
3F3 938A ST R24,-Y
3F4 940E 059E CALL asgncblk
(0640) unsigned char TestReadBuffer[10] ={0,0,0,0,0,0,0,0,0,0};
3F6 E88E LDI R24,0x8E
3F7 E090 LDI R25,0
3F8 01FE MOVW R30,R28
3F9 963E ADIW R30,0xE
3FA E00A LDI R16,0xA
3FB E010 LDI R17,0
3FC 93FA ST R31,-Y
3FD 93EA ST R30,-Y
3FE 939A ST R25,-Y
3FF 938A ST R24,-Y
400 940E 059E CALL asgncblk
(0641)
(0642) //写数据到Buffer中
(0643) DF_Write_to_Buffer(Buffer1,0,TestWriteBuffer,10);
402 E08A LDI R24,0xA
403 E090 LDI R25,0
404 839B STD Y+3,R25
405 838A STD Y+2,R24
406 01CE MOVW R24,R28
407 9604 ADIW R24,4
408 8399 STD Y+1,R25
409 8388 STD Y+0,R24
40A 2722 CLR R18
40B 2733 CLR R19
40C E001 LDI R16,1
40D DE7A RCALL _DF_Write_to_Buffer
(0644) //从Buffer中读取数据
(0645) DF_Read_from_Buffer(Buffer1,0,TestReadBuffer,10);
40E E08A LDI R24,0xA
40F E090 LDI R25,0
410 839B STD Y+3,R25
411 838A STD Y+2,R24
412 01CE MOVW R24,R28
413 960E ADIW R24,0xE
414 8399 STD Y+1,R25
415 8388 STD Y+0,R24
416 2722 CLR R18
417 2733 CLR R19
418 E001 LDI R16,1
419 DE97 RCALL _DF_Read_from_Buffer
(0646)
(0647) for(i=0;i<10;i++)//把要写入的和读出的数据写入EEPROM用于比较
41A 2744 CLR R20
41B C019 RJMP 0x0435
(0648) {
(0649) eeprom_write_byte((i+16*0),TestWriteBuffer[i]);
41C 01CE MOVW R24,R28
41D 9604 ADIW R24,4
41E 2FE4 MOV R30,R20
41F 27FF CLR R31
420 0FE8 ADD R30,R24
421 1FF9 ADC R31,R25
422 8120 LDD R18,Z+0
423 2F04 MOV R16,R20
424 2711 CLR R17
425 940E 055C CALL _eeprom_write_byte
(0650) eeprom_write_byte((i+16*1),TestReadBuffer[i]);
427 01CE MOVW R24,R28
428 960E ADIW R24,0xE
429 2FE4 MOV R30,R20
42A 27FF CLR R31
42B 0FE8 ADD R30,R24
42C 1FF9 ADC R31,R25
42D 8120 LDD R18,Z+0
42E 2F04 MOV R16,R20
42F 2711 CLR R17
430 5F00 SUBI R16,0xF0
431 4F1F SBCI R17,0xFF
432 940E 055C CALL _eeprom_write_byte
434 9543 INC R20
435 304A CPI R20,0xA
436 F328 BCS 0x041C
437 9668 ADIW R28,0x18
438 9149 LD R20,Y+
439 9508 RET
_Test_Flash_Page_to_Page:
TestReadBuffer --> Y,+16
TestWriteBuffer --> Y,+6
i --> R20
43A 934A ST R20,-Y
43B 976A SBIW R28,0x1A
(0651) }
(0652) }
(0653)
(0654) //Test_Flash_Page_to_Page
(0655) void Test_Flash_Page_to_Page(void)
(0656) {
(0657) unsigned char i;
(0658) unsigned char TestWriteBuffer[10]={10,9,8,7,6,5,4,3,2,1};
43C E988 LDI R24,0x98
43D E090 LDI R25,0
43E 01FE MOVW R30,R28
43F 9636 ADIW R30,6
440 E00A LDI R16,0xA
441 E010 LDI R17,0
442 93FA ST R31,-Y
443 93EA ST R30,-Y
444 939A ST R25,-Y
445 938A ST R24,-Y
446 940E 059E CALL asgncblk
(0659) unsigned char TestReadBuffer[10] ={0,0,0,0,0,0,0,0,0,0};
448 EA82 LDI R24,0xA2
449 E090 LDI R25,0
44A 01FE MOVW R30,R28
44B 9670 ADIW R30,0x10
44C E00A LDI R16,0xA
44D E010 LDI R17,0
44E 93FA ST R31,-Y
44F 93EA ST R30,-Y
450 939A ST R25,-Y
451 938A ST R24,-Y
452 940E 059E CALL asgncblk
(0660)
(0661) //将数据写到内存中(自动先写到BUFFER1 OR BURRER2中再将数据写到内存中)
(0662) Main_Memory_Page_Program_Through_Buffer(Buffer1,0,0,TestWriteBuffer,10);
454 E08A LDI R24,0xA
455 E090 LDI R25,0
456 839D STD Y+5,R25
457 838C STD Y+4,R24
458 01CE MOVW R24,R28
459 9606 ADIW R24,6
45A 839B STD Y+3,R25
45B 838A STD Y+2,R24
45C 2422 CLR R2
45D 8228 STD Y+0,R2
45E 2722 CLR R18
45F 2733 CLR R19
460 E001 LDI R16,1
461 DEB3 RCALL _Main_Memory_Page_Program_Through_Buffer
(0663) //从内存中读取数据到数组rData中(直接读取数据不经过BUFFER1 OR BURRER2)
(0664) DF_Main_Memory_Page_Read(0,0,TestReadBuffer,10);
462 E08A LDI R24,0xA
463 E090 LDI R25,0
464 839B STD Y+3,R25
465 838A STD Y+2,R24
466 01CE MOVW R24,R28
467 9640 ADIW R24,0x10
468 8399 STD Y+1,R25
469 8388 STD Y+0,R24
46A 2722 CLR R18
46B 2700 CLR R16
46C 2711 CLR R17
46D DEDE RCALL _DF_Main_Memory_Page_Read
(0665)
(0666) for(i=0;i<10;i++)//把要写入的和读出的数据写入EEPROM用于比较
46E 2744 CLR R20
46F C01B RJMP 0x048B
(0667) {
(0668) eeprom_write_byte((i+16*2),TestWriteBuffer[i]);
470 01CE MOVW R24,R28
471 9606 ADIW R24,6
472 2FE4 MOV R30,R20
473 27FF CLR R31
474 0FE8 ADD R30,R24
475 1FF9 ADC R31,R25
476 8120 LDD R18,Z+0
477 2F04 MOV R16,R20
478 2711 CLR R17
479 5E00 SUBI R16,0xE0
47A 4F1F SBCI R17,0xFF
47B 940E 055C CALL _eeprom_write_byte
(0669) eeprom_write_byte((i+16*3),TestReadBuffer[i]);
47D 01CE MOVW R24,R28
47E 9640 ADIW R24,0x10
47F 2FE4 MOV R30,R20
480 27FF CLR R31
481 0FE8 ADD R30,R24
482 1FF9 ADC R31,R25
483 8120 LDD R18,Z+0
484 2F04 MOV R16,R20
485 2711 CLR R17
486 5D00 SUBI R16,0xD0
487 4F1F SBCI R17,0xFF
488 940E 055C CALL _eeprom_write_byte
48A 9543 INC R20
48B 304A CPI R20,0xA
48C F318 BCS 0x0470
48D 966A ADIW R28,0x1A
48E 9149 LD R20,Y+
48F 9508 RET
_Test_Flash_Buffer_Page_to_Page:
TestReadBuffer --> Y,+14
TestWriteBuffer --> Y,+4
i --> R20
490 934A ST R20,-Y
491 9768 SBIW R28,0x18
(0670) }
(0671) }
(0672)
(0673) //Test_Flash_Buffer_Page_to_Page
(0674) void Test_Flash_Buffer_Page_to_Page(void)
(0675) {
(0676) unsigned char i;
(0677) unsigned char TestWriteBuffer[10]={1,2,3,4,5,6,7,8,9,10};
492 EA8C LDI R24,0xAC
493 E090 LDI R25,0
494 01FE MOVW R30,R28
495 9634 ADIW R30,4
496 E00A LDI R16,0xA
497 E010 LDI R17,0
498 93FA ST R31,-Y
499 93EA ST R30,-Y
49A 939A ST R25,-Y
49B 938A ST R24,-Y
49C 940E 059E CALL asgnc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -