?? main.lss
字號:
pFileDir = (P_FAT_DIR_INFO)( pDISK_BASE_BUF + CH375vFdtOffset ); /* 當前FDT的起始地址 */
FileCount = (UINT16)( 0xFFFFFFFF - CH375vFileSize ); /* 當前文件名的枚舉序號,CH375vFileSize初值是0xFFFFFFFF,找到文件名后遞減 */
if ( FileCount < FILE_DATA_BUF_LEN / 12 ) { /* 檢查緩沖區是否足夠存放,假定每個文件名需占用12個字節存放 */
NameBuf = & FILE_DATA_BUF[ FileCount * 12 ]; /* 計算保存當前文件名的緩沖區地址 */
for ( i = 0; i < 11; i ++ ) NameBuf[ i ] = pFileDir -> DIR_Name[ i ]; /* 復制文件名,長度為11個字符,未處理空格 */
if ( pFileDir -> DIR_Attr & ATTR_DIRECTORY ) NameBuf[ i ] = 1; /* 判斷是目錄名 */
NameBuf[ i ] = 0; /* 文件名結束符 */
}
#endif
#endif
}
#endif
#ifdef EXT_BLK_INTERFACE
#if LIB_CFG_FILE_IO == 0 /* 文件讀寫的數據的復制方式為"外部子程序" */
#ifdef LIB_CFG_FILE_IO_DEFAULT /* 如果應用程序中定義該值則使用默認"外部子程序",否則應該自行編寫程序代替 */
unsigned char *current_buffer; /* 保存文件數據讀寫時的緩沖區的當前指針,由應用程序在調用CH375FileReadX和CH375FileWriteX子程序前設置初值 */
void xWriteToExtBuf( UINT8 mLength ) /* 該子程序由CH375的子程序庫調用,用于從CH375讀取文件數據到外部緩沖區,被CH375FileReadX調用 */
{
/* if ( (UINT32)current_buffer + mLength >= (UINT32)&FILE_DATA_BUF + sizeof( FILE_DATA_BUF ) ) return;*/ /* 防止緩沖區溢出 */
if ( mLength ) {
do { /* 根據長度讀取數據,實際上長度總是CH375_MAX_DATA_LEN,也就是64 */
*current_buffer = xReadCH375Data( ); /* 讀出數據并保存,可以用這種方式將文件數據保存到單片機的各種串行存儲器中 */
current_buffer ++;
} while ( -- mLength );
} /* 復制上述數據的總時間不得超過2mS */
else { /* 重試,恢復緩沖區起址,如果將文件數據讀寫的緩沖區的當前指針放在mCmdParam.ReadX.mDataBuffer中則會被自動恢復,無需下面的兩行程序 */
current_buffer += (UINT16)mCmdParam.ReadX.mDataBuffer; /* mDataBuffer中為負值 */
mCmdParam.ReadX.mDataBuffer = 0; /* 為了支持重試,在調用CH375FileReadX之前也應該清0 */
}
}
#ifdef EN_DISK_WRITE
void xReadFromExtBuf( UINT8 mLength ) /* 該子程序由CH375的子程序庫調用,用于從外部緩沖區讀取文件數據到CH375,被CH375FileWriteX調用 */
{
if ( mLength ) {
do { /* 根據長度寫入數據,實際上長度總是CH375_MAX_DATA_LEN,也就是64 */
xWriteCH375Data( *current_buffer ); /* 將數據寫入,可以用這種方式從單片機的各種串行存儲器中取出文件數據 */
current_buffer ++;
} while ( -- mLength );
} /* 復制上述數據的總時間不得超過2mS */
else { /* 重試,恢復緩沖區起址,如果將文件數據讀寫的緩沖區的當前指針放在mCmdParam.WriteX.mDataBuffer中則會被自動恢復,無需下面的兩行程序 */
current_buffer += (UINT16)mCmdParam.WriteX.mDataBuffer; /* mDataBuffer中為負值 */
mCmdParam.WriteX.mDataBuffer = 0; /* 為了支持重試,在調用CH375FileWriteX之前也應該清0 */
}
}
#endif
#endif
#else /* LIB_CFG_FILE_IO != 0,文件讀寫的數據的復制方式不是"外部子程序" */
#ifdef FILE_DATA_BUF_LEN
void xWriteToExtBuf( UINT8 mLength ) /* 不會調用該子程序 */
{
mLength --; /* 該操作無意義,只是避免出現警告信息 */
}
#ifdef EN_DISK_WRITE
void xReadFromExtBuf( UINT8 mLength ) /* 不會調用該子程序 */
{
mLength --; /* 該操作無意義,只是避免出現警告信息 */
}
#endif
#endif
#endif
#endif
UINT8 CH375LibInit( void ) /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */
{
196: cf 93 push r28
198: df 93 push r29
19a: cd b7 in r28, 0x3d ; 61
19c: de b7 in r29, 0x3e ; 62
19e: 22 97 sbiw r28, 0x02 ; 2
1a0: 0f b6 in r0, 0x3f ; 63
1a2: f8 94 cli
1a4: de bf out 0x3e, r29 ; 62
1a6: 0f be out 0x3f, r0 ; 63
1a8: cd bf out 0x3d, r28 ; 61
CH375LibConfig = LIB_CFG_VALUE; /* CH375程序庫配置值 */
1aa: 85 e0 ldi r24, 0x05 ; 5
1ac: 80 93 34 0a sts 0x0A34, r24
if ( CH375GetVer( ) < CH375_LIB_VER ) return( 0xFF ); /* 獲取當前子程序庫的版本號,版本太低則返回錯誤 */
1b0: 0e 94 96 06 call 0xd2c ; 0xd2c <CH375GetVer>
1b4: 85 33 cpi r24, 0x35 ; 53
1b6: 28 f4 brcc .+10 ; 0x1c2 <CH375LibInit+0x2c>
1b8: 2f ef ldi r18, 0xFF ; 255
1ba: 30 e0 ldi r19, 0x00 ; 0
1bc: 3a 83 std Y+2, r19 ; 0x02
1be: 29 83 std Y+1, r18 ; 0x01
1c0: 0c c0 rjmp .+24 ; 0x1da <CH375LibInit+0x44>
#if DISK_BASE_BUF_LEN
pDISK_BASE_BUF = & DISK_BASE_BUF[0]; /* 指向外部RAM的磁盤數據緩沖區 */
1c2: 86 e1 ldi r24, 0x16 ; 22
1c4: 92 e0 ldi r25, 0x02 ; 2
1c6: 90 93 3c 0a sts 0x0A3C, r25
1ca: 80 93 3b 0a sts 0x0A3B, r24
#endif
return( CH375Init( ) ); /* 初始化CH375 */
1ce: 0e 94 6a 07 call 0xed4 ; 0xed4 <CH375Init>
1d2: 28 2f mov r18, r24
1d4: 33 27 eor r19, r19
1d6: 3a 83 std Y+2, r19 ; 0x02
1d8: 29 83 std Y+1, r18 ; 0x01
1da: 89 81 ldd r24, Y+1 ; 0x01
1dc: 9a 81 ldd r25, Y+2 ; 0x02
1de: 22 96 adiw r28, 0x02 ; 2
1e0: 0f b6 in r0, 0x3f ; 63
1e2: f8 94 cli
1e4: de bf out 0x3e, r29 ; 62
1e6: 0f be out 0x3f, r0 ; 63
1e8: cd bf out 0x3d, r28 ; 61
1ea: df 91 pop r29
1ec: cf 91 pop r28
1ee: 08 95 ret
000001f0 <xWriteCH375Cmd>:
#endif
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫命令 */
{
1f0: cf 93 push r28
1f2: df 93 push r29
1f4: cd b7 in r28, 0x3d ; 61
1f6: de b7 in r29, 0x3e ; 62
1f8: a9 97 sbiw r28, 0x29 ; 41
1fa: 0f b6 in r0, 0x3f ; 63
1fc: f8 94 cli
1fe: de bf out 0x3e, r29 ; 62
200: 0f be out 0x3f, r0 ; 63
202: cd bf out 0x3d, r28 ; 61
204: 89 a7 std Y+41, r24 ; 0x29
206: 80 e0 ldi r24, 0x00 ; 0
208: 90 e0 ldi r25, 0x00 ; 0
20a: a0 e8 ldi r26, 0x80 ; 128
20c: bf e3 ldi r27, 0x3F ; 63
20e: 88 a3 std Y+32, r24 ; 0x20
210: 99 a3 std Y+33, r25 ; 0x21
212: aa a3 std Y+34, r26 ; 0x22
214: bb a3 std Y+35, r27 ; 0x23
void
_delay_us(double __us)
{
uint8_t __ticks;
double __tmp = ((F_CPU) / 3e6) * __us;
216: 2a ef ldi r18, 0xFA ; 250
218: 3d ee ldi r19, 0xED ; 237
21a: 4b e6 ldi r20, 0x6B ; 107
21c: 50 e4 ldi r21, 0x40 ; 64
21e: 68 a1 ldd r22, Y+32 ; 0x20
220: 79 a1 ldd r23, Y+33 ; 0x21
222: 8a a1 ldd r24, Y+34 ; 0x22
224: 9b a1 ldd r25, Y+35 ; 0x23
226: 0e 94 48 22 call 0x4490 ; 0x4490 <__mulsf3>
22a: dc 01 movw r26, r24
22c: cb 01 movw r24, r22
22e: 8d a3 std Y+37, r24 ; 0x25
230: 9e a3 std Y+38, r25 ; 0x26
232: af a3 std Y+39, r26 ; 0x27
234: b8 a7 std Y+40, r27 ; 0x28
if (__tmp < 1.0)
236: 20 e0 ldi r18, 0x00 ; 0
238: 30 e0 ldi r19, 0x00 ; 0
23a: 40 e8 ldi r20, 0x80 ; 128
23c: 5f e3 ldi r21, 0x3F ; 63
23e: 6d a1 ldd r22, Y+37 ; 0x25
240: 7e a1 ldd r23, Y+38 ; 0x26
242: 8f a1 ldd r24, Y+39 ; 0x27
244: 98 a5 ldd r25, Y+40 ; 0x28
246: 0e 94 f8 21 call 0x43f0 ; 0x43f0 <__eqsf2>
24a: 88 23 and r24, r24
24c: 0c f0 brlt .+2 ; 0x250 <xWriteCH375Cmd+0x60>
24e: 03 c0 rjmp .+6 ; 0x256 <xWriteCH375Cmd+0x66>
__ticks = 1;
250: 81 e0 ldi r24, 0x01 ; 1
252: 8c a3 std Y+36, r24 ; 0x24
254: 18 c0 rjmp .+48 ; 0x286 <xWriteCH375Cmd+0x96>
else if (__tmp > 255)
256: 20 e0 ldi r18, 0x00 ; 0
258: 30 e0 ldi r19, 0x00 ; 0
25a: 4f e7 ldi r20, 0x7F ; 127
25c: 53 e4 ldi r21, 0x43 ; 67
25e: 6d a1 ldd r22, Y+37 ; 0x25
260: 7e a1 ldd r23, Y+38 ; 0x26
262: 8f a1 ldd r24, Y+39 ; 0x27
264: 98 a5 ldd r25, Y+40 ; 0x28
266: 0e 94 fb 21 call 0x43f6 ; 0x43f6 <__gesf2>
26a: 18 16 cp r1, r24
26c: 0c f0 brlt .+2 ; 0x270 <xWriteCH375Cmd+0x80>
26e: 02 c0 rjmp .+4 ; 0x274 <xWriteCH375Cmd+0x84>
__ticks = 0; /* i.e. 256 */
270: 1c a2 std Y+36, r1 ; 0x24
272: 09 c0 rjmp .+18 ; 0x286 <xWriteCH375Cmd+0x96>
else
__ticks = (uint8_t)__tmp;
274: 6d a1 ldd r22, Y+37 ; 0x25
276: 7e a1 ldd r23, Y+38 ; 0x26
278: 8f a1 ldd r24, Y+39 ; 0x27
27a: 98 a5 ldd r25, Y+40 ; 0x28
27c: 0e 94 dd 21 call 0x43ba ; 0x43ba <__fixsfsi>
280: dc 01 movw r26, r24
282: cb 01 movw r24, r22
284: 8c a3 std Y+36, r24 ; 0x24
286: 8c a1 ldd r24, Y+36 ; 0x24
288: 8f 8f std Y+31, r24 ; 0x1f
28a: 8f 8d ldd r24, Y+31 ; 0x1f
28c: 8a 95 dec r24
28e: f1 f7 brne .-4 ; 0x28c <xWriteCH375Cmd+0x9c>
290: 8f 8f std Y+31, r24 ; 0x1f
292: 80 e0 ldi r24, 0x00 ; 0
294: 90 e0 ldi r25, 0x00 ; 0
296: a0 e8 ldi r26, 0x80 ; 128
298: bf e3 ldi r27, 0x3F ; 63
29a: 8e 8b std Y+22, r24 ; 0x16
29c: 9f 8b std Y+23, r25 ; 0x17
29e: a8 8f std Y+24, r26 ; 0x18
2a0: b9 8f std Y+25, r27 ; 0x19
2a2: 2a ef ldi r18, 0xFA ; 250
2a4: 3d ee ldi r19, 0xED ; 237
2a6: 4b e6 ldi r20, 0x6B ; 107
2a8: 50 e4 ldi r21, 0x40 ; 64
2aa: 6e 89 ldd r22, Y+22 ; 0x16
2ac: 7f 89 ldd r23, Y+23 ; 0x17
2ae: 88 8d ldd r24, Y+24 ; 0x18
2b0: 99 8d ldd r25, Y+25 ; 0x19
2b2: 0e 94 48 22 call 0x4490 ; 0x4490 <__mulsf3>
2b6: dc 01 movw r26, r24
2b8: cb 01 movw r24, r22
2ba: 8b 8f std Y+27, r24 ; 0x1b
2bc: 9c 8f std Y+28, r25 ; 0x1c
2be: ad 8f std Y+29, r26 ; 0x1d
2c0: be 8f std Y+30, r27 ; 0x1e
2c2: 20 e0 ldi r18, 0x00 ; 0
2c4: 30 e0 ldi r19, 0x00 ; 0
2c6: 40 e8 ldi r20, 0x80 ; 128
2c8: 5f e3 ldi r21, 0x3F ; 63
2ca: 6b 8d ldd r22, Y+27 ; 0x1b
2cc: 7c 8d ldd r23, Y+28 ; 0x1c
2ce: 8d 8d ldd r24, Y+29 ; 0x1d
2d0: 9e 8d ldd r25, Y+30 ; 0x1e
2d2: 0e 94 f8 21 call 0x43f0 ; 0x43f0 <__eqsf2>
2d6: 88 23 and r24, r24
2d8: 0c f0 brlt .+2 ; 0x2dc <xWriteCH375Cmd+0xec>
2da: 03 c0 rjmp .+6 ; 0x2e2 <xWriteCH375Cmd+0xf2>
2dc: 81 e0 ldi r24, 0x01 ; 1
2de: 8a 8f std Y+26, r24 ; 0x1a
2e0: 18 c0 rjmp .+48 ; 0x312 <xWriteCH375Cmd+0x122>
2e2: 20 e0 ldi r18, 0x00 ; 0
2e4: 30 e0 ldi r19, 0x00 ; 0
2e6: 4f e7 ldi r20, 0x7F ; 127
2e8: 53 e4 ldi r21, 0x43 ; 67
2ea: 6b 8d ldd r22, Y+27 ; 0x1b
2ec: 7c 8d ldd r23, Y+28 ; 0x1c
2ee: 8d 8d ldd r24, Y+29 ; 0x1d
2f0: 9e 8d ldd r25, Y+30 ; 0x1e
2f2: 0e 94 fb 21 call 0x43f6 ; 0x43f6 <__gesf2>
2f6: 18 16 cp r1, r24
2f8: 0c f0 brlt .+2 ; 0x2fc <xWriteCH375Cmd+0x10c>
2fa: 02 c0 rjmp .+4 ; 0x300 <xWriteCH375Cmd+0x110>
2fc: 1a 8e std Y+26, r1 ; 0x1a
2fe: 09 c0 rjmp .+18 ; 0x312 <xWriteCH375Cmd+0x122>
300: 6b 8d ldd r22, Y+27 ; 0x1b
302: 7c 8d ldd r23, Y+28 ; 0x1c
304: 8d 8d ldd r24, Y+29 ; 0x1d
306: 9e 8d ldd r25, Y+30 ; 0x1e
308: 0e 94 dd 21 call 0x43ba ; 0x43ba <__fixsfsi>
30c: dc 01 movw r26, r24
30e: cb 01 movw r24, r22
310: 8a 8f std Y+26, r24 ; 0x1a
312: 8a 8d ldd r24, Y+26 ; 0x1a
314: 8d 8b std Y+21, r24 ; 0x15
316: 8d 89 ldd r24, Y+21 ; 0x15
318: 8a 95 dec r24
31a: f1 f7 brne .-4 ; 0x318 <xWriteCH375Cmd+0x128>
31c: 8d 8b std Y+21, r24 ; 0x15
mDelay1uS( );
mDelay1uS( ); /* 至少延時1uS */
*(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; //通過并口直接讀寫CH375而非普通I/O模擬
31e: e1 e2 ldi r30, 0x21 ; 33
320: f0 e8 ldi r31, 0x80 ; 128
322: 89 a5 ldd r24, Y+41 ; 0x29
324: 80 83 st Z, r24
326: 80 e0 ldi r24, 0x00 ; 0
328: 90 e0 ldi r25, 0x00 ; 0
32a: a0 e8 ldi r26, 0x80 ; 128
32c: bf e3 ldi r27, 0x3F ; 63
32e: 8c 87 std Y+12, r24 ; 0x0c
330: 9d 87 std Y+13, r25 ; 0x0d
332: ae 87 std Y+14, r26 ; 0x0e
334: bf 87 std Y+15, r27 ; 0x0f
void
_delay_us(double __us)
{
uint8_t __ticks;
double __tmp = ((F_CPU) / 3e6) * __us;
336: 2a ef ldi r18, 0xFA ; 250
338: 3d ee ldi r19, 0xED ; 237
33a: 4b e6 ldi r20, 0x6B ; 107
33c: 50 e4 ldi r21, 0x40 ; 64
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -