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

📄 mp3.lst

📁 Build ourself a MP3 Player
💻 LST
📖 第 1 页 / 共 5 页
字号:
.................... #define  REG_HEAD		0x06	// ADDRESS OF HEAD/DRIVE REGISTER  
.................... #define  REG_STATUS		0x07	// ADDRESS OF STATUS REGISTER  
.................... #define  REG_COMMAND		0x07	// ADDRESS OF COMMAND REGISTER  
....................   
....................   
.................... #define  COMMAND_IDENTIFY	   0xEC  
.................... #define  COMMAND_WRITESECTOR	0x30  
.................... #define  COMMAND_READSECTOR	0x20  
....................   
.................... #define CF_OK 0  
.................... #define NO_CF 1  
....................   
.................... boolean CF_isReady();  
.................... boolean CF_isBusy(void);  
.................... void CF_taskFileWrite(byte, byte);  
.................... byte CF_ReadByte(void);  
.................... void CF_WriteByte(byte data);  
....................  
.................... // Compact flash state  
.................... int32 CF_CurrSector; // the sector we're currently reading/writing  
.................... int16 CF_CurrByteInSector;  // what byte in that sector we're at  
.................... boolean  CF_isValid; // CF seems ok  
....................   
.................... boolean is_CF_Out() {  
....................    input(CF_CD);             // check if the CD line is high  
*
0004:  GOTO   18B0 (RETURN)
.................... }  
....................   
....................   
....................   
.................... void CF_SetAddr(byte addr) {  
....................    output_bit(CF_A0, bit_test(addr, 0));  
*
17E8:  MOVLB  2
17EA:  BTFSC  xC4.0
17EC:  GOTO   17F6
17F0:  BCF    F8D.0
17F2:  GOTO   17F8
17F6:  BSF    F8D.0
....................    output_bit(CF_A1, bit_test(addr, 1));  
17F8:  BTFSC  xC4.1
17FA:  GOTO   1804
17FE:  BCF    F8D.1
1800:  GOTO   1806
1804:  BSF    F8D.1
....................    output_bit(CF_A2, bit_test(addr, 2));  
1806:  BTFSC  xC4.2
1808:  GOTO   1812
180C:  BCF    F8D.2
180E:  GOTO   1814
1812:  BSF    F8D.2
1814:  MOVLB  0
1816:  RETLW  00
.................... }  
....................   
.................... // write data to CF port addr  
.................... void CF_TaskFileWrite(byte addr, byte data)  
.................... {  
....................    cf_SetAddr(addr);  
*
199A:  MOVFF  2C2,2C4
199E:  CALL   17E8
....................    cf_WriteByte(data);  
19A2:  MOVFF  2C3,2C4
19A6:  CALL   197C
19AA:  RETLW  00
.................... }  
....................   
.................... // read byte from CF port addr  
.................... byte CF_TaskFileRead(byte addr)  
.................... {  
....................    CF_SetAddr(addr);  
*
1924:  MOVFF  2B9,2C4
1928:  CALL   17E8
....................    return(CF_ReadByte());  
192C:  CALL   18FA
1930:  MOVF   01,W
1932:  RETLW  00
.................... }  
....................   
.................... boolean CF_isBusy(void) {  
....................   return ((CF_TaskFileRead(7) & 0x80) == 0x80);  
1934:  MOVLW  07
1936:  MOVLB  2
1938:  MOVWF  xB9
193A:  MOVLB  0
193C:  CALL   1924
1940:  MOVF   01,W
1942:  ANDLW  80
1944:  SUBLW  80
1946:  BTFSC  FD8.2
1948:  GOTO   1952
194C:  MOVLW  00
194E:  GOTO   1954
1952:  MOVLW  01
1954:  MOVWF  01
1956:  RETLW  00
.................... }  
....................   
.................... boolean CF_isReady(void) {  
....................   return ((CF_TaskFileRead(7) & 0x40) == 0x40);  
1958:  MOVLW  07
195A:  MOVLB  2
195C:  MOVWF  xB9
195E:  MOVLB  0
1960:  CALL   1924
1964:  MOVF   01,W
1966:  ANDLW  40
1968:  SUBLW  40
196A:  BTFSC  FD8.2
196C:  GOTO   1976
1970:  MOVLW  00
1972:  GOTO   1978
1976:  MOVLW  01
1978:  MOVWF  01
197A:  RETLW  00
.................... }  
....................   
.................... /********************/  
.................... // reset the card via the RST line  
....................   
.................... void CF_ResetCard(void) {  
....................   output_high(CF_RESET);  
*
185E:  BSF    F89.5
....................   delay_ms(255);  
1860:  MOVLW  FF
1862:  MOVLB  2
1864:  MOVWF  xB3
1866:  MOVLB  0
1868:  CALL   1832
....................   output_low(CF_RESET);  
186C:  BCF    F89.5
....................   delay_ms(10);  
186E:  MOVLW  0A
1870:  MOVLB  2
1872:  MOVWF  xB3
1874:  MOVLB  0
1876:  CALL   1832
187A:  GOTO   18AC (RETURN)
.................... }  
....................   
.................... void CF_Disable(void) {  
....................    // default CF power down signals  
....................    output_low(CF_OE);  
*
1818:  BCF    F89.1
....................    output_low(CF_WE);  
181A:  BCF    F89.2
....................    output_high(CF_CE);  
181C:  BSF    F8A.0
....................    CF_SetAddr(0);  
181E:  MOVLB  2
1820:  CLRF   xC4
1822:  MOVLB  0
1824:  CALL   17E8
....................    output_high(CF_RESET);  
1828:  BSF    F89.5
....................    // presumption of invalidity  
....................    CF_isValid=false;  
182A:  MOVLB  2
182C:  BCF    x17.1
182E:  MOVLB  0
1830:  RETLW  00
.................... }  
....................   
.................... byte CF_Enable(void) {  
....................    CF_Disable();  
*
187E:  CALL   1818
....................    output_low(CF_CE);  
1882:  BCF    F8A.0
....................    printf("Resetting Card.. ");  
*
0096:  MOVFF  FF2,0E
009A:  BCF    FF2.7
009C:  CLRF   FF7
009E:  ADDLW  B0
00A0:  MOVWF  FF6
00A2:  MOVLW  00
00A4:  ADDWFC FF7,F
00A6:  TBLRD*+
00A8:  MOVF   FF5,W
00AA:  BTFSC  0E.7
00AC:  BSF    FF2.7
00AE:  RETURN 0
00B0:  DATA 52,65
00B2:  DATA 73,65
00B4:  DATA 74,74
00B6:  DATA 69,6E
00B8:  DATA 67,20
00BA:  DATA 43,61
00BC:  DATA 72,64
00BE:  DATA 2E,2E
00C0:  DATA 20,00
*
1884:  MOVLB  2
1886:  CLRF   x9E
1888:  MOVF   x9E,W
188A:  MOVLB  0
188C:  CALL   0096
1890:  MOVLB  2
1892:  INCF   x9E,F
1894:  BTFSS  F9E.4
1896:  GOTO   1894
189A:  MOVWF  FAD
189C:  MOVLW  11
189E:  SUBWF  x9E,W
18A0:  BTFSS  FD8.2
18A2:  GOTO   1888
....................    CF_ResetCard();  
18A6:  MOVLB  0
18A8:  GOTO   185E
....................    if (is_CF_Out()) {  
18AC:  GOTO   0004
18B0:  MOVF   01,F
18B2:  BTFSC  FD8.2
18B4:  GOTO   18E6
....................       CF_isValid = false;  
18B8:  MOVLB  2
18BA:  BCF    x17.1
....................       printf("No CF found!\n\r");  
*
00C2:  MOVFF  FF2,0E
00C6:  BCF    FF2.7
00C8:  CLRF   FF7
00CA:  ADDLW  DC
00CC:  MOVWF  FF6
00CE:  MOVLW  00
00D0:  ADDWFC FF7,F
00D2:  TBLRD*+
00D4:  MOVF   FF5,W
00D6:  BTFSC  0E.7
00D8:  BSF    FF2.7
00DA:  RETURN 0
00DC:  DATA 4E,6F
00DE:  DATA 20,43
00E0:  DATA 46,20
00E2:  DATA 66,6F
00E4:  DATA 75,6E
00E6:  DATA 64,21
00E8:  DATA 0A,0D
00EA:  DATA 00,00
*
18BC:  CLRF   x9E
18BE:  MOVF   x9E,W
18C0:  MOVLB  0
18C2:  CALL   00C2
18C6:  MOVLB  2
18C8:  INCF   x9E,F
18CA:  BTFSS  F9E.4
18CC:  GOTO   18CA
18D0:  MOVWF  FAD
18D2:  MOVLW  0E
18D4:  SUBWF  x9E,W
18D6:  BTFSS  FD8.2
18D8:  GOTO   18BE
....................       return NO_CF;  
18DC:  MOVLW  01
18DE:  MOVWF  01
18E0:  GOTO   18F6
18E4:  MOVLB  0
....................      }  
....................    output_high(CF_OE);  
18E6:  BSF    F89.1
....................    output_high(CF_WE);  
18E8:  BSF    F89.2
....................    set_tris_d(TRIS_D_INPUT);  
18EA:  MOVLW  FF
18EC:  MOVWF  F95
....................    CF_isValid = true;  
18EE:  MOVLB  2
18F0:  BSF    x17.1
....................    return CF_OK;  
18F2:  MOVLW  00
18F4:  MOVWF  01
18F6:  MOVLB  0
18F8:  RETLW  00
.................... }  
....................   
.................... /*********************/  
....................   
.................... void CF_Identify(void) {  
....................    byte c;  
....................   
....................    if (!CF_isValid)  
*
29F0:  MOVLB  2
29F2:  BTFSC  x17.1
29F4:  GOTO   29FC
....................       return;  
29F8:  GOTO   2B06
....................   
....................    output_low(CF_CE);  
29FC:  BCF    F8A.0
....................    printf("Identifying CF.. ");  
*
00EC:  MOVFF  FF2,0E
00F0:  BCF    FF2.7
00F2:  CLRF   FF7
00F4:  ADDLW  06
00F6:  MOVWF  FF6
00F8:  MOVLW  01
00FA:  ADDWFC FF7,F
00FC:  TBLRD*+
00FE:  MOVF   FF5,W
0100:  BTFSC  0E.7
0102:  BSF    FF2.7
0104:  RETURN 0
0106:  DATA 49,64
0108:  DATA 65,6E
010A:  DATA 74,69
010C:  DATA 66,79
010E:  DATA 69,6E
0110:  DATA 67,20
0112:  DATA 43,46
0114:  DATA 2E,2E
0116:  DATA 20,00
*
29FE:  CLRF   x9F
2A00:  MOVF   x9F,W
2A02:  MOVLB  0
2A04:  CALL   00EC
2A08:  MOVLB  2
2A0A:  INCF   x9F,F
2A0C:  BTFSS  F9E.4
2A0E:  GOTO   2A0C
2A12:  MOVWF  FAD
2A14:  MOVLW  11
2A16:  SUBWF  x9F,W
2A18:  BTFSS  FD8.2
2A1A:  GOTO   2A00
....................    while (CF_isBusy() && (!CF_isReady())) {  
2A1E:  MOVLB  0
2A20:  CALL   1934
2A24:  MOVF   01,F
2A26:  BTFSC  FD8.2
2A28:  GOTO   2A4A
2A2C:  CALL   1958
2A30:  MOVF   01,F
2A32:  BTFSS  FD8.2
2A34:  GOTO   2A4A
....................       delay_us(1);  
2A38:  NOP   
2A3A:  NOP   
2A3C:  NOP   
2A3E:  NOP   
2A40:  NOP   
....................       //putc('.');  
....................    }  
2A42:  MOVLB  2
2A44:  GOTO   2A1E
2A48:  MOVLB  0
....................   
.................... //   printf("set drive ");  
....................    CF_taskFileWrite(6, 0xA0);   // drive 0  
2A4A:  MOVLW  06
2A4C:  MOVLB  2
2A4E:  MOVWF  xC2
2A50:  MOVLW  A0
2A52:  MOVWF  xC3
2A54:  MOVLB  0
2A56:  CALL   199A
.................... //   printf("command id ");  
....................    CF_taskFileWrite(REG_COMMAND, COMMAND_IDENTIFY);   // identify drive command  
2A5A:  MOVLW  07
2A5C:  MOVLB  2
2A5E:  MOVWF  xC2
2A60:  MOVLW  EC
2A62:  MOVWF  xC3
2A64:  MOVLB  0
2A66:  CALL   199A
....................   
....................    while ((CF_ReadByte()&0x80)==0x80);  // wait for ready  
2A6A:  CALL   18FA
2A6E:  MOVF   01,W
2A70:  ANDLW  80
2A72:  SUBLW  80
2A74:  BTFSS  FD8.2
2A76:  GOTO   2A7E
2A7A:  GOTO   2A6A
....................   
....................    CF_setAddr(0);  
2A7E:  MOVLB  2
2A80:  CLRF   xC4
2A82:  MOVLB  0
2A84:  CALL   17E8
....................   
....................    for(c = 0; c < 0xFF; c++) {  
2A88:  MOVLB  2
2A8A:  CLRF   x9E
2A8C:  INCFSZ x9E,W
2A8E:  GOTO   2A96
2A92:  GOTO   2AB2
....................       putc(cf_ReadByte());  
2A96:  MOVLB  0
2A98:  CALL   18FA
2A9C:  MOVFF  01,29F
2AA0:  MOVLB  2
2AA2:  MOVF   01,W
2AA4:  BTFSS  F9E.4
2AA6:  GOTO   2AA4

⌨️ 快捷键说明

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