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

📄 usb-jb8.c

📁 这个才是mc68hc908jb8的c代码
💻 C
字号:
#include=20 <hidef.h> /* for EnableInterrupts macro */
#include=20 <MC68HC908JB8.h> /* include peripheral declarations */
#include = "descriptor.h"
static byte qbf @0x80;
void=20 usb_init()
{
 UADDR_USBEN=3D1;//=C6=F4=D3=C3USB
 //UIR= 0_TXD2IE=3D1;//=B6=CB=B5=E32=B7=A2=CB=CD=D6=D0=B6=CF
 UIR0_RXD2IE= =3D1;//=B6=CB=B5=E32=BD=D3=CA=D5=D6=D0=B6=CF
 //UIR0_RXD1IE=3D1;/= /=B6=CB=B5=E31=BD=D3=CA=D5=D6=D0=B6=CF
 UIR0_RXD0IE=3D1;//=B6=CB=B5= =E30=BD=D3=CA=D5=D6=D0=B6=CF
 //------------------------//
&nb= sp;UCR0_RX0E=3D1;//=B6=CB=B5=E30=BD=D3=CA=D5=D4=CA=D0=ED
 //-----= -------------------//
 UCR1_STALL1=3D1;//=B6=CB=B5=E31=C7=BF=D6=C6= =BD=FB=D6=B9
 //------------------------//
 UCR2_STALL=3D= 1;//=B6=CB=B5=E32=C7=BF=D6=C6=BD=FB=D6=B9//=BB=B3=D2=C9Motorola=B8=E3=B4=ED= =C1=CB=A3=AC=CB=E3=C1=CB=C0=C1=B5=C3=B8=C4=C1=CB
 //-------------= -----------//
 UCR3_OSTALL0=3D1;//=B6=CB=B5=E30OUT=CA=C2=CE=F1=C7= =BF=D6=C6=B7=B5=BB=D8STALL
 UCR3_ISTALL0=3D1;//=B6=CB=B5=E30IN=CA= =C2=CE=F1=C7=BF=D6=C6=B7=B5=BB=D8STALL
 
}
void=20 usb_EOP()
{
 UIR2_EOPFR=3D1;//=BD=ABEOPF=C7=E50
}
void=20 setup_in_device()
{
 switch(REQUEST_REQ)
 {
  = case=20 USB_REQUEST_GET_STATUS:
   break;
  case=20 USB_REQUEST_GET_DESCRIPTOR:
   break;
  case=20 USB_REQUEST_GET_CONFIGURATION:
   = break;
 }
}
void=20 setup_in_interface()
{
 switch(REQUEST_REQ)
 {
&nbs= p; case=20 USB_REQUEST_GET_STATUS:
   break;
  case=20 USB_REQUEST_GET_INTERFACE:
   = break;
 }
}
void=20 setup_in_endpoint()
{
 switch(REQUEST_REQ)
 {
 = ; case=20 USB_REQUEST_GET_STATUS:
   break;
  case=20 USB_REQUEST_SYNC_FRAME:
   break;
 }
}
void=20 setup_out_device()
{
 byte=20 temp;
 switch(REQUEST_REQ)
 {
  case=20 USB_REQUEST_CLEAR_FEATURE:
  =20 if(REQUEST_VAL=3D=3DUSB_DEVICE_REMOTE_WAKEUP)
  =20 {
    = //=C7=E5=B3=FD=D4=B6=B3=CC=BB=BD=D0=D1
   }
   = break;
  case USB_REQUEST_SET_FEATURE:
  =20 if(REQUEST_VAL=3D=3DUSB_DEVICE_REMOTE_WAKEUP)
  =20 {
    = //=BB=D6=B8=B4=D4=B6=B3=CC=BB=BD=D0=D1
   }
   = break;
  case USB_REQUEST_SET_ADDRESS:
  =20 temp=3DREQUEST_VAL;
   UADDR_UADD=3Dtemp;
  =20 break;
  case USB_REQUEST_SET_DESCRIPTOR:
  =20 break;
  case USB_REQUEST_SET_CONFIGURATION:
  =20 break;
 }
}
void=20 setup_out_interface()
{
 switch(REQUEST_REQ)
 {
&nb= sp;=20 case USB_REQUEST_CLEAR_FEATURE:
   break;
  case=20 USB_REQUEST_SET_FEATURE:
   break;
  case=20 USB_REQUEST_SET_INTERFACE:
   = break;
 }
}
void=20 setup_out_endpoint()
{
 switch(REQUEST_REQ)
 {
&nbs= p; case=20 USB_REQUEST_CLEAR_FEATURE:
   = break;
 }
}
void=20 usb_do_setup()
{
 switch(REQUEST_REQTYPE)
 {
 = case=20 0x00:setup_out_device();    =20 break;//=CA=FD=BE=DD=B7=BD=CF=F2=A3=BA=D6=F7=BB=FA=B5=BD=C9=E8=B1=B8=A3=AC= =B1=EA=D7=BC=C7=EB=C7=F3=C3=FC=C1=EE=A3=AC=BD=D3=CA=D5=D5=DF=A3=BA=C9=E8=B1= =B8
  case=20 0x01:setup_out_interface();  = break;//=CA=FD=BE=DD=B7=BD=CF=F2=A3=BA=D6=F7=BB=FA=B5=BD=C9=E8=B1=B8=A3=AC= =B1=EA=D7=BC=C7=EB=C7=F3=C3=FC=C1=EE=A3=AC=BD=D3=CA=D5=D5=DF=A3=BA=BD=D3=BF= =DA
 =20 case 0x02:setup_out_endpoint();  =20 break;//=CA=FD=BE=DD=B7=BD=CF=F2=A3=BA=D6=F7=BB=FA=B5=BD=C9=E8=B1=B8=A3=AC= =B1=EA=D7=BC=C7=EB=C7=F3=C3=FC=C1=EE=A3=AC=BD=D3=CA=D5=D5=DF=A3=BA=B6=CB=BF= =DA
  case=20 0x80:setup_in_device();     =20 break;//=CA=FD=BE=DD=B7=BD=CF=F2=A3=BA=C9=E8=B1=B8=B5=BD=D6=F7=BB=FA=A3=AC= =B1=EA=D7=BC=C7=EB=C7=F3=C3=FC=C1=EE=A3=AC=BD=D3=CA=D5=D5=DF=A3=BA=C9=E8=B1= =B8
  case=20 0x81:setup_in_interface();  =20 break;//=CA=FD=BE=DD=B7=BD=CF=F2=A3=BA=C9=E8=B1=B8=B5=BD=D6=F7=BB=FA=A3=AC= =B1=EA=D7=BC=C7=EB=C7=F3=C3=FC=C1=EE=A3=AC=BD=D3=CA=D5=D5=DF=A3=BA=BD=D3=BF= =DA
  case=20 0x82:setup_in_endpoint();   =20 break;//=CA=FD=BE=DD=B7=BD=CF=F2=A3=BA=C9=E8=B1=B8=B5=BD=D6=F7=BB=FA=A3=AC= =B1=EA=D7=BC=C7=EB=C7=F3=C3=FC=C1=EE=A3=AC=BD=D3=CA=D5=D5=DF=A3=BA=B6=CB=BF= =DA
  default =20 :            =            =20 break;
 }
}
void=20 usb_RX0()
{
 if(USR0_SETUP=3D=3D1)//=B6=CB=B5=E30=BD=D3=CA=D5=B5= =BD=C1=CBSETUP=C1=EE=C5=C6
 {
 =20 //=B4=A6=C0=EDSETUP=C1=EE=C5=C6
  = REQUEST_REQTYPE=3DUE0D0;
 =20 REQUEST_REQ=3DUE0D1;
  REQUEST_VAL=3DUE0D2;
 =20 REQUEST_VAL=3DREQUEST_VAL<<8;
 =20 REQUEST_VAL=3DREQUEST_VAL+UE0D3;
  = REQUEST_IND=3DUE0D4;
 =20 REQUEST_IND=3DREQUEST_IND<<8;
 =20 REQUEST_IND=3DREQUEST_IND+UE0D5;
  = REQUEST_LEN=3DUE0D6;
 =20 REQUEST_LEN=3DREQUEST_LEN<<8;
 =20 REQUEST_LEN=3DREQUEST_LEN+UE0D7;
 =20 usb_do_setup();
 }
 UIR2_RXD0FR=3D1;
}
void=20 main(void)
{
 CONFIG_COPD=3D1;    =20 //=BD=FB=D6=B9=BF=B4=C3=C5=B9=B7
 
 usb_init();
 = qbf=3D0x55;       
 EnableInte= rrupts;
 for(;;);
}
void=20 interrupt 2=20 usb_int()
{
 qbf=3D0xaa;
 if(UIR1_EOPF=3D=3D1)//=BC=EC= =B2=E2=B5=BDEOP
 {
 =20 usb_EOP();
 }
 if(UIR1_RXD0F=3D=3D1)//=BC=EC=B2=E2=B5=BD=B6= =CB=B5=E30=BD=D3=CA=D5=B5=BD=CA=FD=BE=DD
 {
 =20 usb_RX0();
 }    
}
=CE=D2=B5=C4descrip= tor.h=CE=C4=BC=FE
/*
**********************************************= ***********************************************
*   &nb= sp;        =20 USB=20 =C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5=BC=B0=C6=E4=B3=C9=D4=B1=C8=A1=D6=B5=BA= =EA=B6=A8=D2=E5
******************************************************= ***************************************
*/
typedef=20 unsigned char =20 INT8U;            = /*=20 =CE=DE=B7=FB=BA=C58=CE=BB=D5=FB=D0=CD=B1=E4=C1=BF  */
typedef = unsigned int  =20 INT16U;           /*=20 =CE=DE=B7=FB=BA=C516=CE=BB=D5=FB=D0=CD=B1=E4=C1=BF */
typedef = unsigned long =20 INT32U;           /*=20 =CE=DE=B7=FB=BA=C532=CE=BB=D5=FB=D0=CD=B1=E4=C1=BF = */
/***********  USB  = =C9=E8=B1=B8=C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5 =20 ****************/
typedef struct _USB_DEVICE_DESCRIPTOR=20 {
    INT8U bLength;
    INT8U=20 bDescriptorType;
    INT8U = bcdUSB0;
   =20 INT8U bcdUSB1;
    INT8U = bDeviceClass;
   =20 INT8U bDeviceSubClass;
    INT8U=20 bDeviceProtocol;
    INT8U=20 bMaxPacketSize0;
    INT8U = idVendor0;
   =20 INT8U idVendor1;
    INT8U = idProduct0;
   =20 INT8U idProduct1;
    INT8U = bcdDevice0;
   =20 INT8U bcdDevice1;
    INT8U=20 iManufacturer;
    INT8U = iProduct;
    INT8U=20 iSerialNumber;
    INT8U bNumConfigurations;
}=20 USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
/***********  = USB =20 =C5=E4=D6=C3=C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5  = ****************/
typedef struct _USB_CONFIGURATION_DESCRIPTOR=20 {
    INT8U bLength;
    INT8U=20 bDescriptorType;
    INT8U=20 wTotalLength0;
    INT8U = wTotalLength1;
   =20 INT8U bNumInterfaces;
    INT8U=20 bConfigurationValue;
    INT8U=20 iConfiguration;
    INT8U = bmAttributes;
   =20 INT8U MaxPower;
} USB_CONFIGURATION_DESCRIPTOR,=20 *PUSB_CONFIGURATION_DESCRIPTOR;
/***********  USB  = =BD=D3=BF=DA=C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5 =20 ****************/
typedef struct _USB_INTERFACE_DESCRIPTOR=20 {
    INT8U bLength;
    INT8U=20 bDescriptorType;
    INT8U=20 bInterfaceNumber;
    INT8U=20 bAlternateSetting;
    INT8U=20 bNumEndpoints;
    INT8U=20 bInterfaceClass;
    INT8U=20 bInterfaceSubClass;
    INT8U=20 bInterfaceProtocol;
    INT8U iInterface;
}=20 USB_INTERFACE_DESCRIPTOR, = *PUSB_INTERFACE_DESCRIPTOR;
/*********** =20 USB  =B6=CB=B5=E3=C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5  = ****************/
typedef struct=20 _USB_ENDPOINT_DESCRIPTOR {
    INT8U=20 bLength;
    INT8U = bDescriptorType;
   =20 INT8U bEndpointAddress;
    INT8U=20 bmAttributes;
    INT8U = wMaxPacketSize0;
   =20 INT8U wMaxPacketSize1;
    INT8U bInterval;
}=20 USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;

