网站导航: 首页 > 设计参考 > 正文 文章搜索
CY7C68013芯片的系统固件程序设计
 
文章编号:
100809211528
文章分类: 接口技术 USB
点 击:
...
关 键 词: CY7C68013,固件
文章来源:
作者:王静红 刘教民
摘 要:
USB接口技术以其即插即用、热插拔、接口体积小巧、节省系统资源、传输可靠、提供电源、良好的兼容性、共享式通信和低成本等优点...

3 应用程序
    该应用程序主要负责读取系统硬件所采集的数据,并实时的以波形方式显示出来,同时还可以读取USB设备描述符、配置描述符和下载EZ—USB FX2固件代码的功能。它所使用的编程语言是微软公司的Visual C++。
1)EZ-USB FX2中寄存器CPUCS的第0位控制着增强型8051的复位操作,该位为1则锁定CPU为复位状态;该位为0则结束对CPU的锁定,使其开始正常工作。在该程序中8051的锁定和复位通过使用供应商自定义请求代码IOCTL-Ezusb_VENDOR_REQUEST来实现。其中,CPUCS控制寄存器的地址为0xE600,VENDOR_REQUEST_IN中的bData为1表示锁定,为0则为复位。实现8051锁定的部分代码如下:
 

 
  1. BOOLEAN CUsbhostDlg::usb8051hold   
  2. (HANDLE *phDeviceHandle)   
  3. {   
  4.     VENDOR_REQUEST_IN myRequest;   
  5.     ……   
  6.         myRequest.bRequest=0xA0;//固件加载请求   
  7.     myRequest.wValue=0xE600;//cpucs寄存器的地址   
  8.     myRequest.wIndex=0x00;   
  9.     myRequest.wLength=0x01;   
  10.     myRequest.bData=1;//传输的数据值,为1标示锁定,为0表示复位   
  11.     myRequest.direction=0x00;   
  12.     bResult= DeviceloControl   
  13.         (hDevice,   
  14.         IOCTL_Ezusb_VENDOR_REQUEST,   
  15.         &myRequest,sizeof(VENDOR_REQUEST_IN),   
  16.         NULL,   
  17.         0,   
  18.         (unsigned long *)&nBytes,   
  19.         NULL);   
  20.     ……   
  21. }   

2)下载程序按钮用于从主机上下载EZ-USB FX2的芯片固件程序,由增强型8051执行。该程序下载的文件类型为.hex,容量小于8 Kb,且仅能下载至FX2的片内RAM 中。其部分代码如下所示。它首先调用UsbOpenDriver来打开指定的USB设备;然后读取所下载文件的内容;最后使用IOCTL_Ezusb_ANCHOR_DOWNLOAD请求完成数据下载。在进行下载之前,要锁定EZ-USB FX2,下载结束后,要使用8051复位来结束锁定。其中的部分代码如下:
 

 
  1. void CUsbhostDlg::OnDownloadFile()   
  2. {   
  3.     if(UsbOpenDriver(&hDevice,DeviceName)!= TRUE)   
  4.     {   
  5.         MessageBox("无效设备,请重试!");   
  6.         return ;   
  7.     }   
  8.     BOOLEAN res1=usb8051hold(&hDevice);   
  9.     if(res1==TRUE)   
  10.     {   
  11.         CFileDialog dlgLoad(   
  12.             TRUE,0,0,   
  13.             OFN_HIDEREADONLY   
  14.             OFN_OVERWRITEPROMPT,   
  15.             dlgLoad.m_ofn.lpstrTitle=   
  16.             "Anchor Download";   
  17.         if(dlgLoad.DoModal()!= IDOK)   
  18.             return;   
  19.         m_strDldFile= dlgLoad.m_ofn.lpstrFile;   
  20.         ……   
  21.             bResult= DeviceIoControl(hDevice,IOCTL_Ezusb_ANCHOR_DOWNLOAD,   
  22.             buffer,   
  23.             numreadfile,   
  24.             NULL,   
  25.             0,   
  26.             &nBytes,   
  27.             NULL);   
  28.         ……   
  29.             //进行数据传输前,首先通过//IOCTL_Ezusb_RESETPIPE来复位管道6   
  30.             bResultl= DeviceIoControl(hDevice,IOCTL_Ezusb_RESETPIPE,   
  31.             &input,sizeof(unsigned long),   
  32.             NULL,   
  33.             0,   
  34.             &nBytes1,   
  35.             NULL);   
  36.         ……   
  37.             //启动接收数据的线程   
  38.             g_KeepGoing = true;   
  39.         if(_beginthread(ReceiveThreadFunction,0,hDevice)< 0)   
  40.         {   
  41.             AfxMessageBox("启动接收数据线程失败!");   
  42.         }   
  43.     }   
  44. }   

3)在复位管道6之后,就准备接受数据了,然后调用_beginthread函数来启动接收数据的线程,其函数名是ReceiveThreadFunction。在该线程中,循环向块端点6发出IOCTL_EZUSB_BULK_READ 请求,来读取系统硬件所上传的数据,如果返回的数据长度是512字节,则说明读取数据成功了,同时把这些数据存储在硬盘上。ReceiveThreadFunction函数的部分代码如下所示:
其余部分的代码不再赘述。

 
  1. void _cdecl ReceiveThreadFunction(HANDLE hDeviee)   
  2. {   
  3.     ……   
  4.         //读取数据   
  5.         while(g_KeepGoing)   
  6.         {   
  7.             nBytes = 0;   
  8.             bulkContro1.pipeNum = 6;   
  9.             g_Transfering= FALSE;   
  10.             bResult= DeviceIoControl(hDevice,IOCTL_EZUSB_BULK_READ,&bulkC6ntrol,   
  11.                 sizeof(BULK_TRANSFER_CONTROL),InBuffer,512,&nBytes,   
  12.                 NULL);   
  13.             ……   
  14.         }   
  15. }   

 

 
相关文章:

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4