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

📄 df.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 442   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 443   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 444   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 445   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 446   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 447   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 448   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 449   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 450   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 451   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 452   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 453   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 454   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 455   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 456   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 457   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 458   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 459   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 460   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 461   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 462   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 463   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 464   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 465   2          Spi_write_dummy(); ACC = SPSTA; Usb_write_byte(Spi_read_data());
 466   2                             ACC = SPSTA; Usb_write_byte(Spi_read_data());
 467   2          Enable_interrupt();                     /* global re-enable */
 468   2      
 469   2          Usb_set_TXRDY();                        /* start usb transfer */
 470   2          while (!Usb_tx_complete());             /* wait end of transfer */
 471   2          Usb_clear_TXCMPL();                     /* ack transfer */
 472   2        }
 473   1        gl_ptr_mem += 512;
 474   1        return OK;
 475   1      }
 476          
 477          
 478          /*F**************************************************************************
 479          * NAME: df_write_open
 480          *----------------------------------------------------------------------------
 481          * PARAMS:
 482          *   pos: next write operation address
 483          *
 484          * return:
 485          *   status: TRUE: open done
 486          *           FALSE: open not done: memory is still busy
 487          *----------------------------------------------------------------------------
C51 COMPILER V6.20c  DF                                                                    07/10/2002 15:17:44 PAGE 9   

 488          * PURPOSE: 
 489          *   Open memory in write mode
 490          *----------------------------------------------------------------------------
 491          * EXAMPLE:
 492          *----------------------------------------------------------------------------
 493          * NOTE:
 494          *   If page buffer > 512 bytes, page content is first loaded in buffer to be
 495          *   partially updated by write_byte or write64 functions
 496          *----------------------------------------------------------------------------
 497          * REQUIREMENTS:
 498          *****************************************************************************/
 499          bit df_write_open (Uint32 pos)
 500          {
 501   1        gl_ptr_mem = pos << 9;                    /* gl_ptr_mem = pos * 512 */
 502   1        if (df_mem_busy)
 503   1        {
 504   2          df_mem_busy = FALSE;
 505   2          df_busy();                              /* wait end of programming */
 506   2        }
 507   1      
 508   1      #if DF_PAGE_SIZE > 512
 509   1        /* select right memory */
 510   1        if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
 511   1        {
 512   2          if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
 513   2            DF_CS0 = 0;
 514   2          else
 515   2            DF_CS1 = 0;
 516   2        }
 517   1        else
 518   1        {
 519   2          if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
 520   2            DF_CS2 = 0;
 521   2          else
 522   2            DF_CS3 = 0;
 523   2        }
 524   1        /* get page content in buffer */
 525   1        Spi_write_data(DF_TF_BUF_1);              /* main to buffer 1 transfer */
 526   1        Spi_ack_write();
 527   1        Spi_write_data((((Byte*)&gl_ptr_mem)[1] << DF_SHFT_B1) | (((Byte*)&gl_ptr_mem)[2] >> DF_SHFT_B2));
 528   1        Spi_ack_write();
 529   1        Spi_write_data(((Byte*)&gl_ptr_mem)[2] << DF_SHFT_B1);
 530   1        Spi_ack_write();
 531   1        Spi_write_data(0xFF);                     /* dummy byte */
 532   1        Spi_ack_write();
 533   1        DF_CS |= DF_DESEL_ALL;                    /* deselect memory */
 534   1      
 535   1        df_busy();                                /* wait end of page transfer */
 536   1      #endif
 537   1      
 538   1        /* select right memory */
 539   1        if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
 540   1        {
 541   2          if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
 542   2            DF_CS0 = 0;
 543   2          else
 544   2            DF_CS1 = 0;
 545   2        }
 546   1        else
 547   1        {
 548   2          if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
 549   2            DF_CS2 = 0;
C51 COMPILER V6.20c  DF                                                                    07/10/2002 15:17:44 PAGE 10  

 550   2          else
 551   2            DF_CS3 = 0;
 552   2        }
 553   1        /* prepare the memory in write mode */
 554   1        Spi_write_data(DF_PG_BUF_1);              /* main program through buffer 1 */
 555   1        Spi_ack_write();
 556   1        Spi_write_data((((Byte*)&gl_ptr_mem)[1] << DF_SHFT_B1) | (((Byte*)&gl_ptr_mem)[2] >> DF_SHFT_B2));
 557   1        Spi_ack_write();
 558   1        Spi_write_data(((((Byte*)&gl_ptr_mem)[2] & ~DF_PAGE_MASK) << DF_SHFT_B1) | (((Byte*)&gl_ptr_mem)[2] & DF
             -_PAGE_MASK));
 559   1        Spi_ack_write();
 560   1        Spi_write_data(((Byte*)&gl_ptr_mem)[3]);
 561   1        Spi_ack_write();
 562   1        return OK;
 563   1      }
 564          
 565          
 566          /*F**************************************************************************
 567          * NAME: df_write_close
 568          *----------------------------------------------------------------------------
 569          * PARAMS:
 570          *
 571          * return:
 572          *----------------------------------------------------------------------------
 573          * PURPOSE: 
 574          *   This function fills the end of the logical sector (512b) and launch page
 575          *   programming
 576          *----------------------------------------------------------------------------
 577          * EXAMPLE:
 578          *----------------------------------------------------------------------------
 579          * NOTE:
 580          *----------------------------------------------------------------------------
 581          * REQUIREMENTS:
 582          *****************************************************************************/
 583          void df_write_close (void)
 584          {
 585   1        while ((((Byte*)&gl_ptr_mem)[3] != 0x00) || ((((Byte*)&gl_ptr_mem)[2] & 0x01) != 0x00))
 586   1        {
 587   2          Spi_write_data(0x00);
 588   2          Spi_ack_write();
 589   2          gl_ptr_mem++;
 590   2        }
 591   1        DF_CS |= DF_DESEL_ALL;                    /* launch page programming */
 592   1        df_mem_busy = TRUE;                       /* memory is busy */
 593   1      }
 594          
 595          
 596          /*F**************************************************************************
 597          * NAME: df_write_byte
 598          *----------------------------------------------------------------------------
 599          * PARAMS:
 600          *   b: byte to program
 601          *
 602          * return:
 603          *   write status: OK: write done, KO: write not done
 604          *----------------------------------------------------------------------------
 605          * PURPOSE:
 606          *   Low level memory write function
 607          *----------------------------------------------------------------------------
 608          * EXAMPLE:
 609          *----------------------------------------------------------------------------
 610          * NOTE:
C51 COMPILER V6.20c  DF                                                                    07/10/2002 15:17:44 PAGE 11  

 611          *   There is no need to pre-load a new page in buffer as first write
 612          *   will start at address 0 of the page. This considers file write
 613          *   does not overwrite exixting file...
 614          *----------------------------------------------------------------------------
 615          * REQUIREMENTS:
 616          *****************************************************************************/
 617          bit df_write_byte (const Byte b)
 618          {
 619   1        if (df_mem_busy)
 620   1        { /* memory busy */
 621   2          df_mem_busy = FALSE;                    /* memory is ready */
 622   2          df_busy();                              /* wait end of programming */
 623   2          /* select right memory */
 624   2          if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
 625   2          {
 626   3            if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
 627   3              DF_CS0 = 0;
 628   3            else
 629   3              DF_CS1 = 0;
 630   3          }
 631   2          else
 632   2          {
 633   3            if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
 634   3              DF_CS2 = 0;
 635   3            else
 636   3              DF_CS3 = 0;
 637   3          }
 638   2      
 639   2          /* prepare the memory in write mode */
 640   2          Spi_write_data(DF_PG_BUF_1);            /* main program through buffer 1 */
 641   2          Spi_ack_write();
 642   2          Spi_write_data((((Byte*)&gl_ptr_mem)[1] << DF_SHFT_B1) | (((Byte*)&gl_ptr_mem)[2] >> DF_SHFT_B2));
 643   2          Spi_ack_write();
 644   2          Spi_write_data((((Byte*)&gl_ptr_mem)[2] & ~DF_PAGE_MASK) << DF_SHFT_B1);
 645   2          Spi_ack_write();
 646   2          Spi_write_data(0x00);                   /* address 00 of the page */
 647   2          Spi_ack_write();
 648   2      
 649   2          Spi_write_data(b);                      /* write current data */
 650   2          Spi_ack_write();
 651   2          gl_ptr_mem++;
 652   2          return OK;                              /* write done */
 653   2        }
 654   1        else
 655   1        { /* memory ready */
 656   2          Spi_write_data(b);                      /* write current data */
 657   2          Spi_ack_write();
 658   2          gl_ptr_mem++;
 659   2      
 660   2          /* check if end of page */
 661   2          if ((((Byte*)&gl_ptr_mem)[3] == 0x00) && ((((Byte*)&gl_ptr_mem)[2] & DF_PAGE_MASK) == 0x00))
 662   2          {
 663   3            DF_CS |= DF_DESEL_ALL;                /* launch page programming */
 664   3            df_mem_busy = TRUE;                   /* memory is busy */
 665   3          }
 666   2          return OK;                              /* write done */
 667   2        }

⌨️ 快捷键说明

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