/***********  USB=20 =D7=D6=B7=FB=B4=AE=C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5  = ****************/
typedef struct _USB_STRING_DESCRIPTOR=20 {
    INT8U bLength;
    INT8U=20 bDescriptorType;
    INT8U bString[3];
}=20 USB_STRING_DESCRIPTOR, = *PUSB_STRING_DESCRIPTOR;
//USB=D7=EE=B4=F3=D7=D6=B7=FB=B3=A4=B6=C8
= #define=20 MAXIMUM_USB_STRING_LENGTH=20 255
 /*******************************************************
=  **=20 USB=20 =C9=E8=B1=B8=C7=EB=C7=F3=C0=E0=D0=CD
 ***************************= *****************************/
#define=20 USB_DEVICE_DESCRIPTOR_TYPE        = ;       =20 0x01
#define=20 USB_CONFIGURATION_DESCRIPTOR_TYPE      &nbs= p; =20 0x02
#define=20 USB_STRING_DESCRIPTOR_TYPE        = ;       =20 0x03
#define=20 USB_INTERFACE_DESCRIPTOR_TYPE       &n= bsp;    =20 0x04
#define=20 USB_ENDPOINT_DESCRIPTOR_TYPE       &nb= sp;     =20 0x05
//#define=20 USB_POWER_DESCRIPTOR_TYPE        =         =20 0x06
 /******************************************************* ** =20 =CF=C2=C3=E6=CE=AA=BB=F9=D3=DAUSB=20 1.0=B9=E6=B7=B6=B5=C4=D5=FD=C8=B7=D6=B5
 ************************= ********************************/
