📄 ch375.lst
字号:
515 0168 5F92 push r17
516 016a 6F92 push r28
517 016c 7F92 push r29
518 016e 8F92 in r28,__SP_L__
519 0170 9F92 in r29,__SP_H__
520 0172 AF92 sbiw r28,7
521 0174 BF92 in __tmp_reg__,__SREG__
522 0176 CF92 cli
523 0178 DF92 out __SP_H__,r29
524 017a EF92 out __SREG__,__tmp_reg__
525 017c FF92 out __SP_L__,r28
526 017e 0F93 /* prologue end (size=26) */
527 0180 1F93 movw r12,r22
528 0182 CF93 movw r14,r24
529 0184 DF93 movw r10,r20
531 0188 DEB7 .LM59:
532 018a 2797 clr r27
533 018c 0FB6 mov r26,r25
534 018e F894 mov r25,r24
535 0190 DEBF mov r24,r23
536 0192 0FBE std Y+2,r24
537 0194 CDBF std Y+3,r25
538 std Y+4,r26
539 0196 6B01 std Y+5,r27
541 019a 5A01 .LM60:
158:CH375\CH375.c **** uint8 cnt; //数据需分8次读
159:CH375\CH375.c **** uint8 temp; //单次数据长度
160:CH375\CH375.c **** retry:
161:CH375\CH375.c **** CH375_CS_L;
162:CH375\CH375.c **** CH375_WriteCMD(DISK_READ); //发读命令
163:CH375\CH375.c **** CH375_WriteDAT(LBA); //填充目的地址
164:CH375\CH375.c **** CH375_WriteDAT(LBA>>8);
542 bn 68,0,166,.LM61-.LFBB8
543 .LM61:
544 019c BB27 mov r6,r15
545 019e A92F clr r7
546 01a0 982F clr r8
547 01a2 872F clr r9
548 01a4 8A83 .L41:
550 01a8 AC83 .LM62:
551 01aa BD83 lds r24,101
165:CH375\CH375.c **** CH375_WriteDAT(LBA>>16);
552 lo8(-5)
553 sts 101,r24
555 01ae 4424 .LM63:
556 01b0 5524 ldi r24,lo8(84)
166:CH375\CH375.c **** CH375_WriteDAT(LBA>>24);
557 CH375_WriteCMD
559 01b2 6F2C .LM64:
560 01b4 7724 mov r24,r12
561 01b6 8824 call CH375_WriteDAT
563 .LM65:
564 ldd r24,Y+2
565 call CH375_WriteDAT
567 01be 8B7F .LM66:
568 01c0 8093 6500 mov r24,r2
569 call CH375_WriteDAT
571 01c4 84E5 .LM67:
572 01c6 0E94 0000 mov r24,r6
573 call CH375_WriteDAT
575 01ca 8C2D .LM68:
576 01cc 0E94 0000 ldi r24,lo8(1)
577 call CH375_WriteCMD
578 ldi r25,lo8(8)
579 01d0 8A81 std Y+1,r25
580 01d2 0E94 0000 rjmp .L42
581 .L43:
583 01d6 822D .LM69:
584 01d8 0E94 0000 call CH375_WaitInterrupt_NEW
585 cpi r24,lo8(29)
586 brne .L44
588 01de 0E94 0000 .LM70:
167:CH375\CH375.c **** CH375_WriteCMD(1);
589 teCMD
591 01e2 81E0 .LM71:
592 01e4 0E94 0000 call CH375_ReadDAT
593 01e8 98E0 mov r16,r24
594 01ea 9983 std Y+7,r11
595 01ec 00C0 std Y+6,r10
596 mov r17,r24
168:CH375\CH375.c **** cnt = 8; //读一个扇区
169:CH375\CH375.c **** while(cnt--)
170:CH375\CH375.c **** {
171:CH375\CH375.c **** if(CH375_WaitInterrupt_NEW() != USB_INT_DISK_READ)break; //等待就绪 出错跳出
597 46
598 .L47:
600 01f2 8D31 .LM72:
601 01f4 01F4 call CH375_ReadDAT
172:CH375\CH375.c **** CH375_WriteCMD(RD_USB_DATA); //发读数据命令
602 r26,Y+6
603 ldd r27,Y+7
604 01f6 88E2 st X+,r24
605 01f8 0E94 0000 std Y+7,r27
173:CH375\CH375.c **** temp = CH375_ReadDAT(); //读数据长度
606 Y+6,r26
607 .L46:
608 01fc 0E94 0000 subi r17,1
609 0200 082F brcc .L47
610 0202 BF82 add r10,r16
611 0204 AE82 adc r11,__zero_reg__
613 0208 00C0 .LM73:
614 ldi r24,lo8(85)
174:CH375\CH375.c **** while(temp--)*buffer++ = CH375_ReadDAT(); //依次读出数据
615 75_WriteCMD
616 .L42:
618 020e AE81 .LM74:
619 0210 BF81 ldd r27,Y+1
620 0212 8D93 subi r27,lo8(-(-1))
621 0214 BF83 std Y+1,r27
622 0216 AE83 cpi r27,lo8(-1)
623 brne .L43
625 021a 00F4 .LM75:
626 021c A00E call CH375_WaitInterrupt_NEW
627 021e B11C cpi r24,lo8(20)
175:CH375\CH375.c **** CH375_WriteCMD(DISK_RD_GO); //发继续命令
628 ds r24,101
629 ori r24,lo8(4)
630 0220 85E5 sts 101,r24
631 0222 0E94 0000 ldi r24,lo8(1)
632 ldi r25,hi8(1)
633 rjmp .L52
634 .L50:
636 0228 B150 .LM76:
637 022a B983 lds r24,101
638 022c BF3F ori r24,lo8(4)
639 022e 01F4 sts 101,r24
176:CH375\CH375.c **** }
177:CH375\CH375.c **** if(cnt != 0xff)//当所接设备出错时重新复位处理
178:CH375\CH375.c **** {
179:CH375\CH375.c **** CH375_CS_H;
180:CH375\CH375.c **** CH375_IniDisk();//复位
181:CH375\CH375.c **** goto retry;
182:CH375\CH375.c **** }
183:CH375\CH375.c **** if(CH375_WaitInterrupt_NEW() != USB_INT_SUCCESS){CH375_CS_H;return 1;}//如果出错则返回1
640 (0)
641 ldi r25,hi8(0)
642 0230 0E94 0000 rjmp .L52
643 0234 8431 .L44:
645 0238 8091 6500 .LM77:
646 023c 8460 lds r24,101
647 023e 8093 6500 ori r24,lo8(4)
648 0242 81E0 sts 101,r24
650 0246 00C0 .LM78:
651 call CH375_IniDisk
184:CH375\CH375.c **** CH375_CS_H;
652 L52:
653 /* epilogue: frame size=7 */
654 0248 8091 6500 adiw r28,7
655 024c 8460 in __tmp_reg__,__SREG__
656 024e 8093 6500 cli
657 0252 80E0 out __SP_H__,r29
658 0254 90E0 out __SREG__,__tmp_reg__
659 0256 00C0 out __SP_L__,r28
660 pop r29
661 pop r28
662 pop r17
663 0258 8091 6500 pop r16
664 025c 8460 pop r15
665 025e 8093 6500 pop r14
666 pop r13
667 pop r12
668 0262 0E94 0000 pop r11
669 0266 00C0 pop r10
670 pop r9
671 pop r8
672 0268 2796 pop r7
673 026a 0FB6 pop r6
674 026c F894 pop r5
675 026e DEBF pop r4
676 0270 0FBE pop r3
677 0272 CDBF pop r2
678 0274 DF91 ret
679 0276 CF91 /* epilogue end (size=25) */
680 0278 1F91 /* function CH375_ReadOneSector size 157 (106) */
686 0284 BF90 .Lscope8:
690 028c 7F90 .global CH375_WriteOneSector
692 0290 5F90 CH375_WriteOneSector:
694 0294 3F90 .LM79:
695 0296 2F90 .LFBB9:
696 0298 0895 /* prologue: frame size=0 */
697 push r12
698 push r13
699 push r14
700 push r15
701 push r16
702 push r17
703 push r28
704 push r29
705 /* prologue end (size=8) */
706 movw r14,r22
707 movw r16,r24
708 movw r12,r20
710 .LM80:
185:CH375\CH375.c **** return 0; //正常返回0
186:CH375\CH375.c **** }
187:CH375\CH375.c ****
188:CH375\CH375.c **** //CH375写一个扇区
189:CH375\CH375.c **** uint8 CH375_WriteOneSector(uint32 LBA,uint8 *buffer)
190:CH375\CH375.c **** {
711 4,.LM81-.LFBB9
712 .LM81:
713 ldi r24,lo8(86)
714 call CH375_WriteCMD
716 029c DF92 .LM82:
717 029e EF92 mov r24,r14
718 02a0 FF92 call CH375_WriteDAT
720 02a4 1F93 .LM83:
721 02a6 CF93 clr r27
722 02a8 DF93 mov r26,r17
723 mov r25,r16
724 02aa 7B01 mov r24,r15
725 02ac 8C01 call CH375_WriteDAT
191:CH375\CH375.c **** uint8 cnt = 8; //数据需分8次送出
192:CH375\CH375.c **** uint8 temp = 64; //每次64字节
193:CH375\CH375.c **** CH375_CS_L;
727 ,r16
728 clr r26
729 02b0 8091 6500 clr r27
730 02b4 8B7F call CH375_WriteDAT
194:CH375\CH375.c **** CH375_WriteCMD(DISK_WRITE); //发写命令
732 :
733 mov r14,r17
734 02ba 86E5 clr r15
735 02bc 0E94 0000 clr r16
195:CH375\CH375.c **** CH375_WriteDAT(LBA); //填充目的地址
736 r17
737 mov r24,r14
738 02c0 8E2D call CH375_WriteDAT
196:CH375\CH375.c **** CH375_WriteDAT(LBA>>8);
740 6:
741 ldi r24,lo8(1)
742 02c6 BB27 call CH375_WriteCMD
743 02c8 A12F ldi r19,lo8(8)
744 02ca 902F mov r14,r19
745 02cc 8F2D ldi r16,lo8(64)
746 02ce 0E94 0000 rjmp .L55
197:CH375\CH375.c **** CH375_WriteDAT(LBA>>16);
748 .LM87:
749 02d2 C801 call CH375_WaitInterrupt
750 02d4 AA27 cpi r24,lo8(30)
751 02d6 BB27 brne .L57
198:CH375\CH375.c **** CH375_WriteDAT(LBA>>24);
753
754 ldi r24,lo8(43)
755 02dc E12E call CH375_WriteCMD
757 02e0 0027 .LM89:
758 02e2 1127 ldi r24,lo8(64)
759 02e4 8E2D call CH375_WriteDAT
760 02e6 0E94 0000 movw r28,r12
199:CH375\CH375.c **** CH375_WriteCMD(1); //写一个扇区
761 7,r16
762 rjmp .L59
763 02ea 81E0 .L60:
765 02f0 38E0 .LM90:
766 02f2 E32E ld r24,Y+
767 02f4 00E4 call CH375_WriteDAT
768 02f6 00C0 .L59:
769 subi r17,1
200:CH375\CH375.c **** while(cnt--)
201:CH375\CH375.c **** {
202:CH375\CH375.c **** if(CH375_WaitInterrupt() != USB_INT_DISK_WRITE)break; //等待就绪 出错则跳出
770 0
771 add r12,r16
772 02f8 0E94 0000 adc r13,__zero_reg__
774 02fe 01F4 .LM91:
203:CH375\CH375.c **** CH375_WriteCMD(WR_USB_DATA7); //发写数据命令
775 r24,lo8(87)
776 call CH375_WriteCMD
777 0300 8BE2 ldi r16,lo8(-1)
778 0302 0E94 0000 .L55:
204:CH375\CH375.c **** CH375_WriteDAT(64); //设定数据长度
779 abn 68,0,200,.LM92-.LFBB9
780 .LM92:
781 0306 80E4 dec r14
782 0308 0E94 0000 ldi r24,lo8(-1)
783 030c E601 cp r14,r24
784 030e 102F brne .L56
786 .LM93:
205:CH375\CH375.c **** while(temp--)CH375_WriteDAT(*buffer++); //依次送出数据
787 375_WaitInterrupt
788 cpi r24,lo8(20)
789 0312 8991 breq .L63
790 0314 0E94 0000 .L57:
791 lds r24,101
792 0318 1150 ori r24,lo8(4)
793 031a 00F4 sts 101,r24
794 031c C00E ldi r24,lo8(1)
795 031e D11C ldi r25,hi8(1)
206:CH375\CH375.c **** CH375_WriteCMD(DISK_WR_GO); //发继续写命令
796 4
797 .L63:
799 0322 0E94 0000 .LM94:
800 0326 0FEF lds r24,101
801 ori r24,lo8(4)
802 sts 101,r24
803 ldi r24,lo8(0)
804 0328 EA94 ldi r25,hi8(0)
805 032a 8FEF .L64:
806 032c E816 /* epilogue: frame size=0 */
807 032e 01F4 pop r29
207:CH375\CH375.c **** }
208:CH375\CH375.c **** if(cnt != 0xff || CH375_WaitInterrupt() != USB_INT_SUCCESS){CH375_CS_H;return 1;}//出错则退出
808 p r17
809 pop r16
810 0330 0E94 0000 pop r15
811 0334 8431 pop r14
812 0336 01F0 pop r13
813 pop r12
814 0338 8091 6500 ret
815 033c 8460 /* epilogue end (size=9) */
816 033e 8093 6500 /* function CH375_WriteOneSector size 104 (87) */
209:CH375\CH375.c **** CH375_CS_H;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -