📄 ch375ev0.lis
字号:
00A8 ; resh = (resh >> 1) & 0x01;
00A8 6695 lsr R22
00AA 6170 andi R22,1
00AC .dbline 116
00AC ; return ((resh << 8) | resl);
00AC 162F mov R17,R22
00AE 042F mov R16,R20
00B0 02C0 xjmp L27
00B2 X2:
00B2 .dbline 117
00B2 ; mDelaymS( 6 ); /* 延时100毫秒 */
00B2 06E0 ldi R16,6
00B4 B4DF xcall _mDelaymS
00B6 .dbline -2
00B6 L27:
00B6 0E940000 xcall pop_gset2
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbsym r status 20 c
00BC .dbsym r resl 20 c
00BC .dbsym r resh 22 c
00BC .dbend
00BC .dbfunc e mWaitInterrupt _mWaitInterrupt fc
.even
00BC _mWaitInterrupt::
00BC .dbline -1
00BC .dbline 123
00BC ; //return( CH375_DAT_PORT );
00BC ; }
00BC ;
00BC ; /* 等待CH375中断并获取状态 */
00BC ; unsigned char mWaitInterrupt()
00BC ; { /* 主机端等待操作完成, 返回操作状态 */
00BC 0EC0 xjmp L30
00BE L29:
00BE .dbline 125
00BE .dbline 126
00BE .dbline 126
00BE 80916500 lds R24,101
00C2 8F7E andi R24,239
00C4 80936500 sts 101,R24
00C8 .dbline 126
00C8 .dbline 126
00C8 .dbline 127
00C8 00E5 ldi R16,80
00CA A9DF xcall _mDelaymS
00CC .dbline 128
00CC .dbline 128
00CC 80916500 lds R24,101
00D0 8061 ori R24,16
00D2 80936500 sts 101,R24
00D6 .dbline 128
00D6 .dbline 128
00D6 .dbline 129
00D6 00E5 ldi R16,80
00D8 A2DF xcall _mDelaymS
00DA .dbline 130
00DA L30:
00DA .dbline 124
00DA ; while( CH375_INT_WIRE ) /* 查询等待CH375操作完成中断(INT#低电平) */
00DA 8499 sbic 0x10,4
00DC F0CF rjmp L29
00DE .dbline 131
00DE ; {
00DE ; LED_OUT_ACT( ); /* LED闪烁 */
00DE ; mDelaymS( 80 );
00DE ; LED_OUT_INACT( );
00DE ; mDelaymS( 80 );
00DE ; }
00DE ; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */
00DE 02E2 ldi R16,34
00E0 B1DF xcall _CH375_WR_CMD_PORT
00E2 .dbline 132
00E2 ; return( CH375_RD_DAT_PORT( ) );
00E2 D9DF xcall _CH375_RD_DAT_PORT
00E4 .dbline -2
00E4 L28:
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbend
00E6 .dbfunc e mCH375Init _mCH375Init fc
00E6 ; i -> R20
.even
00E6 _mCH375Init::
00E6 0E940000 xcall push_gset1
00EA 2297 sbiw R28,2
00EC .dbline -1
00EC .dbline 140
00EC ; /* c = CH375_RD_DAT_PORT( ); 返回中断状态 */
00EC ; /* if ( c == USB_INT_DISCONNECT ) ?; 检测到USB设备断开事件 */
00EC ; /* else if ( c == USB_INT_CONNECT ) ?; 检测到USB设备连接事件 */
00EC ; }
00EC ;
00EC ; /* 设置CH375为USB主机方式 */
00EC ; unsigned char mCH375Init( )
00EC ; {
00EC .dbline 163
00EC ; unsigned char i;
00EC ; #ifdef TEST_CH375_PORT
00EC ; unsigned char c;
00EC ; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试工作状态 */
00EC ; CH375_WR_DAT_PORT( 0x55 ); /* 测试数据 */
00EC ; c = CH375_RD_DAT_PORT( ); /* 返回数据应该是测试数据取反 */
00EC ; if ( c != 0xaa ) { /* CH375出错 */
00EC ; for ( i = 100; i != 0; i -- ) { /* 强制数据同步 */
00EC ; CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* CH375执行硬件复位 */
00EC ; c = CH375_RD_DAT_PORT( ); /* 延时 */
00EC ; ShowText(10,21,"初始化错误!");
00EC ; while ( 1 )
00EC ; {
00EC ; LED_OUT_ACT( ); //LED闪烁
00EC ; mDelaymS( 80 );
00EC ; LED_OUT_INACT( );
00EC ; mDelaymS( 80 );
00EC ; }
00EC ; }
00EC ; mDelaymS( 50 ); /* 延时至少30mS */
00EC ; }
00EC ; #endif
00EC ; CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 设置USB工作模式 */
00EC 05E1 ldi R16,21
00EE AADF xcall _CH375_WR_CMD_PORT
00F0 .dbline 164
00F0 ; CH375_WR_DAT_PORT( 6 ); /* 模式代码,自动检测USB设备连接 */
00F0 06E0 ldi R16,6
00F2 BDDF xcall _CH375_WR_DAT_PORT
00F4 .dbline 165
00F4 ; for ( i = 0xff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */
00F4 4FEF ldi R20,255
00F6 05C0 xjmp L36
00F8 L33:
00F8 .dbline 166
00F8 ; if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* 操作成功 */
00F8 CEDF xcall _CH375_RD_DAT_PORT
00FA 0135 cpi R16,81
00FC 09F4 brne L37
00FE .dbline 166
00FE 03C0 xjmp L35
0100 L37:
0100 L34:
0100 .dbline 165
0100 4A95 dec R20
0102 L36:
0102 .dbline 165
0102 4423 tst R20
0104 C9F7 brne L33
0106 L35:
0106 .dbline 167
0106 ; if ( i != 0 )
0106 4423 tst R20
0108 11F0 breq L39
010A .dbline 168
010A ; { return( 0 ); } /* 操作成功 */
010A .dbline 168
010A 0027 clr R16
010C 1BC0 xjmp L32
010E L39:
010E .dbline 170
010E ; else
010E ; {
010E .dbline 171
010E ; ShowText(10,21,"CH375出错!");
010E 80E0 ldi R24,<L41
0110 90E0 ldi R25,>L41
0112 9983 std y+1,R25
0114 8883 std y+0,R24
0116 25E1 ldi R18,21
0118 30E0 ldi R19,0
011A 0AE0 ldi R16,10
011C 10E0 ldi R17,0
011E 0E940000 xcall _ShowText
0122 0EC0 xjmp L43
0124 L42:
0124 .dbline 173
0124 .dbline 174
0124 .dbline 174
0124 80916500 lds R24,101
0128 8F7E andi R24,239
012A 80936500 sts 101,R24
012E .dbline 174
012E .dbline 174
012E .dbline 175
012E 00E5 ldi R16,80
0130 76DF xcall _mDelaymS
0132 .dbline 176
0132 .dbline 176
0132 80916500 lds R24,101
0136 8061 ori R24,16
0138 80936500 sts 101,R24
013C .dbline 176
013C .dbline 176
013C .dbline 177
013C 00E5 ldi R16,80
013E 6FDF xcall _mDelaymS
0140 .dbline 178
0140 L43:
0140 .dbline 172
0140 ; while ( 1 )
0140 F1CF xjmp L42
0142 X3:
0142 .dbline 179
0142 ; {
0142 ; LED_OUT_ACT( ); //LED闪烁
0142 ; mDelaymS( 80 );
0142 ; LED_OUT_INACT( );
0142 ; mDelaymS( 80 );
0142 ; }
0142 ; return( 0xff );
0142 0FEF ldi R16,255
0144 .dbline -2
0144 L32:
0144 2296 adiw R28,2
0146 0E940000 xcall pop_gset1
014A .dbline 0 ; func end
014A 0895 ret
014C .dbsym r i 20 c
014C .dbend
014C .dbfunc e mInitDisk _mInitDisk fc
014C ; mIntStatus -> R20
014C ; i -> R20
.even
014C _mInitDisk::
014C 0E940000 xcall push_gset1
0150 2297 sbiw R28,2
0152 .dbline -1
0152 .dbline 185
0152 ; } /* CH375出错,例如芯片型号错或者处于串口方式或者不支持 */
0152 ; }
0152 ;
0152 ; /* 初始化磁盘 */
0152 ; unsigned char mInitDisk( )
0152 ; {
0152 .dbline 187
0152 ; unsigned char mIntStatus, i;
0152 ; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */
0152 02E2 ldi R16,34
0154 77DF xcall _CH375_WR_CMD_PORT
0156 .dbline 188
0156 ; mIntStatus = CH375_RD_DAT_PORT( ); //获取中断状态
0156 9FDF xcall _CH375_RD_DAT_PORT
0158 402F mov R20,R16
015A .dbline 189
015A ; if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus ); /* USB设备断开 */
015A 0631 cpi R16,22
015C 09F4 brne L46
015E .dbline 189
015E 5CC0 xjmp L45
0160 L46:
0160 .dbline 190
0160 ; CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存储器 */
0160 01E5 ldi R16,81
0162 70DF xcall _CH375_WR_CMD_PORT
0164 .dbline 191
0164 ; mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */
0164 ABDF xcall _mWaitInterrupt
0166 402F mov R20,R16
0168 .dbline 192
0168 ; if ( mIntStatus != USB_INT_SUCCESS ) return( mIntStatus ); /* 出现错误 */
0168 0431 cpi R16,20
016A 09F0 breq L48
016C .dbline 192
016C 55C0 xjmp L45
016E L48:
016E .dbline 193
016E ; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */
016E 03E5 ldi R16,83
0170 69DF xcall _CH375_WR_CMD_PORT
0172 .dbline 194
0172 ; mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */
0172 A4DF xcall _mWaitInterrupt
0174 402F mov R20,R16
0176 .dbline 195
0176 ; if ( mIntStatus != USB_INT_SUCCESS )
0176 0431 cpi R16,20
0178 31F0 breq L50
017A .dbline 196
017A ; { /* 出错重试 */
017A .dbline 197
017A ; mDelaymS( 200 );
017A 08EC ldi R16,200
017C 50DF xcall _mDelaymS
017E .dbline 198
017E ; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */
017E 03E5 ldi R16,83
0180 61DF xcall _CH375_WR_CMD_PORT
0182 .dbline 199
0182 ; mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */
0182 9CDF xcall _mWaitInterrupt
0184 402F mov R20,R16
0186 .dbline 200
0186 ; }
0186 L50:
0186 .dbline 201
0186 ; if ( mIntStatus != USB_INT_SUCCESS ) return( mIntStatus ); /* 出现错误 */
0186 4431 cpi R20,20
0188 11F0 breq L52
018A .dbline 201
018A 042F mov R16,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -