⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_b.c

📁 51单片机学习的源代码
💻 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 + -