| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- // Copyright 2021 IOsetting <iosetting(at)outlook.com>
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #ifndef ___FW_USB_H___
- #define ___FW_USB_H___
- #include "fw_conf.h"
- #include "fw_types.h"
- /**
- * STC8H8K64U USB SFR
- */
- #define FADDR 0x00
- #define POWER 0x01
- #define INTRIN1 0x02
- #define EP5INIF 0x20
- #define EP4INIF 0x10
- #define EP3INIF 0x08
- #define EP2INIF 0x04
- #define EP1INIF 0x02
- #define EP0IF 0x01
- #define INTROUT1 0x04
- #define EP5OUTIF 0x20
- #define EP4OUTIF 0x10
- #define EP3OUTIF 0x08
- #define EP2OUTIF 0x04
- #define EP1OUTIF 0x02
- #define INTRUSB 0x06
- #define SOFIF 0x08
- #define RSTIF 0x04
- #define RSUIF 0x02
- #define SUSIF 0x01
- #define INTRIN1E 0x07
- #define EP5INIE 0x20
- #define EP4INIE 0x10
- #define EP3INIE 0x08
- #define EP2INIE 0x04
- #define EP1INIE 0x02
- #define EP0IE 0x01
- #define INTROUT1E 0x09
- #define EP5OUTIE 0x20
- #define EP4OUTIE 0x10
- #define EP3OUTIE 0x08
- #define EP2OUTIE 0x04
- #define EP1OUTIE 0x02
- #define INTRUSBE 0x0B
- #define SOFIE 0x08
- #define RSTIE 0x04
- #define RSUIE 0x02
- #define SUSIE 0x01
- #define FRAME1 0x0C
- #define FRAME2 0x0D
- #define INDEX 0x0E
- #define INMAXP 0x10
- #define CSR0 0x11
- #define SSUEND 0x80 // Serviced Setup End
- #define SOPRDY 0x40 // Serviced OPRDY(Out Packet Ready)
- #define SDSTL 0x20 // Send Stall
- #define SUEND 0x10 // Setup End
- #define DATEND 0x08 // Data End
- #define STSTL 0x04 // Sent Stall
- #define IPRDY 0x02 // In Packet Ready
- #define OPRDY 0x01 // Out Packet Ready
- #define INCSR1 0x11
- #define INCLRDT 0x40
- #define INSTSTL 0x20
- #define INSDSTL 0x10
- #define INFLUSH 0x08
- #define INUNDRUN 0x04
- #define INFIFONE 0x02
- #define INIPRDY 0x01
- #define INCSR2 0x12
- #define INAUTOSET 0x80
- #define INISO 0x40
- #define INMODEIN 0x20
- #define INMODEOUT 0x00
- #define INENDMA 0x10
- #define INFCDT 0x08
- #define OUTMAXP 0x13
- #define OUTCSR1 0x14
- #define OUTCLRDT 0x80
- #define OUTSTSTL 0x40
- #define OUTSDSTL 0x20
- #define OUTFLUSH 0x10
- #define OUTDATERR 0x08
- #define OUTOVRRUN 0x04
- #define OUTFIFOFUL 0x02
- #define OUTOPRDY 0x01
- #define OUTCSR2 0x15
- #define OUTAUTOCLR 0x80
- #define OUTISO 0x40
- #define OUTENDMA 0x20
- #define OUTDMAMD 0x10
- #define COUNT0 0x16
- #define OUTCOUNT1 0x16
- #define OUTCOUNT2 0x17
- #define FIFO0 0x20
- #define FIFO1 0x21
- #define FIFO2 0x22
- #define FIFO3 0x23
- #define FIFO4 0x24
- #define FIFO5 0x25
- #define UTRKCTL 0x30
- #define UTRKSTS 0x31
- typedef enum _CONTROL_STATE
- {
- USB_CtrlState_Idle = 0x00,
- USB_CtrlState_SettingUp = 0x01,
- USB_CtrlState_DataIn = 0x02,
- USB_CtrlState_DataOut = 0x03,
- USB_CtrlState_Stalled = 0x04,
- } USB_CtrlState_t; /* The state machine states of a control pipe */
- typedef enum
- {
- USB_StdReq_GetStatus = 0x00,
- USB_StdReq_ClearFeature = 0x01,
- USB_StdReq_SetFeature = 0x03,
- USB_StdReq_SetAddress = 0x05,
- USB_StdReq_GetDescriptor = 0x06,
- USB_StdReq_SetDescriptor = 0x07,
- USB_StdReq_GetConfiguration = 0x08,
- USB_StdReq_SetConfiguration = 0x09,
- USB_StdReq_GetInterface = 0x0A,
- USB_StdReq_SetInterface = 0x0B,
- USB_StdReq_SynchFrame = 0x0C,
- } USB_StdReq_t;
- typedef enum
- {
- USB_HidReq_GetReport = 0x01,
- USB_HidReq_GetIdle = 0x02,
- USB_HidReq_GetProtocol = 0x03,
- USB_HidReq_SetReport = 0x09,
- USB_HidReq_SetIdle = 0x0A,
- USB_HidReq_SetProtocol = 0x0B,
- } USB_HidReq_t;
- typedef enum
- {
- USB_DescriptorType_Device = 0x01,
- USB_DescriptorType_Configuration = 0x02,
- USB_DescriptorType_String = 0x03,
- USB_DescriptorType_Interface = 0x04,
- USB_DescriptorType_Endpoint = 0x05,
- USB_DescriptorType_HID = 0x21,
- USB_DescriptorType_Report = 0x22,
- USB_DescriptorType_Physical = 0x23,
- } USB_DescriptorType_t;
- #define REQUEST_TYPE_MASK 0x60
- typedef enum
- {
- USB_RequestType_Standard = 0x00,
- USB_RequestType_Class = 0x20,
- USB_RequestType_Vendor = 0x40,
- } USB_RequestType_t;
- typedef enum
- {
- USB_ClockSource_6M = 0x00,
- USB_ClockSource_12M = 0x01, // default value
- USB_ClockSource_24M = 0x02,
- USB_ClockSource_IRCDiv2 = 0x03,
- } USB_ClockSource_t;
- typedef enum
- {
- USB_PHYTest_Method_Normal = 0x00,
- USB_PHYTest_Method_Force1 = 0x01,
- USB_PHYTest_Method_Force0 = 0x02,
- USB_PHYTest_Method_ForceOneEnd0 = 0x03,
- } USB_PHYTest_Method_t;
- #define USB_SetClockPPL(__STATE__) SFR_ASSIGN(USBCLK, 7, __STATE__)
- #define USB_SetClockSource(__SOURCE__) SFR_ASSIGN2BIT(USBCLK, 5, __SOURCE__)
- #define USB_SetClockCRE(__STATE__) SFR_ASSIGN(USBCLK, 4, __STATE__)
- #define USB_SetUSBTestMode(__STATE__) SFR_ASSIGN(USBCLK, 3, __STATE__)
- #define USB_SetPHYTestMode(__STATE__) SFR_ASSIGN(USBCLK, 2, __STATE__)
- #define USB_SetPHYTestMethod(__TEST_METHOD__) SFR_ASSIGN2BIT(USBCLK, 0, __TEST_METHOD__)
- #define USB_SetEnabled(__STATE__) SFR_ASSIGN(USBCON, 7, __STATE__)
- #define USB_TurnOnReset() SFR_SET(USBCON, 6)
- #define USB_TurnOffReset() SFR_RESET(USBCON, 6)
- #define USB_SetPS2Mode(__STATE__) SFR_ASSIGN(USBCON, 5, __STATE__)
- /**
- * Enable/Disable 1.5KR pull up resistance on D+ and D-
- */
- #define USB_SetDpDmPullUp(__STATE__) SFR_ASSIGN(USBCON, 4, __STATE__)
- /**
- * Enable/Disable 500KR pull down resistance on D+ and D-
- */
- #define USB_SetDpDmPullDown(__STATE__) SFR_ASSIGN(USBCON, 3, __STATE__)
- #define USB_GetDiffRecvMode() (USBCON & 0x04)
- /**
- * Read D+ level
- */
- #define USB_GetDp() (USBCON & 0x02)
- /**
- * Write D+ level, writable when PS2 mode is 1
- */
- #define USB_SetDp(__STATE__) SFR_ASSIGN(USBCON, 1, __STATE__)
- /**
- * Read D- level
- */
- #define USB_GetDm() (USBCON & 0x01)
- /**
- * Write D- level, writable when PS2 mode is 1
- */
- #define USB_SetDm(__STATE__) SFR_ASSIGN(USBCON, 0, __STATE__)
- #define USB_IsBusy() (USBADR & 0x80)
- #define USB_SetAddrForRead(__ADDR__) (USBADR = (__ADDR__) | 0x80)
- #define USB_SetAddrForWrite(__ADDR__) (USBADR = (__ADDR__) & 0x7F)
- #define USB_SelectEndPoint(__INDEX__) USB_WriteReg(INDEX, __INDEX__)
- typedef union
- {
- uint16_t w;
- struct _bb
- {
- uint8_t bl;
- uint8_t bh;
- } bb;
- } uint16_2uint8_t;
- typedef struct
- {
- uint8_t bmRequestType;
- uint8_t bRequest;
- uint16_2uint8_t wValue;
- uint16_2uint8_t wIndex;
- uint16_2uint8_t wLength;
- } USB_Request_t;
- typedef struct
- {
- uint8_t bStage;
- uint16_t wResidue;
- uint8_t *pData;
- } USB_EP0_Stage_t;
- uint8_t USB_ReadReg(uint8_t addr);
- void USB_WriteReg(uint8_t addr, uint8_t dat);
- uint8_t USB_ReadFIFO(uint8_t fifo, uint8_t *pdat);
- void USB_WriteFIFO(uint8_t fifo, uint8_t *pdat, uint8_t cnt);
- #endif
|