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

📄 main.lss

📁 AVR做的打印机控制例子,基于AVR和CH375
💻 LSS
📖 第 1 页 / 共 5 页
字号:
	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 + -