firmware/usbdrv.h
author root@rika
Thu, 23 Apr 2009 19:10:12 +0200
changeset 30 7fd00015f62f
parent 2 2f55e5dd591d
permissions -rw-r--r--
several changes..
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