slime@2
|
1 |
/*********************************************************************
|
slime@2
|
2 |
*
|
slime@2
|
3 |
* Microchip USB C18 Firmware Version 1.0
|
slime@2
|
4 |
*
|
slime@2
|
5 |
*********************************************************************
|
slime@2
|
6 |
* FileName: usbdrv.h
|
slime@2
|
7 |
* Dependencies: See INCLUDES section below
|
slime@2
|
8 |
* Processor: PIC18
|
slime@2
|
9 |
* Compiler: C18 2.30.01+
|
slime@2
|
10 |
* Company: Microchip Technology, Inc.
|
slime@2
|
11 |
*
|
slime@2
|
12 |
* Software License Agreement
|
slime@2
|
13 |
*
|
slime@2
|
14 |
* The software supplied herewith by Microchip Technology Incorporated
|
slime@2
|
15 |
* (the “Company”) for its PICmicro® Microcontroller is intended and
|
slime@2
|
16 |
* supplied to you, the Company’s customer, for use solely and
|
slime@2
|
17 |
* exclusively on Microchip PICmicro Microcontroller products. The
|
slime@2
|
18 |
* software is owned by the Company and/or its supplier, and is
|
slime@2
|
19 |
* protected under applicable copyright laws. All rights are reserved.
|
slime@2
|
20 |
* Any use in violation of the foregoing restrictions may subject the
|
slime@2
|
21 |
* user to criminal sanctions under applicable laws, as well as to
|
slime@2
|
22 |
* civil liability for the breach of the terms and conditions of this
|
slime@2
|
23 |
* license.
|
slime@2
|
24 |
*
|
slime@2
|
25 |
* THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
|
slime@2
|
26 |
* WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
|
slime@2
|
27 |
* TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
slime@2
|
28 |
* PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
|
slime@2
|
29 |
* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
|
slime@2
|
30 |
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
slime@2
|
31 |
*
|
slime@2
|
32 |
* Author Date Comment
|
slime@2
|
33 |
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
slime@2
|
34 |
* Rawin Rojvanit 11/19/04 Original.
|
slime@2
|
35 |
********************************************************************/
|
slime@2
|
36 |
|
slime@2
|
37 |
#ifndef USBDRV_H
|
slime@2
|
38 |
#define USBDRV_H
|
slime@2
|
39 |
|
slime@2
|
40 |
/** I N C L U D E S **********************************************************/
|
slime@2
|
41 |
#include "typedefs.h"
|
slime@2
|
42 |
#include "usb.h"
|
slime@2
|
43 |
|
slime@2
|
44 |
/** D E F I N I T I O N S ****************************************************/
|
slime@2
|
45 |
|
slime@2
|
46 |
/* UCFG Initialization Parameters */
|
slime@2
|
47 |
#define _PPBM0 0x00 // Pingpong Buffer Mode 0
|
slime@2
|
48 |
#define _PPBM1 0x01 // Pingpong Buffer Mode 1
|
slime@2
|
49 |
#define _PPBM2 0x02 // Pingpong Buffer Mode 2
|
slime@2
|
50 |
#define _LS 0x00 // Use Low-Speed USB Mode
|
slime@2
|
51 |
#define _FS 0x04 // Use Full-Speed USB Mode
|
slime@2
|
52 |
#define _TRINT 0x00 // Use internal transceiver
|
slime@2
|
53 |
#define _TREXT 0x08 // Use external transceiver
|
slime@2
|
54 |
#define _PUEN 0x10 // Use internal pull-up resistor
|
slime@2
|
55 |
#define _OEMON 0x40 // Use SIE output indicator
|
slime@2
|
56 |
#define _UTEYE 0x80 // Use Eye-Pattern test
|
slime@2
|
57 |
|
slime@2
|
58 |
/* UEPn Initialization Parameters */
|
slime@2
|
59 |
#define EP_CTRL 0x06 // Cfg Control pipe for this ep
|
slime@2
|
60 |
#define EP_OUT 0x0C // Cfg OUT only pipe for this ep
|
slime@2
|
61 |
#define EP_IN 0x0A // Cfg IN only pipe for this ep
|
slime@2
|
62 |
#define EP_OUT_IN 0x0E // Cfg both OUT & IN pipes for this ep
|
slime@2
|
63 |
#define HSHK_EN 0x10 // Enable handshake packet
|
slime@2
|
64 |
// Handshake should be disable for isoch
|
slime@2
|
65 |
|
slime@2
|
66 |
/******************************************************************************
|
slime@2
|
67 |
* USB - PICmicro Endpoint Definitions
|
slime@2
|
68 |
* PICmicro EP Address Format: X:EP3:EP2:EP1:EP0:DIR:PPBI:X
|
slime@2
|
69 |
* This is used when checking the value read from USTAT
|
slime@2
|
70 |
*
|
slime@2
|
71 |
* NOTE: These definitions are not used in the descriptors.
|
slime@2
|
72 |
* EP addresses used in the descriptors have different format and
|
slime@2
|
73 |
* are defined in: "system\usb\usbdefs\usbdefs_std_dsc.h"
|
slime@2
|
74 |
*****************************************************************************/
|
slime@2
|
75 |
#define OUT 0
|
slime@2
|
76 |
#define IN 1
|
slime@2
|
77 |
|
slime@2
|
78 |
#define PIC_EP_NUM_MASK 0b01111000
|
slime@2
|
79 |
#define PIC_EP_DIR_MASK 0b00000100
|
slime@2
|
80 |
|
slime@2
|
81 |
#define EP00_OUT (0x00<<3)|(OUT<<2)
|
slime@2
|
82 |
#define EP00_IN (0x00<<3)|(IN<<2)
|
slime@2
|
83 |
#define EP01_OUT (0x01<<3)|(OUT<<2)
|
slime@2
|
84 |
#define EP01_IN (0x01<<3)|(IN<<2)
|
slime@2
|
85 |
#define EP02_OUT (0x02<<3)|(OUT<<2)
|
slime@2
|
86 |
#define EP02_IN (0x02<<3)|(IN<<2)
|
slime@2
|
87 |
#define EP03_OUT (0x03<<3)|(OUT<<2)
|
slime@2
|
88 |
#define EP03_IN (0x03<<3)|(IN<<2)
|
slime@2
|
89 |
#define EP04_OUT (0x04<<3)|(OUT<<2)
|
slime@2
|
90 |
#define EP04_IN (0x04<<3)|(IN<<2)
|
slime@2
|
91 |
#define EP05_OUT (0x05<<3)|(OUT<<2)
|
slime@2
|
92 |
#define EP05_IN (0x05<<3)|(IN<<2)
|
slime@2
|
93 |
#define EP06_OUT (0x06<<3)|(OUT<<2)
|
slime@2
|
94 |
#define EP06_IN (0x06<<3)|(IN<<2)
|
slime@2
|
95 |
#define EP07_OUT (0x07<<3)|(OUT<<2)
|
slime@2
|
96 |
#define EP07_IN (0x07<<3)|(IN<<2)
|
slime@2
|
97 |
#define EP08_OUT (0x08<<3)|(OUT<<2)
|
slime@2
|
98 |
#define EP08_IN (0x08<<3)|(IN<<2)
|
slime@2
|
99 |
#define EP09_OUT (0x09<<3)|(OUT<<2)
|
slime@2
|
100 |
#define EP09_IN (0x09<<3)|(IN<<2)
|
slime@2
|
101 |
#define EP10_OUT (0x0A<<3)|(OUT<<2)
|
slime@2
|
102 |
#define EP10_IN (0x0A<<3)|(IN<<2)
|
slime@2
|
103 |
#define EP11_OUT (0x0B<<3)|(OUT<<2)
|
slime@2
|
104 |
#define EP11_IN (0x0B<<3)|(IN<<2)
|
slime@2
|
105 |
#define EP12_OUT (0x0C<<3)|(OUT<<2)
|
slime@2
|
106 |
#define EP12_IN (0x0C<<3)|(IN<<2)
|
slime@2
|
107 |
#define EP13_OUT (0x0D<<3)|(OUT<<2)
|
slime@2
|
108 |
#define EP13_IN (0x0D<<3)|(IN<<2)
|
slime@2
|
109 |
#define EP14_OUT (0x0E<<3)|(OUT<<2)
|
slime@2
|
110 |
#define EP14_IN (0x0E<<3)|(IN<<2)
|
slime@2
|
111 |
#define EP15_OUT (0x0F<<3)|(OUT<<2)
|
slime@2
|
112 |
#define EP15_IN (0x0F<<3)|(IN<<2)
|
slime@2
|
113 |
|
slime@2
|
114 |
/******************************************************************************
|
slime@2
|
115 |
* Macro: void mInitializeUSBDriver(void)
|
slime@2
|
116 |
*
|
slime@2
|
117 |
* PreCondition: None
|
slime@2
|
118 |
*
|
slime@2
|
119 |
* Input: None
|
slime@2
|
120 |
*
|
slime@2
|
121 |
* Output: None
|
slime@2
|
122 |
*
|
slime@2
|
123 |
* Side Effects: None
|
slime@2
|
124 |
*
|
slime@2
|
125 |
* Overview: Configures the USB module, definition of UCFG_VAL can be
|
slime@2
|
126 |
* found in autofiles\usbcfg.h
|
slime@2
|
127 |
*
|
slime@2
|
128 |
* This register determines: USB Speed, On-chip pull-up
|
slime@2
|
129 |
* resistor selection, On-chip tranceiver selection, bus
|
slime@2
|
130 |
* eye pattern generation mode, Ping-pong buffering mode
|
slime@2
|
131 |
* selection.
|
slime@2
|
132 |
*
|
slime@2
|
133 |
* Note: None
|
slime@2
|
134 |
*****************************************************************************/
|
slime@2
|
135 |
#define mInitializeUSBDriver() {UCFG = UCFG_VAL; \
|
slime@2
|
136 |
usb_device_state = DETACHED_STATE; \
|
slime@2
|
137 |
usb_stat._byte = 0x00; \
|
slime@2
|
138 |
usb_active_cfg = 0x00;}
|
slime@2
|
139 |
|
slime@2
|
140 |
/******************************************************************************
|
slime@2
|
141 |
* Macro: void mDisableEP1to15(void)
|
slime@2
|
142 |
*
|
slime@2
|
143 |
* PreCondition: None
|
slime@2
|
144 |
*
|
slime@2
|
145 |
* Input: None
|
slime@2
|
146 |
*
|
slime@2
|
147 |
* Output: None
|
slime@2
|
148 |
*
|
slime@2
|
149 |
* Side Effects: None
|
slime@2
|
150 |
*
|
slime@2
|
151 |
* Overview: This macro disables all endpoints except EP0.
|
slime@2
|
152 |
* This macro should be called when the host sends a RESET
|
slime@2
|
153 |
* signal or a SET_CONFIGURATION request.
|
slime@2
|
154 |
*
|
slime@2
|
155 |
* Note: None
|
slime@2
|
156 |
*****************************************************************************/
|
slime@2
|
157 |
#define mDisableEP1to15() ClearArray((byte*)&UEP1,15);
|
slime@2
|
158 |
/*
|
slime@2
|
159 |
#define mDisableEP1to15() UEP1=0x00;UEP2=0x00;UEP3=0x00;\
|
slime@2
|
160 |
UEP4=0x00;UEP5=0x00;UEP6=0x00;UEP7=0x00;\
|
slime@2
|
161 |
UEP8=0x00;UEP9=0x00;UEP10=0x00;UEP11=0x00;\
|
slime@2
|
162 |
UEP12=0x00;UEP13=0x00;UEP14=0x00;UEP15=0x00;
|
slime@2
|
163 |
*/
|
slime@2
|
164 |
|
slime@2
|
165 |
/******************************************************************************
|
slime@2
|
166 |
* Macro: void mUSBBufferReady(buffer_dsc)
|
slime@2
|
167 |
*
|
slime@2
|
168 |
* PreCondition: IN Endpoint: Buffer is loaded and ready to be sent.
|
slime@2
|
169 |
* OUT Endpoint: Buffer is free to be written to by SIE.
|
slime@2
|
170 |
*
|
slime@2
|
171 |
* Input: byte buffer_dsc: Root name of the buffer descriptor group.
|
slime@2
|
172 |
* i.e. ep0Bo, ep1Bi, ... Declared in usbmmap.c
|
slime@2
|
173 |
* Names can be remapped for readability, see examples in
|
slime@2
|
174 |
* usbcfg.h (#define HID_BD_OUT ep1Bo)
|
slime@2
|
175 |
*
|
slime@2
|
176 |
* Output: None
|
slime@2
|
177 |
*
|
slime@2
|
178 |
* Side Effects: None
|
slime@2
|
179 |
*
|
slime@2
|
180 |
* Overview: This macro should be called each time after:
|
slime@2
|
181 |
* 1. A non-EP0 IN endpoint buffer is populated with data.
|
slime@2
|
182 |
* 2. A non-EP0 OUT endpoint buffer is read.
|
slime@2
|
183 |
* This macro turns the buffer ownership to SIE for servicing.
|
slime@2
|
184 |
* It also toggles the DTS bit for synchronization.
|
slime@2
|
185 |
*
|
slime@2
|
186 |
* Note: None
|
slime@2
|
187 |
*****************************************************************************/
|
slime@2
|
188 |
#define mUSBBufferReady(buffer_dsc) \
|
slime@2
|
189 |
{ \
|
slime@2
|
190 |
buffer_dsc.Stat._byte &= _DTSMASK; /* Save only DTS bit */ \
|
slime@2
|
191 |
buffer_dsc.Stat.DTS = !buffer_dsc.Stat.DTS; /* Toggle DTS bit */ \
|
slime@2
|
192 |
buffer_dsc.Stat._byte |= _USIE|_DTSEN; /* Turn ownership to SIE */ \
|
slime@2
|
193 |
}
|
slime@2
|
194 |
|
slime@2
|
195 |
/** T Y P E S ****************************************************************/
|
slime@2
|
196 |
|
slime@2
|
197 |
/** E X T E R N S ************************************************************/
|
slime@2
|
198 |
|
slime@2
|
199 |
/** P U B L I C P R O T O T Y P E S *****************************************/
|
slime@2
|
200 |
void USBCheckBusStatus(void);
|
slime@2
|
201 |
void USBDriverService(void);
|
slime@2
|
202 |
void USBRemoteWakeup(void);
|
slime@2
|
203 |
void USBSoftDetach(void);
|
slime@2
|
204 |
|
slime@2
|
205 |
void ClearArray(byte* startAdr,byte count);
|
slime@2
|
206 |
#endif //USBDRV_H
|