📄 mp3play.lst
字号:
2D99 DFCA RCALL _USART_Transmit
2D9A 940E7CD3 CALL pop_gset2
2D9C 9508 RET
_Print_int:
temp --> R20
data --> R22
2D9D 940E7CF6 CALL push_gset2
2D9F 01B8 MOVW R22,R16
(0044) }
(0045) void Print_int(unsigned int data)
(0046) {
(0047) unsigned char temp;
(0048) temp = data >> 8;
2DA0 01AB MOVW R20,R22
2DA1 2F45 MOV R20,R21
2DA2 2755 CLR R21
(0049) Print_val(temp);
2DA3 2F04 MOV R16,R20
2DA4 DFD6 RCALL _Print_val
(0050) temp = data;
2DA5 2F46 MOV R20,R22
(0051) Print_val(temp);
2DA6 2F04 MOV R16,R20
2DA7 DFD3 RCALL _Print_val
2DA8 940E7CD3 CALL pop_gset2
2DAA 9508 RET
_Print_size:
data --> R22
temp --> R20
ii --> R20
2DAB 940E7CF6 CALL push_gset2
2DAD 01A8 MOVW R20,R16
(0052) }
(0053)
(0054) void Print_size(unsigned int ii)
(0055) {
(0056) unsigned char temp;
(0057) unsigned int data;
(0058) data = ii;
2DAE 01BA MOVW R22,R20
(0059) temp = data/10000;
2DAF E120 LDI R18,0x10
2DB0 E237 LDI R19,0x27
2DB1 018B MOVW R16,R22
2DB2 940E7BF0 CALL div16u
(0060) USART_Transmit(temp+'0');
2DB4 5D00 SUBI R16,0xD0
2DB5 DFAE RCALL _USART_Transmit
(0061)
(0062) data %= 10000;
2DB6 E120 LDI R18,0x10
2DB7 E237 LDI R19,0x27
2DB8 018B MOVW R16,R22
2DB9 940E7BEE CALL mod16u
2DBB 01B8 MOVW R22,R16
(0063) temp = data/1000;
2DBC EE28 LDI R18,0xE8
2DBD E033 LDI R19,3
2DBE 940E7BF0 CALL div16u
(0064) USART_Transmit(temp+'0');
2DC0 5D00 SUBI R16,0xD0
2DC1 DFA2 RCALL _USART_Transmit
(0065)
(0066) data %= 1000;
2DC2 EE28 LDI R18,0xE8
2DC3 E033 LDI R19,3
2DC4 018B MOVW R16,R22
2DC5 940E7BEE CALL mod16u
2DC7 01B8 MOVW R22,R16
(0067) temp = data/100;
2DC8 E624 LDI R18,0x64
2DC9 E030 LDI R19,0
2DCA 940E7BF0 CALL div16u
(0068) USART_Transmit(temp+'0');
2DCC 5D00 SUBI R16,0xD0
2DCD DF96 RCALL _USART_Transmit
(0069)
(0070) data %= 100;
2DCE E624 LDI R18,0x64
2DCF E030 LDI R19,0
2DD0 018B MOVW R16,R22
2DD1 940E7BEE CALL mod16u
2DD3 01B8 MOVW R22,R16
(0071) temp = data/10;
2DD4 E02A LDI R18,0xA
2DD5 E030 LDI R19,0
2DD6 940E7BF0 CALL div16u
(0072) USART_Transmit(temp+'0');
2DD8 5D00 SUBI R16,0xD0
2DD9 DF8A RCALL _USART_Transmit
(0073)
(0074) temp = data%10;
2DDA E02A LDI R18,0xA
2DDB E030 LDI R19,0
2DDC 018B MOVW R16,R22
2DDD 940E7BEE CALL mod16u
2DDF 2F40 MOV R20,R16
(0075) USART_Transmit(temp+'0');
2DE0 5D00 SUBI R16,0xD0
2DE1 DF82 RCALL _USART_Transmit
2DE2 940E7CD3 CALL pop_gset2
2DE4 9508 RET
FILE: E:\software\MP3程序\Play\..\Ch375b\CH375HFB.H
(0001) /* 2004.06.05, 2004.09.20, 2004.10.22, 2004.11.20, 2004.12.12, 2004.12.28, 2005.01.04, 2005.01.12, 2005.01.26, 2005.03.01, 2005.07.29, 2005.12.28
(0002) ****************************************
(0003) ** Copyright (C) W.ch 1999-2005 **
(0004) ** Web: http://www.winchiphead.com **
(0005) ****************************************
(0006) ** USB Host File Interface for CH375 **
(0007) ** TC2.0@PC, ICCAVR_6.31@AVR **
(0008) ****************************************
(0009) */
(0010) /* CH375 主机文件系统接口 V2.9 */
(0011) /* 支持: FAT12/FAT16/FAT32 */
(0012) /* AVR单片机, 查询方式或者中断方式 */
(0013)
(0014) #ifndef __CH375HF_H__
(0015) #define __CH375HF_H__
(0016)
(0017) #define CH375_LIB_VER 0x29
(0018)
(0019) #ifdef __cplusplus
(0020) extern "C" {
(0021) #endif
(0022)
(0023) /* FILE: CH375INC.H */
(0024)
(0025) /* ********************************************************************************************************************* */
(0026) /* 硬件特性 */
(0027)
(0028) #define CH375_MAX_DATA_LEN 0x40 /* 最大数据包的长度, 内部缓冲区的长度 */
(0029)
(0030) /* ********************************************************************************************************************* */
(0031) /* 命令代码 */
(0032)
(0033) #define CMD_RESET_ALL 0x05 /* 执行硬件复位 */
(0034)
(0035) #define CMD_CHECK_EXIST 0x06 /* 测试工作状态 */
(0036) /* 输入: 任意数据 */
(0037) /* 输出: 输入数据的按位取反 */
(0038)
(0039) #define CMD_SET_USB_ID 0x12 /* 设备方式: 设置USB厂商VID和产品PID */
(0040) /* 输入: 厂商ID低字节, 厂商ID高字节, 产品ID低字节, 产品ID高字节 */
(0041)
(0042) #define CMD_SET_USB_ADDR 0x13 /* 设置USB地址 */
(0043) /* 输入: 地址值 */
(0044)
(0045) #define CMD_SET_USB_MODE 0x15 /* 设置USB工作模式 */
(0046) /* 输入: 模式代码 */
(0047) /* 00H=未启用的设备方式, 01H=已启用的设备方式并且使用外部固件模式, 02H=已启用的设备方式并且使用内置固件模式, 03H=已启用的设备方式并且使用中断端点和内置固件模式 */
(0048) /* 04H=未启用的主机方式, 05H=已启用的主机方式, 06H=已启用的主机方式并且自动产生SOF包, 07H=已启用的主机方式并且复位USB总线 */
(0049) /* 输出: 操作状态( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值说明操作未完成 ) */
(0050)
(0051) #define CMD_SET_ENDP2 0x18 /* 设备方式: 设置USB端点0的接收器 */
(0052) /* 输入: 工作方式 */
(0053) /* 位7为1则位6为同步触发位, 否则同步触发位不变 */
(0054) /* 位3~位0为事务响应方式: 0000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
(0055)
(0056) #define CMD_SET_ENDP3 0x19 /* 设备方式: 设置USB端点0的发送器 */
(0057) /* 输入: 工作方式 */
(0058) /* 位7为1则位6为同步触发位, 否则同步触发位不变 */
(0059) /* 位3~位0为事务响应方式: 0000~1000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
(0060)
(0061) #define CMD_SET_ENDP4 0x1A /* 设备方式: 设置USB端点1的接收器 */
(0062) /* 输入: 工作方式 */
(0063) /* 位7为1则位6为同步触发位, 否则同步触发位不变 */
(0064) /* 位3~位0为事务响应方式: 0000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
(0065)
(0066) #define CMD_SET_ENDP5 0x1B /* 设备方式: 设置USB端点1的发送器 */
(0067) /* 输入: 工作方式 */
(0068) /* 位7为1则位6为同步触发位, 否则同步触发位不变 */
(0069) /* 位3~位0为事务响应方式: 0000~1000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
(0070)
(0071) #define CMD_SET_ENDP6 0x1C /* 设置USB端点2/主机端点的接收器 */
(0072) /* 输入: 工作方式 */
(0073) /* 位7为1则位6为同步触发位, 否则同步触发位不变 */
(0074) /* 位3~位0为事务响应方式: 0000-就绪ACK, 1101-就绪但不返回ACK, 1110-正忙NAK, 1111-错误STALL */
(0075)
(0076) #define CMD_SET_ENDP7 0x1D /* 设置USB端点2/主机端点的发送器 */
(0077) /* 输入: 工作方式 */
(0078) /* 位7为1则位6为同步触发位, 否则同步触发位不变 */
(0079) /* 位3~位0为事务响应方式: 0000-就绪ACK, 1101-就绪但无须应答, 1110-正忙NAK, 1111-错误STALL */
(0080)
(0081) #define CMD_GET_TOGGLE 0x0A /* 获取OUT事务的同步状态 */
(0082) /* 输入: 数据1AH */
(0083) /* 输出: 同步状态 */
(0084) /* 位4为1则OUT事务同步, 否则OUT事务不同步 */
(0085)
(0086) #define CMD_GET_STATUS 0x22 /* 获取中断状态并取消中断请求 */
(0087) /* 输出: 中断状态 */
(0088)
(0089) #define CMD_UNLOCK_USB 0x23 /* 设备方式: 释放当前USB缓冲区 */
(0090)
(0091) #define CMD_RD_USB_DATA 0x28 /* 从当前USB中断的端点缓冲区读取数据块, 并释放缓冲区 */
(0092) /* 输出: 长度, 数据流 */
(0093)
(0094) #define CMD_WR_USB_DATA3 0x29 /* 设备方式: 向USB端点0的发送缓冲区写入数据块 */
(0095) /* 输入: 长度, 数据流 */
(0096)
(0097) #define CMD_WR_USB_DATA5 0x2A /* 设备方式: 向USB端点1的发送缓冲区写入数据块 */
(0098) /* 输入: 长度, 数据流 */
(0099)
(0100) #define CMD_WR_USB_DATA7 0x2B /* 向USB端点2的发送缓冲区写入数据块 */
(0101) /* 输入: 长度, 数据流 */
(0102)
(0103) /* ************************************************************************** */
(0104) /* 以下命令用于USB主机方式, 只有CH375支持 */
(0105)
(0106) #define CMD_SET_BAUDRATE 0x02 /* 串口方式: 设置串口通讯波特率 */
(0107) /* 输入: 波特率分频系数, 波特率分频常数 */
(0108) /* 输出: 操作状态( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值说明操作未完成 ) */
(0109)
(0110) #define CMD_ABORT_NAK 0x17 /* 主机方式: 放弃当前NAK的重试 */
(0111)
(0112) #define CMD_SET_RETRY 0x0B /* 主机方式: 设置USB事务操作的重试次数 */
(0113) /* 输入: 数据25H, 重试次数 */
(0114) /* 位7为1则收到NAK时无限重试, 位3~位0为超时后的重试次数 */
(0115)
(0116) #define CMD_ISSUE_TOKEN 0x4F /* 主机方式: 发出令牌, 执行事务 */
(0117) /* 输入: 事务属性 */
(0118) /* 低4位是令牌, 高4位是端点号 */
(0119) /* 输出中断 */
(0120)
(0121) #define CMD_CLR_STALL 0x41 /* 主机方式: 控制传输-清除端点错误 */
(0122) /* 输入: 端点号 */
(0123) /* 输出中断 */
(0124)
(0125) #define CMD_SET_ADDRESS 0x45 /* 主机方式: 控制传输-设置USB地址 */
(0126) /* 输入: 地址值 */
(0127) /* 输出中断 */
(0128)
(0129) #define CMD_GET_DESCR 0x46 /* 主机方式: 控制传输-获取描述符 */
(0130) /* 输入: 描述符类型 */
(0131) /* 输出中断 */
(0132)
(0133) #define CMD_SET_CONFIG 0x49 /* 主机方式: 控制传输-设置USB配置 */
(0134) /* 输入: 配置值 */
(0135) /* 输出中断 */
(0136)
(0137) #define CMD_DISK_INIT 0x51 /* 主机方式: 初始化USB存储器 */
(0138) /* 输出中断 */
(0139)
(0140) #define CMD_DISK_RESET 0x52 /* 主机方式: 复位USB存储器 */
(0141) /* 输出中断 */
(0142)
(0143) #define CMD_DISK_SIZE 0x53 /* 主机方式: 获取USB存储器的容量 */
(0144) /* 输出中断 */
(0145)
(0146) #define CMD_DISK_READ 0x54 /* 主机方式: 从USB存储器读数据块(以扇区512字节为单位) */
(0147) /* 输入: LBA扇区地址(总长度32位, 低字节在前), 扇区数(01H~FFH) */
(0148) /* 输出中断 */
(0149)
(0150) #define CMD_DISK_RD_GO 0x55 /* 主机方式: 继续执行USB存储器的读操作 */
(0151) /* 输出中断 */
(0152)
(0153) #define CMD_DISK_WRITE 0x56 /* 主机方式: 向USB存储器写数据块(以扇区512字节为单位) */
(0154) /* 输入: LBA扇区地址(总长度32位, 低字节在前), 扇区数(01H~FFH) */
(0155) /* 输出中断 */
(0156)
(0157) #define CMD_DISK_WR_GO 0x57 /* 主机方式: 继续执行USB存储器的写操作 */
(0158) /* 输出中断 */
(0159)
(0160) /* ************************************************************************** */
(0161) /* 以下新增的V2.0命令码, 仅CH372A/CH375A支持 */
(0162)
(0163) #define CMD_GET_IC_VER 0x01 /* 获取芯片及固件版本 */
(0164) /* 输出: 版本号( 位7为1, 位6为0, 位5~位0为版本号 ) */
(0165) /* CH375返回无效值为5FH, CH375A返回版本号的值为0A2H */
(0166)
(0167) #define CMD_ENTER_SLEEP 0x03 /* 进入睡眠状态 */
(0168)
(0169) #define CMD_RD_USB_DATA0 0x27 /* 从当前USB中断的端点缓冲区读取数据块 */
(0170) /* 输出: 长度, 数据流 */
(0171)
(0172) #define CMD_DELAY_100US 0x0F /* 并口方式: 延时100uS */
(0173) /* 输出: 延时期间输出0, 延时结束输出非0 */
(0174)
(0175) #define CMD_CHK_SUSPEND 0x0B /* 设备方式: 设置检查USB总线挂起状态的方式 */
(0176) /* 输入: 数据10H, 检查方式 */
(0177) /* 00H=不检查USB挂起, 04H=以50mS为间隔检查USB挂起, 05H=以10mS为间隔检查USB挂起 */
(0178)
(0179) #define CMD_SET_SYS_FREQ 0x04 /* 设置系统工作频率 */
(0180) /* 输入: 频率 */
(0181) /* 00H=12MHz, 01H=1.5MHz */
(0182)
(0183) /* ************************************************************************** */
(0184) /* 以下改进的V2.0命令码, 用于USB主机方式, 仅CH375A支持 */
(0185)
(0186) /*#define CMD_SET_RETRY 0x0B*/ /* 主机方式: 设置USB事务操作的重试次数 */
(0187) /* 输入: 数据25H, 重试次数 */
(0188) /* 位7为0则收到NAK时不重试, 位7为1位6为0则收到NAK时无限重试, 位7为1位6为1则收到NAK时重试200mS, 位5~位0为超时后的重试次数 */
(0189)
(0190) /* ************************************************************************** */
(0191) /* 以下新增的V2.0命令码, 用于USB主机方式, 仅CH375A支持 */
(0192)
(0193) #define CMD_TEST_CONNECT 0x16 /* 主机方式: 检查USB设备连接状态 */
(0194) /* 输出: 状态( USB_INT_CONNECT或USB_INT_DISCONNECT, 其它值说明操作未完成 ) */
(0195)
(0196) #define CMD_AUTO_SETUP 0x4D /* 主机方式: 自动配置USB设备 */
(0197) /* 输出中断 */
(0198)
(0199) #define CMD_ISSUE_TKN_X 0x4E /* 主机方式: 发出同步令牌, 执行事务 */
(0200) /* 输入: 同步标志, 事务属性 */
(0201) /* 同步标志的位7为主机端点IN的同步触发位, 位6为主机端点OUT的同步触发位, 位5~位0必须为0 */
(0202) /* 事务属性的低4位是令牌, 高4位是端点号 */
(0203) /* 输出中断 */
(0204)
(0205) #define CMD_SET_DISK_LUN 0x0B /* 主机方式: 设置USB存储器的当前逻辑单元号 */
(0206) /* 输入: 数据34H, 新的当前逻辑单元号(00H-0FH) */
(0207)
(0208) #define CMD_DISK_BOC_CMD 0x50 /* 主机方式: 对USB存储器执行BulkOnly传输协议的命令 */
(0209) /* 输出中断 */
(0210)
(0211) #define CMD_DISK_INQUIRY 0x58 /* 主机方式: 查询USB存储器特性 */
(0212) /* 输出中断 */
(0213)
(0214) #define CMD_DISK_READY 0x59 /* 主机方式: 检查USB存储器就绪 */
(0215) /* 输出中断 */
(0216)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -