单片机+CH375+VS1003制作MP3原理图+程序(3)

1970-01-01 08:00

#define LED_OUT_INACT( ) */

/* 延时2微秒,不精确 */ void { }

/* 延时1微秒,不精确 */ void { }

/* 延时100毫秒,不精确 */ void { }

/* 基本操作 */

unsigned char i, j, c;

mDelay100mS( ) unsigned char i; for ( i = 1; i != 0; i -- );

delay1us( ) unsigned char i; for ( i = 2; i != 0; i -- );

delay2us( )

{ P1_4 = 1; } /* P1.4 低电平驱动LED显示

for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3;

void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ }

void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的数据端口

delay2us();

CH375_CMD_PORT=cmd; delay2us();

写入数据,周期不小于1.5uS,如果单片机较快则延时 */ }

unsigned char CH375_RD_DAT_PORT() { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ }

/* 等待CH375中断并获取状态 */

unsigned char mWaitInterrupt() { /* 主机端等待操作完成, 返回操作状态 */

while( CH375_INT_WIRE ); /* 查询等待CH375操作完成中断(INT#低电delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ return( CH375_DAT_PORT ); CH375_DAT_PORT=dat;

delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */

平) */

CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断,

获取中断状态 */

return( CH375_RD_DAT_PORT( ) );

/* c = CH375_RD_DAT_PORT( ); 返回中断状态 */

/* if ( c == USB_INT_DISCONNECT ) ?; 检测到USB设备断开事件 */ /* else if ( c == USB_INT_CONNECT ) ?; 检测到USB设备连接事件 */ }

/* 设置CH375为USB主机方式 */ unsigned char mCH375Init( ) {

unsigned char i;

#ifdef TEST_CH375_PORT

unsigned char c;

CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试工作状态 */ CH375_WR_DAT_PORT( 0x55 ); /* 测试数据 */

c = CH375_RD_DAT_PORT( ); /* 返回数据应该是测试数据取反 */ if ( c != 0xaa ) { /* CH375出错 */

for ( i = 100; i != 0; i -- ) { /* 强制数据同步 */

CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* CH375执行

硬件复位 */

}

}

mDelay100mS( ); /* 延时至少30mS */

c = CH375_RD_DAT_PORT( ); /* 延时 */

#end if

CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 设置USB工作

模式 */

CH375_WR_DAT_PORT( 6 ); /* 模式代码,自动检测USB设备连接 */ for ( i = 0xff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */

if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /*

操作成功 */

if ( i != 0 ) return( 0 ); /* 操作成功 */

else return( 0xff ); /* CH375出错,例如芯片型号错或者处于串口方式或者

不支持 */ }

/* 初始化磁盘 */

unsigned char mInitDisk( ) {

unsigned char mIntStatus;

CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断,

获取中断状态 */

mIntStatus = CH375_RD_DAT_PORT( );

if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus ); /* USB

设备断开 */

CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存储器 */

*/

mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */

if ( mIntStatus != USB_INT_SUCCESS ) return( mIntStatus ); /* 出现错误

CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容

量 */

mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus != USB_INT_SUCCESS ) { /* 出错重试 */

mDelay100mS( );

CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器

的容量 */ */

/* 可以由CMD_RD_USB_DATA命令将容量数据读出 */ }

/* 从U盘读取多个扇区的数据块到缓冲区 */

unsigned char mReadSector( unsigned long iLbaStart, unsigned char iSectorCount )

/* iLbaStart 是准备读取的线性起始扇区号, iSectorCount 是准备读取的扇区数 */ {

unsigned char mIntStatus; unsigned char *mBufferPoint; unsigned int mBlockCount; unsigned char mLength;

CH375_WR_CMD_PORT( CMD_DISK_READ ); /* 从USB存储器读数return( 0 ); /* U盘已经成功初始化 */ }

if ( mIntStatus != USB_INT_SUCCESS ) return( mIntStatus ); /* 出现错误

mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */

据块 */

CH375_WR_DAT_PORT( (unsigned char)iLbaStart ); /* LBA的最低8位

*/

CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 8 ) ); CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 16 ) );

CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 24 ) ); /* LBA的

最高8位 */

CH375_WR_DAT_PORT( iSectorCount ); /* 扇区数 */ mBufferPoint = DATA_BUFFER; /* 指向缓冲区起始地址 */ for ( mBlockCount = iSectorCount * CH375_BLK_PER_SEC;

mBlockCount != 0; mBlockCount -- ) /* 数据块计数 */

{

mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus == USB_INT_DISK_READ )

/* USB存储器读数据块,

请求数据读出 */

{

CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 从CH375

缓冲区读取数据块 */

mLength = CH375_RD_DAT_PORT( ); /* 后续数据的长度 */ while ( mLength ) /* 根据长度读取数据 */

{

SBUF = CH375_RD_DAT_PORT( ); while(!TI) ; TI = 0 ;

//*mBufferPoint = CH375_RD_DAT_PORT( ); /* 读出数据并

保存 */

}

CH375_WR_CMD_PORT( CMD_DISK_RD_GO ); /* 继续执行

//mBufferPoint ++; mLength --; delay2us( );

USB存储器的读操作 */

}


单片机+CH375+VS1003制作MP3原理图+程序(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013年获部级及以上科技奖励汇总表-河海大学科技处

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: