123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- /*
- This work is licensed under the Creative Commons Attribution 3.0 Unported License.
- To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/
- or send a letter to
- Creative Commons,
- 171 Second Street,
- Suite 300,
- San Francisco,
- California,
- 94105,
- USA.
- // JTR v0.2a 26th Jan 2012
- // JTR v0.2b 10th March 2012
- Comments by JTR.
- This file is a combined header for all the PIC18F and PIC24F
- USB PICs for the Honken USB stack. It has been corrected for
- the PIC24 parts and slightly rearranged to reduce duplicate
- entries common to both PIC families.
- */
- #ifndef _picusb
- #define _picusb
- // JTR TODO Add support for the PIC24E and dsPIC33E parts when they are released.
- #if defined(__18F2450) || defined(__18F2455) || defined(__18F2458) || defined(__18F2550) || defined(__18F2553)|| defined(__18F4450) || defined(__18F4455) || defined(__18F4458) || defined(__18F4550) || defined(__18F4553)
- #define PIC_18F
- #define PIC18Fxx5x
- #define BD_RAM = 0x400
- #elif defined(__18F13K50) || defined(__18F14K50) //JTR add
- #define PIC_18F
- #define PIC18FxxK
- #define BD_RAM 0x200
- #elif defined(__18F24J50) || defined(__18F25J50) || defined(__18F26J50) || defined(__18F44J50) || defined(__18F45J50) || defined(__18F46J50)
- #define PIC_18F
- #define IS_18J
- #define PLLEN_REQD
- #define BD_RAM = 0x400
- #elif defined(__18F26J53) || defined(__18F27J53) || defined(__18F46J53) || defined(__18F47J53)
- #define PIC_18F
- #define IS_18J
- #define PLLEN_REQD
- #define BD_RAM = 0xd00
- #elif defined(__18F65J50) || defined(__18F66J50) || defined(__18F66J55) || defined(__18F67J50) || defined(__18F85J50) || defined(__18F86J50) || defined(__18F66J55) || defined(__18F67J50)
- #define PIC_18F
- #define IS_18J
- #define PLLEN_REQD
- #define USE_ALT_ANCON
- #define BD_RAM = 0x400
- #elif defined(__PIC24FJ64GB106__) || defined(__PIC24FJ128GB106__) || defined(__PIC24FJ192GB106__) || defined(__PIC24FJ256GB106__) || defined(__PIC24FJ64GB108__) || defined(__PIC24FJ128GB108__) || defined(__PIC24FJ192GB108__) || defined(__PIC24FJ256GB108__) || defined(__PIC24FJ64GB110__) || defined(__PIC24FJ128GB110__) || defined(__PIC24FJ192GB110__) || defined(__PIC24FJ256GB110__)
- #define PIC_24F
- #elif defined(__PIC24FJ32GB002__) || defined(__PIC24FJ32GB004__) || defined(__PIC24FJ64GB002__) || defined(__PIC24FJ64GB004__)
- #define PIC_24F
- #define PLLEN_REQD
- #elif defined(__PIC24FJ128GB210__) || defined(__PIC24FJ128GB206__) || defined(PIC24FJ256GB206__) || defined(PIC24FJ256GB210__)
- #define PIC_24F
- #define USE_ANS
- #elif defined(__PIC24FJ128DA106__) || defined(__PIC24FJ128DA110__) || defined(__PIC24FJ128DA206__) || defined(__PIC24FJ128DA210__) || defined(__PIC24FJ256DA106__) || defined(__PIC24FJ256DA110__) || defined(_PIC24FJ256DA206__) || defined(__PIC24FJ256DA210__)
- #define PIC_24F
- #define PLLEN_REQD
- #define USE_ANS
- #endif
- #if defined(__18F13K50) || defined(__18F14K50) //JTR add
- #define MAX_CHIP_EP (8u)
- #else
- #define MAX_CHIP_EP (16u)
- #endif
- /* COMMON PIC DEFINES TO BOTH PIC18 AND PIC24 */
- // JTR moved from usb_stack.h
- #define UOWN 0x80
- #define DTS 0x40
- #define KEN 0x20
- #define INCDIS 0x10
- #define DTSEN 0x08
- #define BSTALL 0x04
- #define BC98 0x03
- #define USB_DIR_OUT 0
- #define USB_DIR_IN 1
- #define USB_PP_EVEN 0
- #define USB_PP_ODD 1
- /* PIC DEFINES SPECIFIC TO PIC18 */
- #if defined(PIC_18F)
- #define MyProcessor // JTR check that a PIC is defined
- #include <p18cxxx.h>
- #define USTAT_ODD_EVEN (2) // JTR may be required for ping-pong BD* calculations and are different from PIC18 to PIC24
- #define USTAT_ODD_EVEN_SHIFT (1)
- // JTR removed not used and the values???
- // #define USB_EP_INTERRUPT (0)
- // #define USB_EP_BULK (1)
- // #define USB_EP_ISOCHRONOUS (2)
- #define USB_UEP_EPSTALL (0x01) // JTR Note. to self. these values are different between the PIC18 and PIC24
- #define USB_UEP_EPINEN (0x02)
- #define USB_UEP_EPOUTEN (0x04)
- #define USB_UEP_EPCONDIS (0x08)
- #define USB_UEP_EPHSHK (0x10)
- #define USB_EP_INOUT (USB_UEP_EPHSHK | USB_UEP_EPINEN | USB_UEP_EPOUTEN | USB_UEP_EPCONDIS)
- #define USB_EP_CONTROL (USB_UEP_EPHSHK | USB_UEP_EPINEN | USB_UEP_EPOUTEN)
- #define USB_EP_OUT (USB_UEP_EPHSHK | USB_UEP_EPOUTEN | USB_UEP_EPCONDIS)
- #define USB_EP_IN (USB_UEP_EPHSHK | USB_UEP_EPINEN | USB_UEP_EPCONDIS)
- #define USB_EP_NONE (0x00)
- typedef unsigned char usb_uep_t;
- #define USB_UEP ((usb_uep_t*) (&UEP0))
- #define USB_UEP0 UEP0
- #define USB_UEP1 UEP1
- #define USB_UEP2 UEP2
- #define USB_UEP3 UEP3
- #define USB_UEP4 UEP4
- #define USB_UEP5 UEP5
- #define USB_UEP6 UEP6
- #define USB_UEP7 UEP7
- #ifndef PIC18FxxK
- #define USB_UEP8 UEP8
- #define USB_UEP9 UEP9
- #define USB_UEP10 UEP10
- #define USB_UEP11 UEP11
- #define USB_UEP12 UEP12
- #define USB_UEP13 UEP13
- #define USB_UEP14 UEP14
- #define USB_UEP15 UEP15
- #endif
- /* Interrupt */
- #define USB_SOF 0x40
- #define USB_STALL 0x20
- #define USB_IDLE 0x10
- #define USB_TRN 0x08
- #define USB_RESUM 0x04
- #define USB_UERR 0x02
- #define USB_URST 0x01
- #define USB_RESET_FLAG UIRbits.URSTIF
- #define USB_ERROR_FLAG UIRbits.UERRIF
- #define USB_RESUME_FLAG UIRbits.ACTVIF
- #define USB_IDLE_FLAG UIRbits.IDLEIF
- #define USB_STALL_FLAG UIRbits.STALLIF
- #define USB_SOF_FLAG UIRbits.SOFIF
- #define USB_TRANSACTION_FLAG UIRbits.TRNIF
- #define UsbInterruptFlags() (UIR)
- #define UsbErrorInterruptFlags() (UEIR)
- #define ClearGlobalUsbInterruptFlag() PIR2bits.USBIF = 0
- #define TestUsbTrfInterruptFlag() UIR (x)
- #define ClearUsbInterruptFlag(x) UIR &= ~(x)
- #define ClearAllUsbInterruptFlags() UIR = 0
- #define ClearUsbErrorInterruptFlag(x) UEIR &= ~(x)
- #define ClearAllUsbErrorInterruptFlags() UEIR = 0
- #define DisableGlobalUsbInterrupt() PIE2bits.USBIE = 0
- #define DisableUsbInterrupt(x) UIE &= ~(x)
- #define DisableAllUsbInterrupts() UIE = 0
- #define DisableUsbErrorInterrupt(x) UEIE &= ~(x)
- #define DisableAllUsbErrorInterrupts() UEIE = 0
- #define EnableUsbGlobalInterrupt() PIE2bits.USBIE = 1
- #define EnableUsbPerifInterrupts(x) UIE |= (x)
- #define TestGlobalUsbInterruptEnable() (PIE2bits.USBIE)
- #define EnableAllUsbInterrupts() UIE = 0xFF
- #define EnableUsbErrorInterrupt(x) UEIE |= (x)
- #define EnableAllUsbErrorInterrupts() UEIE = 0xFF
- // Depreciated and eliminated March 10 2012
- //#define EnableUsbHighPriInterrupt() do { RCONbits.IPEN = 1; IPR2bits.USBIP = 1; INTCONbits.GIEH = 1;} while(0) // JTR new
- //#define EnableUsbLowPriInterrupt() do { RCONbits.IPEN = 1; IPR2bits.USBIP = 0; INTCONbits.GIEL = 1;} while(0) // JTR new
- // JTR TODO define for NO priority interrupt.
- /* UCON */
- #define ResetPPbuffers() do {UCONbits.PPBRST = 1; UCONbits.PPBRST=0;} while(0)
- #define SingleEndedZeroIsSet() (UCONbits.SE0)
- #define EnablePacketTransfer() UCONbits.PKTDIS = 0
- #define EnableUsb() UCONbits.USBEN = 1
- #define SignalResume() do {UCONbits.RESUME = 1; delay_ms(10); UCONbits.RESUME = 0;} while(0)
- #define SuspendUsb() UCONbits.SUSPND = 1
- #define WakeupUsb() do {UCONbits.SUSPND = 0; while(USB_RESUME_FLAG){USB_RESUME_FLAG = 0;}} while(0)
- /* UADDR */
- #define SetUsbAddress(x) (UADDR = (x))
- #define GetUsbAddress() (UADDR)
- /* USTAT */
- // typedef unsigned char usb_status_t;
- #define GetUsbTransaction() (USTAT)
- #define USB_STAT2EP(x) ((x>>3)&0x0F)
- #define USB_STAT2DIR(x) ((x>>2)&0x01)
- #define USB_STAT2ADDR(x) ((x>>2)&0x1F)
- #define USB_STAT2PPI(x) ((x>>1)&0x01)
- #define DIRBIT 0x4 // JTR addition. Different between PIC18 and PIC24
- /* Hardware implementations */
- #if defined USB_INTERNAL_PULLUPS
- #define USB_UCFG_UPUEN_VALUE (1<<4)
- #elif defined USB_EXTERNAL_PULLUPS
- #define USB_UCFG_UPUEN_VALUE (0)
- #else
- #error "Neither internal nor external pullups defined"
- #endif
- #if defined USB_INTERNAL_TRANSCIEVER
- #define USB_UCFG_UTRDIS_VALUE (0)
- #elif defined USB_EXTERNAL_TRANSCIEVER
- #define USB_UCFG_UTRDIS_VALUE (1<<3)
- #else
- #error "Neither internal nor external transciever defined"
- #endif
- #if defined USB_FULL_SPEED_DEVICE
- #define USB_UCFG_FSEN_VALUE (1<<2)
- #elif defined USB_LOW_SPEED_DEVICE
- #define USB_UCFG_FSEN_VALUE (0)
- #else
- #error "Neither internal nor external pullups defined"
- #endif
- #if defined USB_BUS_POWERED
- #ifndef usb_low_power_request
- /* Default low power mode is DUD */
- #define usb_low_power_request() Nop()
- #endif
- #ifndef usb_low_power_resume
- #define usb_low_power_resume() Nop()
- #endif
- #elif defined USB_SELF_POWERED
- #define usb_low_power_request() Nop()
- #define usb_low_power_resume() Nop()
- #else
- #error "No source of device power defined"
- #endif
- #ifndef USB_INTERNAL_VREG
- #warning "Use of internal voltage regulator not defined. User must supply 3.3V on Vusb pin."
- #endif
- //#define USB_DIR_OUT 0
- //#define USB_DIR_IN 1
- //#define USB_PP_EVEN 0
- //#define USB_PP_ODD 1
- /* PingPong buffer descriptor table index calculations */
- #if USB_PP_BUF_MODE == NO_PINGPONG
- #define USB_USTAT2BD(X) ( (X)/4 )
- #define USB_CALC_BD(ep, dir, sync) ( 2*(ep)+(dir) )
- #elif USB_PP_BUF_MODE == 1
- #error "USB_PP_BUF_MODE outside scope."
- #define USB_USTAT2BD(X) ( ((X)>2)? (X)/4+1 : (X)/2 )
- #define USB_CALC_BD(ep, dir, sync) ( ((ep)==0 && (dir)==0)? (sync) : 2*(ep)+(dir) )
- #elif USB_PP_BUF_MODE == 2
- #error "USB_PP_BUF_MODE outside scope."
- #define USB_USTAT2BD(X) ( (X)/2 )
- #define USB_CALC_BD(ep, dir, sync) ( 4*(ep)+2*(dir)+(sync) )
- #elif USB_PP_BUF_MODE == 3
- #error "USB_PP_BUF_MODE outside scope."
- #define USB_USTAT2BD(X) ( ((X)>4)? (X)/2-2 : (X)/4 )
- #define USB_CALC_BD(ep, dir, sync) ( ((ep)==0)? (dir) : 4*(ep)+2*(dir)+(sync)-2 )
- #else
- #error "USB_PP_BUF_MODE outside scope."
- #endif
- #define USB_UCFG_REGISTER_VALUE ((USB_UCFG_UPUEN_VALUE) | \
- (USB_UCFG_UTRDIS_VALUE) | \
- (USB_UCFG_FSEN_VALUE) | \
- (USB_PP_BUF_MODE))
- #define ConfigureUsbHardware() do {UCFG = USB_UCFG_REGISTER_VALUE;} while(0)
- #define ROM far rom
- #define ROMPTR far rom
- #define ARCH_memcpy memcpypgm2ram
- typedef struct BDENTRY {
- unsigned char
- /* struct {
- unsigned BCH:2;
- unsigned BSTALL:1;
- unsigned DTSEN:1;
- unsigned INCDIS:1;
- unsigned KEN:1;
- unsigned DTS:1;
- unsigned UOWN:1;
- }*/
- BDSTAT;
- unsigned char BDCNT;
- unsigned char *BDADDR;
- } BDentry;
- #endif // End of specific PIC18 defines.
- /* PIC DEFINES SPECIFIC TO PIC24 FOLLOW */
- #if defined(PIC_24F)
- #define MyProcessor
- #include <p24fxxxx.h>
- #define USTAT_ODD_EVEN (4) // JTR PIC24 fixup potentially ?? Only required when ping-pong buffering is enabled.
- #define USTAT_ODD_EVEN_SHIFT (2) // JTR these are required for BD* calculations and are different for the PIC24
- /* Bitmasks */
- #define USB_UEP_EPHSHK (0x01)
- #define USB_UEP_EPSTALL (0x02)
- #define USB_UEP_EPINEN (0x04)
- #define USB_UEP_EPOUTEN (0x08)
- #define USB_UEP_EPCONDIS (0x10)
- #define USB_EP_INOUT (USB_UEP_EPHSHK | USB_UEP_EPINEN | USB_UEP_EPOUTEN | USB_UEP_EPCONDIS)
- #define USB_EP_CONTROL (USB_UEP_EPHSHK | USB_UEP_EPINEN | USB_UEP_EPOUTEN)
- #define USB_EP_OUT (USB_UEP_EPHSHK | USB_UEP_EPOUTEN | USB_UEP_EPCONDIS)
- #define USB_EP_IN (USB_UEP_EPHSHK | USB_UEP_EPINEN | USB_UEP_EPCONDIS)
- #define USB_EP_NONE (0x00)
- // JTR removed not used and the values??
- // #define USB_EP_INTERRUPT (0)
- // #define USB_EP_BULK (1)
- // #define USB_EP_ISOCHRONOUS (2)
- typedef unsigned int usb_uep_t; // JTR PIC24 fixup potentially ?? changed from char.
- // See http://dangerousprototypes.com/forum/viewtopic.php?f=39&t=1651&start=150#p17703
- // However the stack as modified by JTR does not actually use it. Then again it might as it is tested and works.
- #define USB_UEP ((usb_uep_t*)(&U1EP0))
- #define USB_UEP0 U1EP0
- #define USB_UEP1 U1EP1
- #define USB_UEP2 U1EP2
- #define USB_UEP3 U1EP3
- #define USB_UEP4 U1EP4
- #define USB_UEP5 U1EP5
- #define USB_UEP6 U1EP6
- #define USB_UEP7 U1EP7
- #define USB_UEP8 U1EP8
- #define USB_UEP9 U1EP9
- #define USB_UEP10 U1EP10
- #define USB_UEP11 U1EP11
- #define USB_UEP12 U1EP12
- #define USB_UEP13 U1EP13
- #define USB_UEP14 U1EP14
- #define USB_UEP15 U1EP15
- /* Interrupt */
- #define USB_STALL 0x0080
- #define USB_RESUM 0x0020
- #define USB_IDLE 0x0010
- #define USB_TRN 0x0008
- #define USB_SOF 0x0004
- #define USB_UERR 0x0002
- #define USB_URST 0x0001
- #define USB_RESET_FLAG U1IRbits.URSTIF
- #define USB_ERROR_FLAG U1IRbits.UERRIF
- #define USB_RESUME_FLAG U1IRbits.RESUMEIF
- #define USB_IDLE_FLAG U1IRbits.IDLEIF
- #define USB_STALL_FLAG U1IRbits.STALLIF
- #define USB_SOF_FLAG U1IRbits.SOFIF
- #define USB_TRANSACTION_FLAG U1IRbits.TRNIF
- #define UsbInterruptFlags() (U1IR)
- #define UsbErrorInterruptFlags() (U1EIR)
- #define ClearUsbInterruptFlag(x) U1IR = x
- #define ClearAllUsbInterruptFlags() U1IR = 0xFF
- #define ClearUsbErrorInterruptFlag(x) U1EIR = x
- #define ClearAllUsbErrorInterruptFlags() U1EIR = 0xFF
- #define DisableGlobalUsbInterrupt() IEC5bits.USB1IE=0 //PIE2bits.USBIE = 0 /*FIX*/
- #define DisableUsbInterrupt(x) U1IE &= ~(x)
- #define DisableAllUsbInterrupts() U1IE = 0
- #define DisableUsbErrorInterrupt(x) U1EIE &= ~(x)
- #define DisableAllUsbErrorInterrupts() U1EIE = 0
- #define EnableUsbGlobalInterrupt() IEC5bits.USB1IE=1 //PIE2bits.USBIE = 1 /*FIX*/
- #define TestGlobalUsbInterruptEnable() (IEC5bits.USB1IE)
- #define EnableUsbPerifInterrupts(x) U1IE |= (x)
- #define EnableAllUsbInterrupts() U1IE = 0x00FF
- #define EnableUsbErrorInterrupt(x) U1EIE |= (x)
- #define EnableAllUsbErrorInterrupts() U1EIE = 0x00FF
- #define EnableUsbHighPriInterrupt()
- #define ClearGlobalUsbInterruptFlag() IFS5bits.USB1IF = 0
- /* UCON */
- #define ResetPPbuffers() do {U1CONbits.PPBRST = 1; U1CONbits.PPBRST=0;} while(0)
- #define SingleEndedZeroIsSet() (U1CONbits.SE0)
- #define EnablePacketTransfer() U1CONbits.PKTDIS = 0
- #define EnableUsb() while(!U1CONbits.USBEN){U1CONbits.USBEN = 1;} // U1CONbits.USBEN = 1
- #define SignalResume() do {U1CONbits.RESUME = 1; delay_ms(10); U1CONbits.RESUME = 0;} while(0)
- #define SuspendUsb() U1PWRCbits.USUSPND = 1
- #define WakeupUsb() do {U1PWRCbits.USUSPND = 0; while(USB_RESUME_FLAG){USB_RESUME_FLAG = 0;}} while(0)
- /* UADDR */
- #define SetUsbAddress(x) (U1ADDR = (x))
- #define GetUsbAddress() (U1ADDR)
- /* USTAT */
- // JTR moved to usb_stack.h
- //typedef unsigned char usb_status_t;
- #define GetUsbTransaction() (U1STAT)
- #define USB_STAT2EP(x) ((x>>4)&0x0F) //((x>>3)&0x0F) JTR PIC24 fixups
- #define USB_STAT2DIR(x) ((x>>3)&0x01) //((x>>2)&0x01) ""
- #define USB_STAT2ADDR(x) ((x>>3)&0x1F) //((x>>2)&0x1F) ""
- #define USB_STAT2PPI(x) ((x>>2 &0x01) //((x>>1)&0x01) ""
- #define DIRBIT 0x8 // JTR add PIC24 fixup as the mask is 0x4 for the PIC18
- /* Hardware implementations */
- #if defined USB_INTERNAL_PULLUPS
- #elif defined USB_EXTERNAL_PULLUPS
- #define USB_U1OTGCON_UPUEN_VALUE (0)
- #else
- #error "Neither internal nor external pullups defined"
- #endif
- #if defined USB_INTERNAL_TRANSCIEVER
- #define USB_U1CNFG2_UTRDIS_VALUE (0)
- #elif defined USB_EXTERNAL_TRANSCIEVER
- #define USB_U1CNFG2_UTRDIS_VALUE (1)
- #else
- #error "Neither internal nor external transciever defined"
- #endif
- #if defined USB_FULL_SPEED_DEVICE
- #if defined USB_INTERNAL_PULLUPS
- #define USB_U1OTGCON_DPPULUP_VALUE (1<<7)
- #define USB_U1OTGCON_DMPULUP_VALUE (0)
- #else
- #define USB_U1OTGCON_DPPULUP_VALUE (0)
- #define USB_U1OTGCON_DMPULUP_VALUE (0)
- #endif
- #elif defined USB_LOW_SPEED_DEVICE
- #if defined USB_INTERNAL_PULLUPS
- #define USB_U1OTGCON_DPPULUP_VALUE (0)
- #define USB_U1OTGCON_DMPULUP_VALUE (1<<6)
- #else
- #define USB_U1OTGCON_DPPULUP_VALUE (0)
- #define USB_U1OTGCON_DMPULUP_VALUE (0)
- #endif
- #else
- #error "Neither internal nor external pullups defined"
- #endif
- #if defined USB_BUS_POWERED
- #ifndef usb_low_power_request
- /* Default low power mode is DUD */
- #define usb_low_power_request() Nop()
- #endif
- #ifndef usb_low_power_resume
- #define usb_low_power_resume() Nop()
- #endif
- #elif defined USB_SELF_POWERED
- #define usb_low_power_request() Nop()
- #define usb_low_power_resume() Nop()
- #else
- #error "No source of device power defined"
- #endif
- #ifndef USB_INTERNAL_VREG
- #warning "Use of internal voltage regulator not implemented. User must supply 3.3V on Vusb pin."
- #endif
- /* PingPong buffer descriptor table index calculations */
- #if USB_PP_BUF_MODE == NO_PINGPONG
- #define USB_USTAT2BD(X) ( (X)/8 ) //JTR PIC24 fixups
- #define USB_CALC_BD(ep, dir, sync) ( 2*(ep)+(dir) )
- // JTR TODO these values may need to be changed for the PIC24
- //#elif USB_PP_BUF_MODE == 1
- //#define USB_USTAT2BD(X) ( ((X)>2)? (X)/4+1 : (X)/2 )
- //#define USB_CALC_BD(ep, dir, sync) ( ((ep)==0 && (dir)==0)? (sync) : 2*(ep)+(dir) )
- //#elif USB_PP_BUF_MODE == 2
- //#define USB_USTAT2BD(X) ( (X)/2 )
- //#define USB_CALC_BD(ep, dir, sync) ( 4*(ep)+2*(dir)+(sync) )
- //#elif USB_PP_BUF_MODE == 3
- //#define USB_USTAT2BD(X) ( ((X)>4)? (X)/2-2 : (X)/4 )
- //#define USB_CALC_BD(ep, dir, sync) ( ((ep)==0)? (dir) : 4*(ep)+2*(dir)+(sync)-2 )
- #else
- #error "USB_PP_BUF_MODE outside scope."
- #endif
- // JTR PIC24 fixups some may not required but are "more correct." The added /256 is required!
- #define ConfigureUsbHardware() do { \
- U1CNFG1 = USB_PP_BUF_MODE; \
- U1CNFG2 = USB_U1CNFG2_UTRDIS_VALUE; \
- U1BDTP1 = (unsigned int) usb_bdt/256; \
- U1OTGCON = USB_U1OTGCON_DPPULUP_VALUE | \
- USB_U1OTGCON_DMPULUP_VALUE; \
- U1PWRCbits.USBPWR = 1; \
- } while(0)
- #define ROM __attribute__((space(auto_psv)))
- #define ROMPTR
- #define ARCH_memcpy memcpy
- typedef struct BDENTRY {
- unsigned char BDCNT; // JTR PIC24 fixup Note that the endianness is swapped from the PIC18
- // This is probably what had people hitting their heads!
- unsigned char BDSTAT;
- unsigned char *BDADDR;
- } BDentry;
- #endif
- #ifndef MyProcessor
- #error "No PIC family defined"
- #endif
- #endif
|