#define=20 USB_REQUEST_GET_STATUS        &nb= sp;          =20 0x00
#define=20 USB_REQUEST_CLEAR_FEATURE        =         =20 0x01
#define=20 USB_REQUEST_SET_FEATURE        &n= bsp;         =20 0x03
#define=20 USB_REQUEST_SET_ADDRESS        &n= bsp;         =20 0x05
#define=20 USB_REQUEST_GET_DESCRIPTOR        = ;       =20 0x06
#define=20 USB_REQUEST_SET_DESCRIPTOR        = ;       =20 0x07
#define=20 USB_REQUEST_GET_CONFIGURATION       &n= bsp;    =20 0x08
#define=20 USB_REQUEST_SET_CONFIGURATION       &n= bsp;    =20 0x09
#define=20 USB_REQUEST_GET_INTERFACE        =         =20 0x0A
#define=20 USB_REQUEST_SET_INTERFACE        =         =20 0x0B
#define=20 USB_REQUEST_SYNC_FRAME        &nb= sp;          =20 0x0C
 /******************************************************* **=20 USB =20 =C9=E8=B1=B8=C0=E0
 *********************************************= ***********/
#define=20 USB_DEVICE_CLASS_RESERVED        =   =20 0x00
#define=20 USB_DEVICE_CLASS_AUDIO        &nb= sp;    =20 0x01
#define USB_DEVICE_CLASS_COMMUNICATIONS    =20 0x02
#define USB_DEVICE_CLASS_HUMAN_INTERFACE   =20 0x03
//#define=20 USB_DEVICE_CLASS_MONITOR        &= nbsp;  =20 0x04
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
#define=20 USB_DEVICE_CLASS_POWER        &nb= sp;    =20 0x06
#define=20 USB_DEVICE_CLASS_PRINTER        &= nbsp;  =20 0x07
#define=20 USB_DEVICE_CLASS_STORAGE        &= nbsp;  =20 0x08
#define=20 USB_DEVICE_CLASS_HUB         = ;      =20 0x09
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC   =20 0xFF
 /******************************************************* **=20 USB=20 =CC=D8=D0=D4=D1=A1=D4=F1=B7=FB
 *********************************= ***********************/
