📄 test.lst
字号:
C51 COMPILER V8.02 TEST 09/19/2006 15:01:22 PAGE 20
523 =2 unsigned int OffsetofSector;
524 =2 unsigned char SectorofCluster;// 0~(sector/cluster-1)
525 =2 unsigned long pointer; // current sector(DSN)
526 =2 // unsigned int FatSectorPointer; // FSN
527 =2 } FILE_INFO, *pFILE_INFO;
528 =2
529 =2 typedef struct _DIR_INFO{
530 =2 unsigned char name[8]; //0
531 =2 unsigned char extension[3]; //9
532 =2 unsigned char attribute; //11
533 =2 unsigned char Reserved[10]; //21
534 =2 unsigned int lastUpdateDate; //23
535 =2 unsigned int lastUpdateTime; //25
536 =2 unsigned int startCluster; //27
537 =2 unsigned long length; //28
538 =2 } DIR_INFO, *pDIR_INFO;
539 =2 /*
540 =2 // Mode Sense
541 =2 */
542 =2 typedef struct _MODE_SENSE_SPC {
543 =2 UINT8 OperationCode; // 1AH
544 =2 UINT8 Reseved0 : 3 ;
545 =2 UINT8 DisableBlockDescriptor : 1 ;
546 =2 UINT8 Reserved0 : 4 ;
547 =2 UINT8 PageCode:6 ;
548 =2 UINT8 PageControl : 2 ;
549 =2 UINT8 Reserved1;
550 =2 UINT8 ParameterLen;
551 =2 UINT8 Control;
552 =2 } MODE_SENSE_SPC, *pMODE_SENSE_SPC;
553 =2
554 =2 /*
555 =2 typedef struct _MODE_PARAMETER_HEAD {
556 =2 UINT8 DataLen;
557 =2 UINT8 MediumType;
558 =2 UINT8 DeviceParameter;
559 =2 UINT8 BlockDescriptorLen;
560 =2 } MODE_PARAMETER_HEAD, *pMODE_PARAMETER_HEAD;
561 =2 */
562 =2 /*
563 =2 // Define Device Capabilities page.
564 =2 */
565 =2 /*
566 =2 typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
567 =2 UINT8 PageCode : 6;
568 =2 UINT8 Reserved : 1;
569 =2 UINT8 PageSavable : 1;
570 =2 UINT8 PageLength;
571 =2 UINT8 WriteCacheDisable : 1;
572 =2 UINT8 Reserved1 : 7;
573 =2 UINT8 LogicalBlockSize[2];
574 =2 UINT8 NumberOfLogicalBlocks[5];
575 =2 UINT8 PowerPerformance;
576 =2 UINT8 Lockable : 1;
577 =2 UINT8 Formattable : 1;
578 =2 UINT8 Writable : 1;
579 =2 UINT8 Readable : 1;
580 =2 UINT8 Reserved2 : 4;
581 =2 UINT8 Reserved3;
582 =2 }MODE_RBC_DEVICE_PARAMETERS_PAGE, *pMODE_RBC_DEVICE_PARAMETERS_PAGE;
583 =2 */
584 =2 /*
C51 COMPILER V8.02 TEST 09/19/2006 15:01:22 PAGE 21
585 =2 // prevent/allow medium removal
586 =2 */
587 =2 typedef struct _MEDIA_REMOVAL_SPC {
588 =2 UINT8 OperationCode; // 1EH
589 =2 UINT8 Reserved0[3];
590 =2 UINT8 Prevent;
591 =2 //UINT8 Reserved1:6 ;
592 =2 //UINT8 Control;
593 =2 } MEDIA_REMOVAL_SPC, *pMEDIA_REMOVAL_SPC;
594 =2
595 =2 /*
596 =2 // Request Sense
597 =2 */
598 =2 typedef struct _REQUEST_SENSE_SPC {
599 =2 UINT8 OperationCode; // 03H
600 =2 UINT8 Reserved[3];
601 =2 UINT8 AllocationLen;
602 =2 UINT8 Control;
603 =2 } REQUEST_SENSE_SPC, *pREQUEST_SENSE_SPC;
604 =2 /*
605 =2 typedef struct _REQUEST_SENSE_DATA {
606 =2 UINT8 ResponseCode : 7;
607 =2 UINT8 Valid : 1;
608 =2
609 =2 UINT8 SegmentNum;
610 =2
611 =2 UINT8 SenseKey : 4;
612 =2 UINT8 Reserved0 : 1;
613 =2 UINT8 WrongLenIndicator : 1;
614 =2 UINT8 EndofMedium : 1;
615 =2 UINT8 FileMark : 1;
616 =2
617 =2 UINT8 Info_0;
618 =2 UINT8 Info_1;
619 =2 UINT8 Info_2;
620 =2 UINT8 Info_3;
621 =2
622 =2 UINT8 AdditionalSenseLen;
623 =2
624 =2 UINT8 CommandSpecInfo_0;
625 =2 UINT8 CommandSpecInfo_1;
626 =2 UINT8 CommandSpecInfo_2;
627 =2 UINT8 CommandSpecInfo_3;
628 =2
629 =2 UINT8 ASC;
630 =2 UINT8 ASCQ;
631 =2 UINT8 FieldReplacableUnitCode;
632 =2 UINT8 SenseKeySpec_0 : 7;
633 =2 UINT8 SenseKeySpecValid : 1;
634 =2 UINT8 SenseKeySpec_1;
635 =2 UINT8 SenseKeySpec_2;
636 =2
637 =2 } REQUEST_SENSE_DATA, *pREQUEST_SENSE_DATA;
638 =2 */
639 =2 /*
640 =2 // Test Unit Ready
641 =2 */
642 =2 typedef struct _TEST_UNIT_SPC {
643 =2 UINT8 OperationCode; // 00H
644 =2 UINT8 Reserved[4];
645 =2 UINT8 Control;
646 =2 } TEST_UNIT_SPC, *pTEST_UNIT_SPC;
C51 COMPILER V8.02 TEST 09/19/2006 15:01:22 PAGE 22
647 =2
648 =2 /*
649 =2 // Write Buffer
650 =2 */
651 =2
652 =2 typedef struct _WRITE_BUFFER_SPC {
653 =2 UINT8 OperationCode;
654 =2 UINT8 Mod:4 ;
655 =2 UINT8 Reserved0:4 ;
656 =2 UINT8 BufferID;
657 =2 UINT8 BufferOff_2;
658 =2 UINT8 BufferOff_1;
659 =2 UINT8 BufferOff_0;
660 =2 UINT8 ParameterLen_2;
661 =2 UINT8 ParameterLen_1;
662 =2 UINT8 ParameterLen_0;
663 =2 UINT8 Control;
664 =2 } WRITE_BUFFER_SPC, *pWRITE_BUFFER_SPC;
665 =2
666 =2 typedef union _CDB_RBC {
667 =2 GENERIC_CDB Cdb_Generic;
668 =2
669 =2 // RBC commands
670 =2 GENERIC_RBC RbcCdb_Generic;
671 =2
672 =2 FORMAT_RBC RbcCdb_Format;
673 =2 READ_RBC RbcCdb_Read;
674 =2 READ_CAPACITY_RBC RbcCdb_ReadCapacity;
675 =2 START_STOP_RBC RbcCdb_OnOffUnit;
676 =2 SYNCHRONIZE_CACHE_RBC RbcCdb_SyncCache;
677 =2 VERIFY_RBC RbcCdb_Verify;
678 =2 WRITE_RBC RbcCdb_Write;
679 =2
680 =2
681 =2 // SPC-2 commands
682 =2
683 =2 INQUIRY_SPC SpcCdb_Inquiry;
684 =2 MODE_SELECT_SPC SpcCdb_ModeSelect;
685 =2 MODE_SENSE_SPC SpcCdb_ModeSense;
686 =2 MEDIA_REMOVAL_SPC SpcCdb_Remove;
687 =2 REQUEST_SENSE_SPC SpcCdb_RequestSense;
688 =2 TEST_UNIT_SPC SpcCdb_TestUnit;
689 =2 WRITE_BUFFER_SPC SpcCdb_WriteBuffer;
690 =2
691 =2 // ATAPI Commands
692 =2 READ_10 CmdRead10;
693 =2 WRITE_10 CmdWrite10;
694 =2 MODE_SELECT_10 CmdModeSel10;
695 =2 MODE_SENSE_10 CmdModeSen10;
696 =2 //////////////////////////////////////
697 =2 READ_LONG_CMD SpcCdb_ReadLong;
698 =2
699 =2 } CDB_RBC, *pCDB_RBC;
700 =2
701 =2
2 =1 ///////////////////////////////////
3 =1 #define CBW_SIGNATURE 0x55534243
4 =1 #define CSW_SIGNATURE 0x55534253
5 =1
6 =1 #define TPBulk_CBW TPBulk_Block.TPBulk_CommandBlock
7 =1 #define CBW_wXferLen TPBulk_CBW.dCBW_DataXferLen
8 =1 #define RBC_CDB TPBulk_CBW.cdbRBC
C51 COMPILER V8.02 TEST 09/19/2006 15:01:22 PAGE 23
9 =1 #define RBC_LUN TPBulk_CBW.bCBW_LUN
10 =1 #define TPBulk_CSW TPBulk_Block.TPBulk_CommandStatus
11 =1
12 =1 typedef struct _COMMAND_BLOCK_WRAPPER{
13 =1 UINT32 dCBW_Signature;
14 =1 UINT32 dCBW_Tag;
15 =1 UINT32 dCBW_DataXferLen;
16 =1 UINT8 bCBW_Flag;
17 =1 UINT8 bCBW_LUN;
18 =1 UINT8 bCBW_CDBLen;
19 =1 CDB_RBC cdbRBC;
20 =1 } CBW, *pCBW;
21 =1
22 =1 typedef struct _COMMAND_STATUS_WRAPPER{
23 =1 UINT32 dCSW_Signature;
24 =1 UINT32 dCSW_Tag;
25 =1 UINT32 dCSW_DataResidue;
26 =1 UINT8 bCSW_Status;
27 =1 } CSW, *pCSW;
28 =1
29 =1 typedef union _TPBULK_STRUC {
30 =1 CBW TPBulk_CommandBlock;
31 =1 CSW TPBulk_CommandStatus;
32 =1
33 =1 }TPB_STRUC, *pTPB_STRUC;
34 =1 ///////////////////////////////////
35 =1 unsigned char EnumMassDev(void);
36 =1 unsigned char TPBulk_GetMaxLUN(void);
37 =1 unsigned char SPC_Inquiry(void);
38 =1 unsigned char SPC_READLONG(void);
39 =1 unsigned char SPC_RequestSense(void);
40 =1 unsigned char SPC_TestUnit(void);
41 =1 unsigned char SPC_LockMedia(void);
42 =1 unsigned char RBC_ReadCapacity(void);
43 =1 unsigned char RBC_ReadOneSec(unsigned long lba, unsigned char *pBuffer);
44 =1 unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer);
45 =1
46 =1
5 #include "fat.h"
1 =1 unsigned long FirstSectorofCluster(unsigned int n);
2 =1 unsigned int ThisFatEntOffset(unsigned int clusterNum);
3 =1 unsigned int GetNextClusterNum(unsigned int clusterNum);
4 =1 unsigned int ThisFatSecNum(unsigned int clusterNum);
6 #include "fat32.h"
1 =1 //////////////////////////////////////////////////////////////////////
2 =1 unsigned long FirstSectorofCluster32(unsigned long clusterNum);
3 =1 unsigned long ThisFatSecNum32(unsigned long clusterNum);
4 =1 unsigned long ThisFatEntOffset32(unsigned long clusterNum);
5 =1 unsigned long GetNextClusterNum32(unsigned long clusterNum );
6 =1 unsigned char GoToPointer32(unsigned long pointer);
7 =1 unsigned char DeleteClusterLink32(unsigned long clusterNum);
8 =1 unsigned long GetFreeCusterNum32(void);
9 =1 unsigned long CreateClusterLink32(unsigned long currentCluster);
7 #define FAT32_ACCESS
8 void playMp3();
9 void sdPlayMp3();
10 //void usbDebug(unsigned char nBytes, unsigned char *pBytes);
11
12 XXGFLAGS bdata bXXGFlags; // status flags
13 // storage definitions
14 UINT8 xdata pUSERBUF[64]; // user buffer, for misc. use
15 UINT8 xdata DBUF[SECT_LEN] _at_ 0x0; // 512B data buffer, allocated at 0x0
C51 COMPILER V8.02 TEST 09/19/2006 15:01:22 PAGE 24
16 UINT8 xdata RDIRBUF[SECT_LEN]; // 512 byte buffer for root directory
17 UINT8 xdata FATBUF[SECT_LEN]; // 512 byte buffer for FAT
18 UINT8 xdata respBuf[16]; // SPI response buffer
19
20 DIR_IDX dirIdx;
21 pDIR_INFO pDIR;
22
23 unsigned char skipSong;
24
25 //extern FILE_INFO xdata ThisFile; // file information
26 extern SYS_INFO_BLOCK DeviceInfo;
27 extern XXGPKG usbstack; // USB packet variables
28 extern TPB_STRUC data TPBulk_Block;
29
30 void main(void)
31 {
32 1 UINT8 i;
33 1 UINT16 j;
34 1 UINT32 nSector;
35 1
36 1 unsigned char temp;
37 1
38 1 bXXGFlags.SLAVE_ONLINE = FALSE;
39 1 bXXGFlags.SLAVE_FOUND = FALSE;
40 1 bXXGFlags.SLAVE_REMOVED=FALSE;
41 1
42 1 bXXGFlags.SLAVE_ENUMERATED = FALSE;
43 1 bXXGFlags.SLAVE_IS_ATTACHED = FALSE;
44 1 bXXGFlags.bUartInDone=FALSE;
45 1 bXXGFlags.bToggle=FALSE;
46 1 bXXGFlags.bIN_ISR=FALSE;
47 1
48 1 SCON = SCON_FAST; // set UART speed 38400bps
49 1 BufSel = MCU2MP3; // destination to mp3, source from mcu
50 1
51 1 SPI_CTL0 = 0x4E;
52 1 SPI_CTL1 = SPI_375K; // set low speed
53 1
54 1 P1= 0x0;
55 1 for(i=0;i<64;i++)
56 1 {
57 2 DBUF[i] = 0;
58 2 }
59 1
60 1 P3_DDR = 0xFA; // enable P3.2 for input
61
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -