moving
驱动牛犊
驱动牛犊
  • 注册日期2004-05-01
  • 最后登录2013-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2226回复:8

做完了U盘、USB Host的开发,把部分源码和一些资料和大家分享一下!!

楼主#
更多 发布于:2005-05-10 17:17
不知道怎么贴多个附件,只好贴了2个C文件。还有其他文件,和一些我愿意公开的代码。
需要的和我联系  
qq:55226306


main.c里面的东东:

/////////////////////////////////////////////////
extern unsigned long xdata DirStartCluster,DirStartCluster32;
extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
extern Command_Def xdata Command;
extern SYS_INFO_BLOCK xdata DeviceInfo;
extern FILE_INFO xdata ThisFile;
//////////////////////////////////////////

void Init_SpecialInterrupts(void)
{
IT0 = 0;
EX0 = 1;
}

void Init_Port()
{
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
SL811_CS=0;
}

/*Serial Port */
/*Mode            = 1  /8-bit UART
  Serial Port Interrupt    = Disabled         */
/*Receive         = Enabled   */
/*Auto Addressing    = Disabled   */
void Init_COMM(void)
{
TMOD=0x11;
SCON = 0x53;
PCON = 0x80 | PCON;
T2CON=0x30;
RCAP2H=0xFF; // 57600 @ 21.1184MHz: 24000000/(32*(65536-(RCAP2H,RCAP2L)))
RCAP2L=0xF4;
TI=0;
RI=0;
TR2=1;
ES = 1;
}

void main(void)
{
unsigned char temp;
unsigned int time_count;

SL811_RST=0;
DelayMs(250);
SL811_RST=1;

Init_SpecialInterrupts();
Init_Port();
    Init_COMM();
SL811_Init();

bFlags.bits.bUartInDone=0;
DirStartCluster=0;
DirStartCluster32=0;


for(temp=0;temp<64;temp++)
DBUF[temp]=0;

ENABLE_INTERRUPTS;

while(TRUE)
{
        time_count++;
if (time_count>1000)
{
DISABLE_INTERRUPTS;
time_count = 0;
ENABLE_INTERRUPTS;
check_key_LED();
}
if(bFlags.bits.SLAVE_FOUND){
DISABLE_INTERRUPTS;
bFlags.bits.SLAVE_FOUND=FALSE;
     DelayMs(250);
if(EnumUsbDev(1)) // enumerate USB device, assign USB address = #1
{
  bFlags.bits.SLAVE_ENUMERATED = TRUE; // Set slave USB device enumerated flag
  DirStartCluster=0;
DirStartCluster32=0;
ThisFile.FatSectorPointer=0;
MCU_LED1=0;
}
ENABLE_INTERRUPTS;
}
if(bFlags.bits.SLAVE_REMOVED){
DISABLE_INTERRUPTS;
bFlags.bits.SLAVE_REMOVED=FALSE;
bFlags.bits.SLAVE_ENUMERATED = FALSE;
bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
MCU_LED1=1;MCU_LED2=1;
ENABLE_INTERRUPTS;
}
if(bFlags.bits.bUartInDone){
DISABLE_INTERRUPTS;
bFlags.bits.bUartInDone=0;

if(DeviceInfo.FAT) //FAT32
UartHandler32();
else
UartHandler(); //FAT16

ENABLE_INTERRUPTS;
}
if(bFlags.bits.bMassDevice){
DISABLE_INTERRUPTS;
bFlags.bits.bMassDevice=FALSE;
if(EnumMassDev())
{
bFlags.bits.SLAVE_IS_ATTACHED = TRUE;
MCU_LED2=0;
}
else
{
bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
temp=SL811Read(IntStatus);
if(!(temp & 0x40)) bFlags.bits.SLAVE_FOUND=TRUE;
}
ENABLE_INTERRUPTS;
}

}
    
}
不知道怎么贴多个附件,只好贴了2个C文件。还有其他文件,和一些我愿意公开的代码。
需要的和我联系  
qq:55226306
附件名称/大小 下载次数 最后更新
2005-05-10_SL811.C (20KB)  66
templa
驱动牛犊
驱动牛犊
  • 注册日期2005-01-04
  • 最后登录2013-03-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-10 17:37
没有QQ!MSN可以吗?templa_0520@hotmail.com
另有问题请教,大侠愿意教吗?
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-05-13 22:06
谢谢楼主
一起交流,共同提高!
linguohui
驱动牛犊
驱动牛犊
  • 注册日期2002-05-17
  • 最后登录2012-09-19
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望8点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-14 21:24
不错,对肯公开东东这一点值得称赞。不过你这个代码和CYPRESS的没本质上的区别,主要存在以下缺陷:1.不能进行写操作;2.速度慢,不超过64K/s;3.错误的异常处理

 :D
lijian0801
驱动牛犊
驱动牛犊
  • 注册日期2005-05-13
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-15 14:34

楼上的大侠,
看了你的回复  厉害!!

小弟在做毕业设计,PC机和单片机的USB通信,
用AT89S52和D12做的板子也加了串口(做调试用)
参考的资料是周立功的<<PDIUSBD12固件编程与驱动开发>>,但是那本书程序中的许多函数是没有给出来的,有许多要求回答的数据是用变量给出来的 ,估计是要买他的那个板子才会把 头文件给你,

对D12的操作,以及中断的处理估计问题不大,(毕竟看到了许多高手的经验谈)

现在我遇到的最大的问题就是标准请求的数据格式和怎么回答,以及回答的描述符的数据的具体内容.
(我的程序是用汇编在写),当然,哪位高手能提供 C  也没有关系,

还忘大侠指点啊

我的邮箱是  zdanywn10000@163.com      
电话028-87724691
wgtic
驱动牛犊
驱动牛犊
  • 注册日期2005-04-10
  • 最后登录2005-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-15 23:56
支持,我为人人,人人为我。
templa
驱动牛犊
驱动牛犊
  • 注册日期2005-01-04
  • 最后登录2013-03-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-05-16 08:39
linguohui大侠说得很对,这3个问题已经害了很多人,我就是之一!可是为什么没有人将解决的方法告诉大家呢,看历史贴就知道:很多人在开始编程时就遇到这些问题。想linguohui大侠肯定知道解决方案,就算替菜鸟们扫扫盲吧,给些提示也好啊。我花了个把月才开始怀疑CYPRESS的源码,之前我还把它当圣经了呢!
lizsk
驱动牛犊
驱动牛犊
  • 注册日期2005-03-09
  • 最后登录2005-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-16 14:35
楼主和3楼的大侠都好厉害啊!能帮我解决下问题吗?我的毕业设计要求用PD12+AT89C51,写一个固件程序让主机能识别出一个大容量存储设备.不要求对Flash进行读写.就相当于做个空壳子,让主机以为这是个u盘就可以了.但是我始终调试不出来.不知道是描述符不对还是程序有问题.我用的SST89C58仿真器和PD12.还有就是调试的时候不知道怎么才能一步一步调.调的时候用keil c把程序下到仿真器里运行时不知道该怎么看运行过程,也就不知道我的程序到底那里不对?感觉应该用bus hound,但是又不会用.求大侠指点!如果大侠有现成资料,我愿意出资购买!
zhyf2008
驱动牛犊
驱动牛犊
  • 注册日期2003-11-07
  • 最后登录2008-05-01
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-05-17 14:53
7 楼的老兄,我也是用MCS51和D12做U盘,现在已经做好了,跟市场上的U盘完全一样,很好用的,如果你的问题还没有得到解决,我可以给你 提供各方面的技术,我QQ:43225058
游客

返回顶部