#define=20 USB_ENDPOINT_STALL         &= nbsp;      =20 0x0000
#define=20 USB_DEVICE_REMOTE_WAKEUP        &= nbsp; =20 0x0001
 /*******************************************************<= BR> **=20 USB =B6=CB=B5=E3=C3=E8=CA=F6=B7=FB=BD=E1=B9=B9=CC=E5:=20 =B6=CB=B5=E3=CA=F4=D0=D4
 ***************************************= *****************/
#define=20 USB_ENDPOINT_TYPE_CONTROL        =         =20 0x00
#define=20 USB_ENDPOINT_TYPE_ISOCHRONOUS       &n= bsp;    =20 0x01
#define=20 USB_ENDPOINT_TYPE_BULK        &nb= sp;          =20 0x02
#define=20 USB_ENDPOINT_TYPE_INTERRUPT       &nbs= p;      =20 0x03
/****************************************************************= ******/
#define=20 USB_ENDPOINT1_IN         &nb= sp; =20 0x81
#define=20 USB_ENDPOINT2_IN         &nb= sp; =20 0x82
#define=20 USB_ENDPOINT1_OUT         &n= bsp;=20 0x01
#define=20 USB_ENDPOINT2_OUT         &n= bsp;=20 0x02
typedef struct _USB_REQUEST {
    INT8U=20 bmRequestType;
    INT8U = bRequest;
   =20 INT16U wValue;
    INT16U = wIndex;
    INT16U=20 wLength;
} USB_REQUEST;
static USB_REQUEST _REQUEST;
#define = REQUEST=20 _REQUEST
#define REQUEST_REQTYPE _REQUEST.bmRequestType
#define=20 REQUEST_REQ _REQUEST.bRequest
#define REQUEST_VAL = _REQUEST.wValue
#define=20 REQUEST_IND _REQUEST.wIndex
#define REQUEST_LEN = _REQUEST.wLength

