?? usb_b.c
字號:
//===================================================================//
// Project Name : MOTOROLA-PDIUSBD12 USB-MCS CARD
// Module Name : Master Firmware Program
// Product Type : License
// OS/Dev Tool : CodeWarrior Development Studio for HC(S)08 Microcontrollers
// Original Author : Ming Zeng
// Organization : Tsinghua University , DEP
// Original Date : Feb, 20, 2003
// Addr : Tsinghua University, Beijing City
// TEL :
// EMail : ming@zming.net
// Website : http://www.zming.net
// Copyright : Copyright ZMing.net, 2003
// Comments :
//
//
//===================================================================//
#include "COMMON.H"
#include "USB.H"
#include "USBD12.H"
#include "CHAP9.H"
#include "VDOR.H"
#include "HAL.H"
extern COMMONFLAGS bCOMMONFlags;
//*************************************************************************
// USB protocol function pointer arrays
//*************************************************************************
void (*StandardDeviceRequest[])(void) =
{
USBClassRequest_GetStatus, // 0
USBClassRequest_ClearFeature, // 1
reserved, // 2
USBClassRequest_SetFeature, // 3
reserved, // 4
USBClassRequest_SetAddress, // 5
USBClassRequest_GetDescriptor, // 6
reserved, // 7
USBClassRequest_GetConfiguration, // 8
USBClassRequest_SetConfiguration, // 9
USBClassRequest_GetInterface, // 10
USBClassRequest_SetInterface, // 11
reserved, // 12
};
void (* VendorDeviceRequest[])(void) =
{
USBVendorRequest_START,
USBVendorRequest_STOP,
USBVendorRequest_READ,
};
//*************************************************************************
// Public static data
//*************************************************************************
CONTROL_XFER ControlData;
//////////////////
// Functions
//////////////////
void USB_Single_Transmit(unsigned char* pBuf, unsigned char nLen)
{
if(nLen <= EP0_PACKET_SIZE)
{
USBD12_WriteEndpoint(1, pBuf, nLen);
}
}
void USB_Code_Transmit(unsigned char * pRomData, unsigned short nLen)
{
ControlData.wCount = 0;
if(ControlData.wLength > nLen)
ControlData.wLength = nLen;
ControlData.pData = pRomData;
if(ControlData.wLength >= EP0_PACKET_SIZE)
{
USBD12_WriteEndpoint(1, ControlData.pData, EP0_PACKET_SIZE);
ControlData.wCount += EP0_PACKET_SIZE;
DisableInterrupts;
bCOMMONFlags.bits.bControl_State = USB_TRANSMIT;
EnableInterrupts;
}
else
{
USBD12_WriteEndpoint(1, pRomData, ControlData.wLength);
ControlData.wCount += ControlData.wLength;
DisableInterrupts;
bCOMMONFlags.bits.bControl_State = USB_IDLE;
EnableInterrupts;
}
}
void USB_Control_Handler(void)
{
unsigned char nType, nReq;
nType = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
nReq = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
if (nType == USB_STANDARD_REQUEST)
{
(*StandardDeviceRequest[nReq])();
}
else if (nType == USB_VENDOR_REQUEST)
{
(*VendorDeviceRequest[nReq])();
}
else
USB_Stall_EP0();
}
void USB_ClearAllInts(void)
{
USBD12_ReadInterruptRegister();
USBD12_ReadLastTransactionStatus(0);
USBD12_ReadLastTransactionStatus(1);
USBD12_ReadLastTransactionStatus(2);
USBD12_ReadLastTransactionStatus(3);
USBD12_ReadLastTransactionStatus(4);
USBD12_ReadLastTransactionStatus(5);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -