不是汇编啊!
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#include <stdio.h>
#include "string.h"
#include "CH376INC.H"
#include "DEBUG.H"
#define TRUE 1
//#define NULL 0x0000
#define CMD11_CHECK_EXIST 0x0006
#define ERR_USB_UNKNOWN 0x00FA
#define CMD11_SET_USB_MODE 0x0015 //设置USB的工作模式
#define CMD_RET_SUCCESS 0x0051 //命令操作成功
#define USB_INT_SUCCESS 0x0014 //USB事务或者传输操作成功
#define CMD01_GET_STATUS 0x0022
#define CMD0H_DISK_CONNECT 0x0030
#define CMD0H_DISK_MOUNT 0x0031
#define CMD01_GET_IC_VER 0x0001
#define CMD10_SET_FILE_NAME 0x002F
#define CMD0H_FILE_OPEN 0x0032 //打开文件或者目录,或者枚举文件或目录
#define VAR_DISK_STATUS 0x002B //主机文件模式下的磁盘及文件状态 是系统变量的地址
#define DEF_DISK_READ 0x0010 //已经分析磁盘的文件系统并且能够支持 显示主机模式下的磁盘及文件状态
#define CMD11_READ_VAR8 0x000A //读取指定的8位文件系统变量
#define CMD50_WRITE_VAR32 0x000D //设置指定的32位文件系统变量
#define CMD4H_BYTE_LOCATE 0x0039 //主机文件模式:以字节为单位移动当前文件指针
#define CMD0H_FILE_CREATE 0x0034 //主机文件模式:新建文件,如果文件已经存在 那么删除
#define VAR_FILE_SIZE 0x0068 //当前文件的总长度(总长度32位,低字节在前)
#define CMD14_READ_VAR32 0x000C //读取指定的32位文件系统变量
#define ERR_MISS_FILE 0x0042 //指定路径的文件没有找到 可能是文件名称错误
#define CMD2H_BYTE_WRITE 0x003C //主机文件模式:以字节为单位向当前位置写入数据块
#define USB_INT_DISK_WRITE 0x001E //USB存储器请求数据写入
#define CMD01_WR_REQ_DATA 0x002D //向内部指定缓冲区写入请求的数据块
#define CMD0H_BYTE_WR_GO 0x003D //主机文件模式:继续字节写
#define VAR_CURRENT_OFFSET 0x006C //当前位置的指针,当前文件指针,当前读写位置的字节偏移(总长度32位,低字节在前)
#define CMD1H_FILE_CLOSE 0x0036 //主机模式:关闭当前已经打开的文件或者目录
char buf[64];
void delay_ms(Uint16 i);
void delay_us(Uint16 j);
void xWriteCH376Cmd(Uint16 mCmd);
void xWriteCH376Data(UINT8 mData);
void mStopIfError(Uint16 iError);
void CH376SetFileName(char *str);
void CH376WriteVar32(Uint16, Uint32 dat);
void CH376_PORT_INIT(void); //CH376通讯接口初始化
//void CH376_DATA_DIR_IN(void); //设置并口方向为输入
void CH376_DATA_DIR_OUT(void); //设置并口方向为输出 向CH376S输出数据或者命令
UINT32 CH376GetFileSize(void);
Uint16 CH376DiskMount(void);
void Wait376Interrupt(void);
Uint16 mInitCH376Host(void);
UINT8 xReadCH376Data(void);
Uint16 CH376DiskConnect(void);
UINT8 Query376Interrupt(void);
void CH376GetIntStatus(void);
Uint16 CH376SendCmdWaitInt(Uint16 mCmd);
Uint16 CH376FileOpen(char *name);
void CH376ReadVar8(Uint16 var);
Uint16 CH376ByteLocate(Uint32 offset); //以字节为单位移动当前文件指针
Uint16 CH376FileCreate(char *str); //在根目录或者当前目录下新建文件,如果文件已经存在 那么删除
UINT32 CH376ReadVar32(UINT8 var); //读CH376芯片内部的32位变量
void CH376Read32bitDat(void); //从CH376芯片读取32位的数据并结束命令
Uint16 CH376ByteWrite(char *buf,Uint16 ReqCount,char *RealCount); //以字节为单位向当前位置写入数据块
void CH376WriteReqBlock(char *buf); //向内部指定缓冲区写入请求的数据块,返回长度
Uint16 CH376FileClose(Uint16 UpdateSz); //关闭当前已经打开的文件或者目录
void CH376SendCmdDatWaitInt(Uint16 mCmd,Uint16 mDat); //发出命令码和一字节数据后,等待中断
Uint16 add(void);
void main()
{
Uint16 s;
Uint16 hour;
Uint16 adc;
/*初始化系统*/
InitSysCtrl();
/* 关中断 */
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/* 初始化PIE中断矢量表 */
InitPieVectTable();
/* 初始化外设 */
InitPeripherals();
InitGpio();
EINT;
ERTM;
delay_ms(100);
s=mInitCH376Host();
mStopIfError(s);
while(1)
{
while(CH376DiskConnect() != USB_INT_SUCCESS ) //检查U盘是否插入
{
delay_ms(100);
}
delay_ms(200);
/*如果检测到USB设备*/
for(s=0;s<10;s++)
{
delay_ms(50);
if(CH376DiskMount() == USB_INT_SUCCESS)
{
break; //初始化磁盘并测试磁盘是否就绪
}
}
s = CH376FileOpen("/MY_ADC.TXT");
if(s==USB_INT_SUCCESS ) //文件存在并且已经被打开,移动文件指针到尾部以便添加数据
{
s = CH376ByteLocate(0xffffffff); //移到文件的尾部
mStopIfError(s);
}
else if (s==ERR_MISS_FILE) //没有找到文件 必须新建文件
{
s=CH376FileCreate( NULL ); //新建文件并打开,如果文件已经存在则先删除后在新建,不必再提供文件名,刚才已经提供给CH376FileOpen
mStopIfError(s);
}
else
{
mStopIfError(s);
}
s=sprintf(buf,"此前文件长度=%ld 字节 \xd\xa",CH376GetFileSize());
s=CH376ByteWrite(buf,s,NULL); //以字节为单位向文件写数据
mStopIfError(s);
for(hour = 8;hour<20;hour++)
{
adc=0;
s=sprintf(buf,"%02d,%02d,%02d ADC=%u\xd\xa",adc);
s=CH376ByteWrite(buf,s,NULL); //以字节为单位向文件写数据
//有些U盘可能会要求在写数据后等待一会儿才能继续操作,所以,如果在某些U盘中发现数据丢失现象,建议在每次写入数据后稍作延时再继续
mStopIfError(s);
printf("Current offset (file point) is %ld\n",CH376ReadVar32(VAR_CURRENT_OFFSET) ); //读取当前文件的指针
}
printf("Write end\n");
strcpy(buf,"今天的ADC数据到此结束\xd\xa");
s=CH376ByteWrite(buf,strlen(buf),NULL); //以字节为单位向文件写数据
mStopIfError(s);
printf("Close\n");
s= CH376FileClose(TRUE); //关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度
mStopIfError(s);
printf("Take out\n");
while(CH376DiskConnect() == USB_INT_SUCCESS ) //检查U盘是否连接,等待U盘拔出
{
delay_ms(100);
}
delay_ms(200);
}
}
void delay_ms(Uint16 i) //延时ms
{
Uint16 n;
Uint16 j;
Uint16 k;
for(n=0;n<i;n++)
for(j=0;j<1000;j++)
for(k=0;k<256;k++);
}
void delay_us(Uint16 j) //延时us
{
Uint16 n;
Uint16 k;
for(n=0;n<j;n++)
for(k=0;k<256;k++);
}
//====================================================================
//no more
//======================================================================== |