📄 df.lst
字号:
668 1 }
669
670
671 /*F**************************************************************************
672 * NAME: df_write_sector
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 12
673 *----------------------------------------------------------------------------
674 * PARAMS:
675 * global: gl_ptr_mem
676 *
677 * return:
678 * write status: OK: write done
679 * KO: write not done
680 *----------------------------------------------------------------------------
681 * PURPOSE:
682 * This function is an optimized function that writes 512 bytes from USB
683 * controller to DataFlash memory
684 *----------------------------------------------------------------------------
685 * EXAMPLE:
686 *----------------------------------------------------------------------------
687 * NOTE:
688 * - First call must be preceded by a call to df_write_open function
689 * - As 512 is always a sub-multiple of page size, there is no need to check
690 * page end for each bytes.
691 *----------------------------------------------------------------------------
692 * REQUIREMENTS:
693 *****************************************************************************/
694 bit df_write_sector (void)
695 {
696 1 Byte i;
697 1
698 1 if (df_mem_busy)
699 1 {
700 2 df_mem_busy = FALSE; /* memory is ready */
701 2 df_busy(); /* wait end of programming */
702 2 #if DF_PAGE_SIZE > 512
703 2 /* load page in internal buffer */
704 2 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
705 2 {
706 3 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
707 3 DF_CS0 = 0;
708 3 else
709 3 DF_CS1 = 0;
710 3 }
711 2 else
712 2 {
713 3 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
714 3 DF_CS2 = 0;
715 3 else
716 3 DF_CS3 = 0;
717 3 }
718 2 Spi_write_data(DF_TF_BUF_1); /* main to buffer 1 transfer */
719 2 Spi_ack_write();
720 2 Spi_write_data((((Byte*)&gl_ptr_mem)[1] << DF_SHFT_B1) | (((Byte*)&gl_ptr_mem)[2] >> DF_SHFT_B2));
721 2 Spi_ack_write();
722 2 Spi_write_data(((Byte*)&gl_ptr_mem)[2] << DF_SHFT_B1);
723 2 Spi_ack_write();
724 2 Spi_write_data(0xFF); /* dummy byte */
725 2 Spi_ack_write();
726 2 DF_CS |= DF_DESEL_ALL; /* deselect memory */
727 2
728 2 df_busy(); /* wait end of page transfer */
729 2 #endif
730 2 /* select right memory */
731 2 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
732 2 {
733 3 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
734 3 DF_CS0 = 0;
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 13
735 3 else
736 3 DF_CS1 = 0;
737 3 }
738 2 else
739 2 {
740 3 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
741 3 DF_CS2 = 0;
742 3 else
743 3 DF_CS3 = 0;
744 3 }
745 2 /* prepare the memory in write mode */
746 2 Spi_write_data(DF_PG_BUF_1); /* main program through buffer 1 */
747 2 Spi_ack_write();
748 2 Spi_write_data((((Byte*)&gl_ptr_mem)[1] << DF_SHFT_B1) | (((Byte*)&gl_ptr_mem)[2] >> DF_SHFT_B2));
749 2 Spi_ack_write();
750 2 Spi_write_data((((Byte*)&gl_ptr_mem)[2] & ~DF_PAGE_MASK) << DF_SHFT_B1);
751 2 Spi_ack_write();
752 2 Spi_write_data(0x00); /* address 00 of the page */
753 2 Spi_ack_write();
754 2 }
755 1 for (i = 8; i != 0; i--) /* write 8x64b = 512b */
756 1 {
757 2 while (!Usb_rx_complete()); /* wait end of reception */
758 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
759 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
760 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
761 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
762 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
763 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
764 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
765 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
766 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
767 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
768 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
769 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
770 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
771 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
772 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
773 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
774 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
775 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
776 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
777 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
778 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
779 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
780 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
781 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
782 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
783 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
784 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
785 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
786 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
787 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
788 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
789 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
790 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
791 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
792 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
793 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
794 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
795 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
796 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 14
797 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
798 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
799 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
800 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
801 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
802 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
803 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
804 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
805 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
806 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
807 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
808 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
809 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
810 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
811 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
812 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
813 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
814 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
815 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
816 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
817 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
818 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
819 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
820 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
821 2 Spi_write_data(Usb_read_byte()); Spi_ack_write();
822 2 Usb_clear_RXOUT(); /* usb read acknowledgement */
823 2 }
824 1 gl_ptr_mem += 512;
825 1
826 1 #if DF_PAGE_SIZE > 512
827 1 /* check if end of page */
828 1 if ((((Byte*)&gl_ptr_mem)[2] & DF_PAGE_MASK) == 0x00)
829 1 {
830 2 DF_CS |= DF_DESEL_ALL; /* launch page programming */
831 2 df_mem_busy = TRUE; /* memory is busy */
832 2 }
833 1 return OK; /* write done */
834 1 #else
/* always end of page */
DF_CS |= DF_DESEL_ALL; /* launch page programming */
df_mem_busy = TRUE;
return OK; /* write done */
#endif
840 1 }
841
842
843 /*F**************************************************************************
844 * NAME: df_format
845 *----------------------------------------------------------------------------
846 * PARAMS:
847 *
848 * return:
849 * Address of the format parameter structure in code
850 *----------------------------------------------------------------------------
851 * PURPOSE:
852 * This function is called by the fat_format function and returns a pointer
853 * to a table containing the format parameters.
854 *----------------------------------------------------------------------------
855 * EXAMPLE:
856 *----------------------------------------------------------------------------
857 * NOTE:
858 * DF FORMAT PARAMETERS
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 15
859 * CAPACITY LBAs CYL HDs S/T CLUSTs S/C S/F FAT HID
860 * 16MB 32640 510 4 16 4080 8 12 12 15
861 * 32MB 65280 510 8 16 4080 16 12 12 15
862 *----------------------------------------------------------------------------
863 * REQUIREMENTS:
864 *****************************************************************************/
865 s_format code * df_format (void)
866 {
867 1 code s_format df_tab_format[]=
868 1 {
869 1 /* nb_cylinder, nb_head, nb_sector, nb_hidden, nb_sector_per_cluster */
870 1 { (Uint16)510, (Byte)4, (Byte)16, (Byte)15, (Byte)8 },
871 1 { (Uint16)510, (Byte)8, (Byte)16, (Byte)15, (Byte)8 },
872 1 };
873 1
874 1 /* -- DF Type Selection -- */
875 1 if (Df_disk_size() == DF_SIZE_16MB) return &df_tab_format[DF_16MB];
876 1 if (Df_disk_size() == DF_SIZE_32MB) return &df_tab_format[DF_32MB];
877 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2005 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -