📄 sl811_host.h
字号:
//ICC-AVR application builder : 2004-1-4 16:51:43
// Target : M128
// Crystal: 16.000Mhz
//#include <iom128v.h>
//#include <macros.h>
//#include <stdio.h>
#include "comm_def.h"
#include "delay.h"
#include "Udisk.h"
#include "fat.h"
uint16 Counter1ms = 0;
//#pragma interrupt_handler int0_isr:8
void int0_isr(void)
{
uint8 Interrupt;
SL811_ADDR = SL811_Interrupt_Status;
Interrupt = SL811_COMM;
if(permit_print)printf("Interrupt status is %x\n",Interrupt);
if(Interrupt & 0x20)
{
if(Interrupt & 0x80)
{
puts("FS device ready!");
UDisk_Present = 1;
}
else if((Interrupt & 0x40) == 0)
{
puts("LS device ready!");
}
else
{
puts("Device removed!");
UDisk_Present = 0;
}
SL811_ADDR = SL811_Interrupt_Status;
SL811_COMM = Interrupt; //Clear interrupt flag
return;
} //End of if(Interrupt & 0x20)
if(Interrupt & 0x10)
{
Counter1ms++;
if(Counter1ms == 5000) PORTG = 0x07;
}
if(Interrupt & 0x01) //USBA interrupt
{
SL811_ADDR = SL811_USBA_PIDDEoUS;
USBA_Status = SL811_COMM;
if(permit_print)printf("USBA Int Status is %x\n",USBA_Status);
}
if(Interrupt & 0x02) //USBB interrupt
{
SL811_ADDR = SL811_USBB_PIDDEoUS;
USBB_Status = SL811_COMM;
}
SL811_ADDR = SL811_Interrupt_Status;
SL811_COMM = Interrupt; //Clear interrupt flag
return;
}
uint16 CalculateTime(uint8 Hr,uint8 Min,uint8 Sec)
{
return (Hr*2048+Min*32+Sec+2);
}
uint16 CalculateDate(uint16 Year,uint8 Mon,uint8 Date)
{
return ((Year-1980)*512+Mon*32+Date);
}
void lg_main(void)
{
uint8 temp;
uint16 i;
FILE_INFO fileinfo;
uint8 filenumber;
//while(!UDisk_Present);
A17_A16_low
if (UDisk_Present)
{
puts("Begin to test!");
temp = SL811_ConfigUDisk(); // return 0 if success
printf("Config func return %x\n",temp);
if(YES_UDisk) puts("MassStorage connected!\n");
if (temp != 0) {UDisk_Present=0;return;}
Fat_Initial();
List_Fat();
page=1;
UDisk_Present=0;
}
return;
}
void wrfile(void)
{
uint8 temp;
uint16 i;
FILE_INFO fileinfo;
uint8 filenumber;
uint8 filecontent[32];
fileinfo.FileName[0] = 'A';
fileinfo.FileName[1] = 'A';
fileinfo.FileName[2] = 'A';
fileinfo.FileName[3] = 'A';
fileinfo.FileName[4] = 'A';
fileinfo.FileName[5] = 'A';
fileinfo.FileName[6] = 'A';
fileinfo.FileName[7] = 'A';
fileinfo.FileExtName[0] = 'D';
fileinfo.FileExtName[1] = 'A';
fileinfo.FileExtName[2] = 'T';
fileinfo.Attribute = 0;
fileinfo.FileNewModifyTime = CalculateTime(20,14,27);
fileinfo.FileNewModifyDate = CalculateDate(2004,4,11);
filenumber = CreatFile(&fileinfo, 1);
if(filenumber == 0xFF) puts("Create file error!");
else puts("Create file success!");
for(i=0;i<32;i++) filecontent[i] = i;
WriteFile(filenumber,filecontent,32);
printf("CloseFile return %x\n",CloseFile(filenumber));
while(1);
}
// uint8 ReadFileDirectly(uint8* FileName, uint8* pBuffer, uint32 num);
// ReadFile4Print(uint8* FileName);
// DetectFile(uint8* FileName);
// OpenFile(uint8* FileName);
// ReadFile(uint8 filenum, uint32 allocate, uint8* pBuffer, uint32 num);
// DeleteFile(uint8* FileName);
// DeleteAllFiles(void);
// CreatFile(FILE_INFO* pfileinfo, uint8 Delete);
// WriteFile(uint8 filenum,uint8* pBuffer,uint32 length);
// uint8 WriteFileDirectly(FILE_INFO* pfileinfo, uint8 Delete, uint8* pBuffer, uint32 length);
// CloseFile(uint8 filenum);
//uint16 CalculateTime(uint8 Hr,uint8 Min,uint8 Sec);
//uint16 CalculateDate(uint16 Year,uint8 Mon,uint8 Date);
/*
typedef struct
{
uint8 FileName[8]; //文件正名
uint8 FileExtName[3]; //文件扩展名
uint8 Attribute; //文件属性
uint8 Nouse0[2]; //仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。
uint16 FileTime; //16位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。
uint16 FileDate; //16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
uint16 FileNewAccessDate; //16位二进制的文件访问日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
uint16 High16; //起始簇号的高16位。
uint16 FileNewModifyTime; //16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。
uint16 FileNewModifyDate; //16位二进制的文件最新修改日期
uint16 Low16; //起始簇号的低16位。
uint32 FileLength; //32位的文件字节长度。
}FILE_INFO;
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -