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

📄 df.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -