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

📄 ata.lis

📁 用ATmega128做的mp3播放器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0138 51FD              sbrc R21,1
 013A                   .dbline 101
 013A AA9A              sbi 0x15,2
 013C           L47:
 013C                   .dbline 102
 013C           ; if (wordout & 0x0400) PORT_ATA_DATA2_OUT |= 0x10;
 013C 52FD              sbrc R21,2
 013E                   .dbline 102
 013E AC9A              sbi 0x15,4
 0140           L49:
 0140                   .dbline 103
 0140           ; if (wordout & 0x0800) PORT_ATA_DATA2_OUT |= 0x40;
 0140 53FD              sbrc R21,3
 0142                   .dbline 103
 0142 AE9A              sbi 0x15,6
 0144           L51:
 0144                   .dbline 104
 0144           ; if (wordout & 0x1000) PORT_ATA_DATA1_OUT |= 0x80;
 0144 54FD              sbrc R21,4
 0146                   .dbline 104
 0146 DF9A              sbi 0x1b,7
 0148           L53:
 0148                   .dbline 105
 0148           ; if (wordout & 0x2000) PORT_ATA_DATA1_OUT |= 0x20;
 0148 55FD              sbrc R21,5
 014A                   .dbline 105
 014A DD9A              sbi 0x1b,5
 014C           L55:
 014C                   .dbline 106
 014C           ; if (wordout & 0x4000) PORT_ATA_DATA1_OUT |= 0x08;
 014C 56FD              sbrc R21,6
 014E                   .dbline 106
 014E DB9A              sbi 0x1b,3
 0150           L57:
 0150                   .dbline 107
 0150           ; if (wordout & 0x8000) PORT_ATA_DATA1_OUT |= 0x02;
 0150 57FD              sbrc R21,7
 0152                   .dbline 107
 0152 D99A              sbi 0x1b,1
 0154           L59:
 0154                   .dbline 109
 0154           ; 
 0154           ; ata_write_pulse;
 0154 80916200          lds R24,98
 0158 8F77              andi R24,127
 015A 80936200          sts 98,R24
 015E                   .dbline 109
 015E 01E0              ldi R16,1
 0160 10E0              ldi R17,0
 0162 0E940000          xcall _delay_us
 0166                   .dbline 109
 0166 80916200          lds R24,98
 016A 8068              ori R24,128
 016C 80936200          sts 98,R24
 0170                   .dbline 109
 0170                   .dbline 111
 0170           ; 
 0170           ; ata_databus_in;
 0170 2224              clr R2
 0172 2ABA              out 0x1a,R2
 0174                   .dbline 111
 0174 24BA              out 0x14,R2
 0176                   .dbline 111
 0176                   .dbline -2
 0176                   .dbline 112
 0176           ; }     
 0176           L28:
 0176 0E940000          xcall pop_gset2
 017A                   .dbline 0 ; func end
 017A 0895              ret
 017C                   .dbsym r wordout 20 i
 017C                   .dbsym r reg 22 c
 017C                   .dbend
 017C                   .dbfunc e ata_write_byte _ata_write_byte fV
 017C           ;        byteout -> R22
 017C           ;            reg -> R20
                        .even
 017C           _ata_write_byte::
 017C 0E940000          xcall push_gset2
 0180 622F              mov R22,R18
 0182 402F              mov R20,R16
 0184                   .dbline -1
 0184                   .dbline 120
 0184           ; 
 0184           ; //******************************************************************
 0184           ; //*   WRITE BYTE TO ATA DEVICE
 0184           ; //*   
 0184           ; //*
 0184           ; //******************************************************************                                                                                                                                                                                                                           
 0184           ; void ata_write_byte(unsigned char reg,unsigned char byteout)
 0184           ; {
 0184                   .dbline 121
 0184           ; ata_write_word(reg,(unsigned int)byteout);
 0184 262F              mov R18,R22
 0186 3327              clr R19
 0188 042F              mov R16,R20
 018A B7DF              xcall _ata_write_word
 018C                   .dbline -2
 018C                   .dbline 122
 018C           ; }
 018C           L61:
 018C 0E940000          xcall pop_gset2
 0190                   .dbline 0 ; func end
 0190 0895              ret
 0192                   .dbsym r byteout 22 c
 0192                   .dbsym r reg 20 c
 0192                   .dbend
 0192                   .dbfunc e ata_read_word _ata_read_word fi
 0192           ;         wordin -> R20,R21
 0192           ;            reg -> R22
                        .even
 0192           _ata_read_word::
 0192 0E940000          xcall push_gset2
 0196 602F              mov R22,R16
 0198                   .dbline -1
 0198                   .dbline 132
 0198           ; 
 0198           ; //******************************************************************
 0198           ; //*   READ WORD FROM ATA DEVICE
 0198           ; //*   
 0198           ; //*   
 0198           ; //* Mapping : D0-PA0,D1-PA2,D2-PA4,D3-PA6,D4-PC7,D5-PC5,D7-PC3,D7-PC1
 0198           ; //*                     D8-PC0,D9-PC2,D10-PC4,D11-PC6,D12-PA7,D13-PA5,D14-PA3,D15-PA1
 0198           ; //******************************************************************                                                                                                                                                                                                                           
 0198           ; unsigned int ata_read_word(unsigned char reg)
 0198           ; {
 0198                   .dbline 133
 0198           ; unsigned int wordin = 0;
 0198 4427              clr R20
 019A 5527              clr R21
 019C                   .dbline 135
 019C           ; 
 019C           ; WDR();
 019C A895              wdr
 019E                   .dbline 136
 019E           ; PORT_ATA_IO_CNTL = reg;
 019E 60936200          sts 98,R22
 01A2                   .dbline 138
 01A2           ; 
 01A2           ; ata_databus_in;
 01A2 2224              clr R2
 01A4 2ABA              out 0x1a,R2
 01A6                   .dbline 138
 01A6 24BA              out 0x14,R2
 01A8                   .dbline 138
 01A8                   .dbline 140
 01A8           ; 
 01A8           ; PORT_ATA_IO_CNTL &= ~ATA_IOR;
 01A8 80916200          lds R24,98
 01AC 8F7B              andi R24,191
 01AE 80936200          sts 98,R24
 01B2                   .dbline 141
 01B2           ; delay_us(1);
 01B2 01E0              ldi R16,1
 01B4 10E0              ldi R17,0
 01B6 0E940000          xcall _delay_us
 01BA                   .dbline 143
 01BA           ; 
 01BA           ; if (PORT_ATA_DATA1_IN & 0x01) wordin |= 0x0001;
 01BA C89B              sbis 0x19,0
 01BC 01C0              rjmp L63
 01BE                   .dbline 143
 01BE 4160              ori R20,1
 01C0           L63:
 01C0                   .dbline 144
 01C0           ; if (PORT_ATA_DATA1_IN & 0x02) wordin |= 0x8000;
 01C0 C99B              sbis 0x19,1
 01C2 01C0              rjmp L65
 01C4                   .dbline 144
 01C4 5068              ori R21,128
 01C6           L65:
 01C6                   .dbline 145
 01C6           ; if (PORT_ATA_DATA1_IN & 0x04) wordin |= 0x0002;
 01C6 CA9B              sbis 0x19,2
 01C8 01C0              rjmp L67
 01CA                   .dbline 145
 01CA 4260              ori R20,2
 01CC           L67:
 01CC                   .dbline 146
 01CC           ; if (PORT_ATA_DATA1_IN & 0x08) wordin |= 0x4000;
 01CC CB9B              sbis 0x19,3
 01CE 01C0              rjmp L69
 01D0                   .dbline 146
 01D0 5064              ori R21,64
 01D2           L69:
 01D2                   .dbline 147
 01D2           ; if (PORT_ATA_DATA1_IN & 0x10) wordin |= 0x0004;
 01D2 CC9B              sbis 0x19,4
 01D4 01C0              rjmp L71
 01D6                   .dbline 147
 01D6 4460              ori R20,4
 01D8           L71:
 01D8                   .dbline 148
 01D8           ; if (PORT_ATA_DATA1_IN & 0x20) wordin |= 0x2000;
 01D8 CD9B              sbis 0x19,5
 01DA 01C0              rjmp L73
 01DC                   .dbline 148
 01DC 5062              ori R21,32
 01DE           L73:
 01DE                   .dbline 149
 01DE           ; if (PORT_ATA_DATA1_IN & 0x40) wordin |= 0x0008;
 01DE CE9B              sbis 0x19,6
 01E0 01C0              rjmp L75
 01E2                   .dbline 149
 01E2 4860              ori R20,8
 01E4           L75:
 01E4                   .dbline 150
 01E4           ; if (PORT_ATA_DATA1_IN & 0x80) wordin |= 0x1000;
 01E4 CF9B              sbis 0x19,7
 01E6 01C0              rjmp L77
 01E8                   .dbline 150
 01E8 5061              ori R21,16
 01EA           L77:
 01EA                   .dbline 152
 01EA           ; 
 01EA           ; if (PORT_ATA_DATA2_IN & 0x01) wordin |= 0x0100;
 01EA 989B              sbis 0x13,0
 01EC 01C0              rjmp L79
 01EE                   .dbline 152
 01EE 5160              ori R21,1
 01F0           L79:
 01F0                   .dbline 153
 01F0           ; if (PORT_ATA_DATA2_IN & 0x02) wordin |= 0x0080;
 01F0 999B              sbis 0x13,1
 01F2 01C0              rjmp L81
 01F4                   .dbline 153
 01F4 4068              ori R20,128
 01F6           L81:
 01F6                   .dbline 154
 01F6           ; if (PORT_ATA_DATA2_IN & 0x04) wordin |= 0x0200;
 01F6 9A9B              sbis 0x13,2
 01F8 01C0              rjmp L83
 01FA                   .dbline 154
 01FA 5260              ori R21,2
 01FC           L83:
 01FC                   .dbline 155
 01FC           ; if (PORT_ATA_DATA2_IN & 0x08) wordin |= 0x0040;
 01FC 9B9B              sbis 0x13,3
 01FE 01C0              rjmp L85
 0200                   .dbline 155
 0200 4064              ori R20,64
 0202           L85:
 0202                   .dbline 156
 0202           ; if (PORT_ATA_DATA2_IN & 0x10) wordin |= 0x0400;
 0202 9C9B              sbis 0x13,4
 0204 01C0              rjmp L87
 0206                   .dbline 156
 0206 5460              ori R21,4
 0208           L87:
 0208                   .dbline 157
 0208           ; if (PORT_ATA_DATA2_IN & 0x20) wordin |= 0x0020;
 0208 9D9B              sbis 0x13,5
 020A 01C0              rjmp L89
 020C                   .dbline 157
 020C 4062              ori R20,32
 020E           L89:
 020E                   .dbline 158
 020E           ; if (PORT_ATA_DATA2_IN & 0x40) wordin |= 0x0800;
 020E 9E9B              sbis 0x13,6
 0210 01C0              rjmp L91
 0212                   .dbline 158
 0212 5860              ori R21,8
 0214           L91:
 0214                   .dbline 159
 0214           ; if (PORT_ATA_DATA2_IN & 0x80) wordin |= 0x0010;
 0214 9F9B              sbis 0x13,7
 0216 01C0              rjmp L93
 0218                   .dbline 159
 0218 4061              ori R20,16
 021A           L93:
 021A                   .dbline 161
 021A           ; 
 021A           ; PORT_ATA_IO_CNTL |= ATA_IOR;
 021A 80916200          lds R24,98
 021E 8064              ori R24,64
 0220 80936200          sts 98,R24
 0224                   .dbline 162
 0224           ; return wordin;
 0224 8A01              movw R16,R20
 0226                   .dbline -2
 0226           L62:
 0226 0E940000          xcall pop_gset2
 022A                   .dbline 0 ; func end
 022A 0895              ret
 022C                   .dbsym r wordin 20 i
 022C                   .dbsym r reg 22 c
 022C                   .dbend
 022C                   .dbfunc e ata_read_byte _ata_read_byte fc
 022C           ;            reg -> R20
                        .even
 022C           _ata_read_byte::
 022C 0E940000          xcall push_gset1
 0230 402F              mov R20,R16
 0232                   .dbline -1
 0232                   .dbline 172
 0232           ; }   
 0232           ; 
 0232           ; //******************************************************************
 0232           ; //*   READ BYTE FROM ATA DEVICE
 0232           ; //*  
 0232           ; //*   
 0232           ; //*
 0232           ; //******************************************************************                                                                                                                                                                                                                           
 0232           ; unsigned char ata_read_byte(unsigned char reg)
 0232           ; {
 0232                   .dbline 173
 0232           ; return (unsigned char)(ata_read_word(reg) & 0x00ff);
 0232 042F              mov R16,R20
 0234 AEDF              xcall _ata_read_word
 0236 1070              andi R17,0
 0238                   .dbline -2
 0238           L95:
 0238 0E940000          xcall pop_gset1
 023C                   .dbline 0 ; func end
 023C 0895              ret
 023E                   .dbsym r reg 20 c
 023E                   .dbend
 023E                   .dbfunc e ata_rdy _ata_rdy fc
                        .even
 023E           _ata_rdy::
 023E                   .dbline -1
 023E                   .dbline 182
 023E           ; }     
 023E           ; 
 023E           ; //******************************************************************
 023E           ; //*   CHECK ATA READY BIT 
 023E           ; //*   Checks READY status bit.
 023E           ; //*   Returns 1 if device is ready.
 023E           ; //****************************************************************** 
 023E           ; unsigned char ata_rdy(void)
 023E           ; {
 023E                   .dbline 183
 023E           ; if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_RDY) return 1;
 023E 0DEF              ldi R16,253
 0240 F5DF              xcall _ata_read_byte
 0242 06FF              sbrs R16,6
 0244 02C0              rjmp L97
 0246                   .dbline 183
 0246 01E0              ldi R16,1
 0248 01C0              xjmp L96
 024A           L97:
 024A                   .dbline 184
 024A           ; else return 0;
 024A 0027              clr R16
 024C                   .dbline -2
 024C           L96:
 024C                   .dbline 0 ; func end
 024C 0895              ret
 024E                   .dbend
 024E                   .dbfunc e ata_bsy _ata_bsy fc
                        .even
 024E           _ata_bsy::
 024E                   .dbline -1
 024E                   .dbline 193
 024E           ; }
 024E           ; 
 024E           ; //******************************************************************
 024E           ; //*   CHECK ATA BUSY BIT 
 024E           ; //*   Checks READY status bit.
 024E           ; //*   Returns 1 if device is busy.
 024E           ; //****************************************************************** 
 024E           ; unsigned char ata_bsy(void)
 024E           ; {
 024E                   .dbline 194
 024E           ; if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_BSY) return 1;
 024E 0DEF              ldi R16,253
 0250 EDDF              xcall _ata_read_byte
 0252 07FF              sbrs R16,7
 0254 02C0              rjmp L100
 0256                   .dbline 194
 0256 01E0              ldi R16,1
 0258 01C0              xjmp L99
 025A           L100:
 025A                   .dbline 195
 025A           ; else return 0;
 025A 0027              clr R16
 025C                   .dbline -2
 025C           L99:
 025C                   .dbline 0 ; func end
 025C 0895              ret
 025E                   .dbend
 025E                   .dbfunc e ata_drq _ata_drq fc
                        .even
 025E           _ata_drq::

⌨️ 快捷键说明

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