/***********  USB =20 =C9=E8=B1=B8=C3=E8=CA=F6=B7=FB=B5=C4=CA=B5=C0=FD  = ****************/
static USB_DEVICE_DESCRIPTOR=20 Device_Descriptor=3D
{
   =20 0x12,//bLength;
   =20 0x01,//bDescriptorType;
   =20 0x10,//bcdUSB0;
    = 0x01,//bcdUSB1;
   =20 0x00,//bDeviceClass;
   =20 0x00,//bDeviceSubClass;
   =20 0x00,//bDeviceProtocol;
   =20 0x08,//bMaxPacketSize0;
   =20 0x81,//idVendor0;
    = 0x07,//idVendor1;
   =20 0x13,//idProduct0;
   =20 0x71,//idProduct1;
   =20 0x05,//bcdDevice0;
   =20 0x0a,//bcdDevice1;
   =20 0x02,//iManufacturer;
   =20 0x00,//iProduct;
   =20 0x04,//iSerialNumber;
    0x01=20 //bNumConfigurations;
};
/***********  USB  = =C5=E4=D6=C3=C3=E8=CA=F6=B7=FB=B5=C4=CA=B5=C0=FD =20 ****************/
static USB_CONFIGURATION_DESCRIPTOR=20 Configuration_Descriptor=3D
{
   =20 0x09,//bLength;
   =20 0x02,//bDescriptorType;
   =20 0x27,//wTotalLength0;
   =20 0x00,//wTotalLength1;
   =20 0x01,//bNumInterfaces;
   =20 0x01,//bConfigurationValue;
   =20 0x00,//iConfiguration;
   =20 0x80,//bmAttributes//=D7=DC=CF=DF=B9=A9=B5=E7,=B2=BB=D6=A7=B3=D6=D4=B6=B3= =CC=BB=BD=D0=D1
    0xfa=20 //MaxPower;250*2=3D500mA
};
/***********  USB  = =BD=D3=BF=DA=C3=E8=CA=F6=B7=FB=B5=C4=CA=B5=C0=FD =20 ****************/
static USB_INTERFACE_DESCRIPTOR=20 Interface_Descriptor=3D
{
   =20 0x09,//bLength;
   =20 0x04,//bDescriptorType;
   =20 0x00,//bInterfaceNumber;
   =20 0x00,//bAlternateSetting;
   =20 0x02,//bNumEndpoints;
   =20 0xff,//bInterfaceClass;
   =20 0xff,//bInterfaceSubClass;
   =20 0x00,//bInterfaceProtocol;
    0x00=20 //iInterface;
};
/***********  USB  = =B6=CB=B5=E3=C3=E8=CA=F6=B7=FB=B5=C4=CA=B5=C0=FD =20 ****************/
static USB_ENDPOINT_DESCRIPTOR=20 Endpoint_Descriptor[4]=3D
{
    /* = =B6=CB=B5=E31=CA=E4=C8=EB=C3=E8=CA=F6=B7=FB=20 */
    {
    =20 0x07,//bLength;
    =20 0x05,//bDescriptorType;
    =20 USB_ENDPOINT1_IN,//bEndpointAddress;
    =20 USB_ENDPOINT_TYPE_INTERRUPT,//bmAttributes;
    =20 0x08,//wMaxPacketSize0;
    =20 0x00,//wMaxPacketSize1;
      0x10=20 //bInterval;
    },
    /* = =B6=CB=B5=E31=CA=E4=B3=F6=C3=E8=CA=F6=B7=FB=20 */
    {
    =20 0x07,//bLength;
    =20 0x05,//bDescriptorType;
    =20 USB_ENDPOINT1_OUT,//bEndpointAddress;
    =20 USB_ENDPOINT_TYPE_INTERRUPT,//bmAttributes;
    =20 0x08,//wMaxPacketSize0;
    =20 0x00,//wMaxPacketSize1;
      0x10=20 //bInterval;
    },
    /* = =B6=CB=B5=E32=CA=E4=C8=EB=C3=E8=CA=F6=B7=FB=20 */
    {
    =20 0x07,//bLength;
    =20 0x05,//bDescriptorType;
    =20 USB_ENDPOINT1_IN,//bEndpointAddress;
    =20 USB_ENDPOINT_TYPE_BULK,//bmAttributes;
    =20 0x08,//wMaxPacketSize0;
    =20 0x00,//wMaxPacketSize1;
      0x00=20 //bInterval;
    },
    /* = =B6=CB=B5=E32=CA=E4=B3=F6=C3=E8=CA=F6=B7=FB=20 */
    {
    =20 0x07,//bLength;
    =20 0x05,//bDescriptorType;
    =20 USB_ENDPOINT1_IN,//bEndpointAddress;
    =20 USB_ENDPOINT_TYPE_BULK,//bmAttributes;
    =20 0x08,//wMaxPacketSize0;
    =20 0x00,//wMaxPacketSize1;
      0x00=20 //bInterval;
    }
};
/***********  USB=20 =D7=D6=B7=FB=B4=AE=C3=E8=CA=F6=B7=FB=B5=C4=CA=B5=C0=FD  = ****************/
static USB_STRING_DESCRIPTOR=20 String_Descriptor=3D
{
   =20 0x05,//bLength;
   =20 0x03,//bDescriptorType;
    "OK"=20 //bString[3];
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -