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

📄 ata.lis

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

⌨️ 快捷键说明

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