123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215 |
- #include "USB/usb.h"
- #include "USB/usb_function_generic.h"
- #include "HardwareProfile.h"
- #include "Benchmark.h"
- #if defined(PICDEM_FS_USB)
- #pragma config PLLDIV = 5
- #pragma config CPUDIV = OSC1_PLL2
- #pragma config USBDIV = 2
- #pragma config FOSC = HSPLL_HS
- #pragma config FCMEN = OFF
- #pragma config IESO = OFF
- #pragma config PWRT = OFF
- #pragma config BOR = ON
- #pragma config BORV = 3
- #pragma config VREGEN = ON
- #pragma config WDT = OFF
- #pragma config WDTPS = 32768
- #pragma config MCLRE = ON
- #pragma config LPT1OSC = OFF
- #pragma config PBADEN = OFF
- #pragma config STVREN = ON
- #pragma config LVP = OFF
- #pragma config XINST = OFF
- #pragma config CP0 = OFF
- #pragma config CP1 = OFF
- #pragma config CPB = OFF
- #pragma config WRT0 = OFF
- #pragma config WRT1 = OFF
- #pragma config WRTB = OFF
- #pragma config WRTC = OFF
- #pragma config EBTR0 = OFF
- #pragma config EBTR1 = OFF
- #pragma config EBTRB = OFF
- #elif defined(PIC18F87J50_PIM)
- #pragma config XINST = OFF
- #pragma config STVREN = ON
- #pragma config PLLDIV = 3
- #pragma config WDTEN = OFF
- #pragma config CP0 = OFF
- #pragma config CPUDIV = OSC1
- #pragma config IESO = OFF
- #pragma config FCMEN = OFF
- #pragma config FOSC = HSPLL
- #pragma config WDTPS = 32768
- #pragma config MSSPMSK = MSK5
- #pragma config CCP2MX = DEFAULT
- #elif defined(PIC18F46J50_PIM)
- #pragma config WDTEN = OFF
- #pragma config PLLDIV = 3
- #pragma config STVREN = ON
- #pragma config XINST = OFF
- #pragma config CPUDIV = OSC1
- #pragma config CP0 = OFF
- #pragma config OSC = HSPLL
- #pragma config T1DIG = ON
- #pragma config LPT1OSC = OFF
- #pragma config FCMEN = OFF
- #pragma config IESO = OFF
- #pragma config WDTPS = 32768
- #pragma config DSWDTOSC = INTOSCREF
- #pragma config RTCOSC = T1OSCREF
- #pragma config DSBOREN = OFF
- #pragma config DSWDTEN = OFF
- #pragma config DSWDTPS = 8192
- #pragma config IOL1WAY = OFF
- #pragma config MSSP7B_EN = MSK7
- #pragma config WPFP = PAGE_1
- #pragma config WPEND = PAGE_0
- #pragma config WPCFG = OFF
- #pragma config WPDIS = OFF
- #elif defined(LOW_PIN_COUNT_USB_DEVELOPMENT_KIT)
-
- #pragma config CPUDIV = NOCLKDIV
- #pragma config USBDIV = OFF
- #pragma config FOSC = HS
- #pragma config PLLEN = ON
- #pragma config FCMEN = OFF
- #pragma config IESO = OFF
- #pragma config PWRTEN = OFF
- #pragma config BOREN = OFF
- #pragma config BORV = 30
- #pragma config WDTEN = OFF
- #pragma config WDTPS = 32768
- #pragma config MCLRE = OFF
- #pragma config HFOFST = OFF
- #pragma config STVREN = ON
- #pragma config LVP = OFF
- #pragma config XINST = OFF
- #pragma config BBSIZ = OFF
- #pragma config CP0 = OFF
- #pragma config CP1 = OFF
- #pragma config CPB = OFF
- #pragma config WRT0 = OFF
- #pragma config WRT1 = OFF
- #pragma config WRTB = OFF
- #pragma config WRTC = OFF
- #pragma config EBTR0 = OFF
- #pragma config EBTR1 = OFF
- #pragma config EBTRB = OFF
- #elif defined(EXPLORER_16)
- #ifdef __PIC24FJ256GB110__
- _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2)
- _CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV2 & IOL1WAY_ON)
- #elif defined(__PIC24FJ64GB004__)
- _CONFIG1(WDTPS_PS1 & FWPSA_PR32 & WINDIS_OFF & FWDTEN_OFF & ICS_PGx1 & GWRP_OFF & GCP_OFF & JTAGEN_OFF)
- _CONFIG2(POSCMOD_HS & I2C1SEL_PRI & IOL1WAY_OFF & OSCIOFNC_ON & FCKSM_CSDCMD & FNOSC_PRIPLL & PLL96MHZ_ON & PLLDIV_DIV2 & IESO_ON)
- _CONFIG3(WPFP_WPFP0 & SOSCSEL_SOSC & WUTSEL_LEG & WPDIS_WPDIS & WPCFG_WPCFGDIS & WPEND_WPENDMEM)
- _CONFIG4(DSWDTPS_DSWDTPS3 & DSWDTOSC_LPRC & RTCOSC_SOSC & DSBOREN_OFF & DSWDTEN_OFF)
- #elif defined(__32MX460F512L__)
- #pragma config UPLLEN = ON
- #pragma config FPLLMUL = MUL_15
- #pragma config UPLLIDIV = DIV_2
- #pragma config FPLLIDIV = DIV_2
- #pragma config FPLLODIV = DIV_1
- #pragma config FPBDIV = DIV_1
- #pragma config FWDTEN = OFF
- #pragma config WDTPS = PS1
- #pragma config FCKSM = CSDCMD
- #pragma config OSCIOFNC = OFF
- #pragma config POSCMOD = HS
- #pragma config IESO = OFF
- #pragma config FSOSCEN = OFF
- #pragma config FNOSC = PRIPLL
- #pragma config CP = OFF
- #pragma config BWP = OFF
- #pragma config PWP = OFF
- #pragma config ICESEL = ICS_PGx2
- #pragma config DEBUG = ON
- #else
- #error No hardware board defined, see "HardwareProfile.h" and __FILE__
- #endif
- #elif defined(PIC24F_STARTER_KIT)
- _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2)
- _CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV3 & IOL1WAY_ON)
- #elif defined(PIC32_USB_STARTER_KIT)
- #pragma config UPLLEN = ON
- #pragma config FPLLMUL = MUL_15
- #pragma config UPLLIDIV = DIV_2
- #pragma config FPLLIDIV = DIV_2
- #pragma config FPLLODIV = DIV_1
- #pragma config FPBDIV = DIV_1
- #pragma config FWDTEN = OFF
- #pragma config WDTPS = PS1
- #pragma config FCKSM = CSDCMD
- #pragma config OSCIOFNC = OFF
- #pragma config POSCMOD = HS
- #pragma config IESO = OFF
- #pragma config FSOSCEN = OFF
- #pragma config FNOSC = PRIPLL
- #pragma config CP = OFF
- #pragma config BWP = OFF
- #pragma config PWP = OFF
- #pragma config ICESEL = ICS_PGx2
- #pragma config DEBUG = ON
- #elif defined(BREADBOARD)
- #if defined(__PIC24FJ64GB002__)
- _CONFIG1(WDTPS_PS1 & FWPSA_PR32 & WINDIS_OFF & FWDTEN_OFF & ICS_PGx3 & GWRP_OFF & GCP_OFF & JTAGEN_OFF)
- _CONFIG2(POSCMOD_HS & I2C1SEL_PRI & IOL1WAY_OFF & OSCIOFNC_OFF & FCKSM_CSDCMD & FNOSC_PRIPLL & PLL96MHZ_ON & PLLDIV_DIV3 & IESO_ON)
- _CONFIG3(WPFP_WPFP0 & SOSCSEL_SOSC & WUTSEL_LEG & WPDIS_WPDIS & WPCFG_WPCFGDIS & WPEND_WPENDMEM)
- _CONFIG4(DSWDTPS_DSWDTPS3 & DSWDTOSC_LPRC & RTCOSC_LPRC & DSBOREN_OFF & DSWDTEN_OFF)
-
-
-
-
- #else
- #error No breadboard device defined, see "HardwareProfile.h" and __FILE__
- #endif
- #else
- #error No hardware board defined, see "HardwareProfile.h"
- #endif
- #pragma udata
- BOOL blinkStatusValid;
- static void InitializeSystem(void);
- void USBDeviceTasks(void);
- void YourHighPriorityISRCode(void);
- void YourLowPriorityISRCode(void);
- void UserInit(void);
- void ProcessIO(void);
- void BlinkUSBStatus(void);
- #if defined(__18CXX)
-
-
-
-
-
-
-
-
-
-
-
-
-
- #if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)
- #define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
- #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
- #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
- #elif defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
- #define REMAPPED_RESET_VECTOR_ADDRESS 0x800
- #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x808
- #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x818
- #else
- #define REMAPPED_RESET_VECTOR_ADDRESS 0x00
- #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x08
- #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x18
- #endif
-
- #if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
- extern void _startup (void);
- #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
- void _reset (void)
- {
- _asm goto _startup _endasm
- }
- #endif
- #pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
- void Remapped_High_ISR (void)
- {
- _asm goto YourHighPriorityISRCode _endasm
- }
- #pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
- void Remapped_Low_ISR (void)
- {
- _asm goto YourLowPriorityISRCode _endasm
- }
-
- #if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #pragma code HIGH_INTERRUPT_VECTOR = 0x08
- void High_ISR (void)
- {
- _asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm
- }
- #pragma code LOW_INTERRUPT_VECTOR = 0x18
- void Low_ISR (void)
- {
- _asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm
- }
- #endif
- #pragma code
-
-
-
- #pragma interrupt YourHighPriorityISRCode
- void YourHighPriorityISRCode()
- {
-
-
-
-
- #if defined(USB_INTERRUPT)
- USBDeviceTasks();
- #endif
-
- }
- #pragma interruptlow YourLowPriorityISRCode
- void YourLowPriorityISRCode()
- {
-
-
-
-
-
- }
- #elif defined(__C30__)
- #if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)
-
- #endif
- #endif
- #pragma code
- #if defined(__18CXX)
- void main(void)
- #else
- int main(void)
- #endif
- {
- InitializeSystem();
- #if defined(USB_INTERRUPT)
- USBDeviceAttach();
- #endif
- while(1)
- {
- #if defined(USB_POLLING)
-
- USBDeviceTasks();
-
-
-
-
-
-
-
-
-
-
-
- #endif
-
-
-
- Benchmark_ProcessIO();
- }
- }
- static void InitializeSystem(void)
- {
- #if (defined(__18CXX) & !defined(PIC18F87J50_PIM))
- ADCON1 |= 0x0F;
- #elif defined(__C30__)
- AD1PCFGL = 0xFFFF;
- #elif defined(__C32__)
- AD1PCFG = 0xFFFF;
- #endif
- #if defined(PIC18F87J50_PIM) || defined(PIC18F46J50_PIM)
-
-
-
-
-
-
- {
- unsigned int pll_startup_counter = 600;
- OSCTUNEbits.PLLEN = 1;
- while(pll_startup_counter--);
- }
-
- #endif
- #if defined(PIC18F87J50_PIM)
-
-
-
- WDTCONbits.ADSHR = 1;
- ANCON0 = 0xFF;
- ANCON1 = 0xFF;
- WDTCONbits.ADSHR = 0;
- #endif
- #if defined(PIC18F46J50_PIM)
-
-
-
- ANCON0 = 0xFF;
- ANCON1 = 0xFF;
- #endif
-
- #if defined(PIC24FJ64GB004_PIM)
-
-
-
-
-
-
- {
- unsigned int pll_startup_counter = 600;
- CLKDIVbits.PLLEN = 1;
- while(pll_startup_counter--);
- }
-
- #endif
- #if defined(USE_USB_BUS_SENSE_IO)
- tris_usb_bus_sense = INPUT_PIN;
- #endif
-
- #if defined(USE_SELF_POWER_SENSE_IO)
- tris_self_power = INPUT_PIN;
- #endif
- UserInit();
- USBDeviceInit();
-
- }
- void UserInit(void)
- {
- mInitAllLEDs();
- mInitAllSwitches();
- blinkStatusValid = TRUE;
- Benchmark_Init();
- }
- void BlinkUSBStatus(void)
- {
- static WORD led_count=0;
-
- if(led_count == 0)led_count = 10000U;
- led_count--;
- #define mLED_Both_Off() {mLED_1_Off();mLED_2_Off();}
- #define mLED_Both_On() {mLED_1_On();mLED_2_On();}
- #define mLED_Only_1_On() {mLED_1_On();mLED_2_Off();}
- #define mLED_Only_2_On() {mLED_1_Off();mLED_2_On();}
- if(USBSuspendControl == 1)
- {
- if(led_count==0)
- {
- mLED_1_Toggle();
- if(mGetLED_1())
- {
- mLED_2_On();
- }
- else
- {
- mLED_2_Off();
- }
- }
- }
- else
- {
- if(USBDeviceState == DETACHED_STATE)
- {
- mLED_Both_Off();
- }
- else if(USBDeviceState == ATTACHED_STATE)
- {
- mLED_Both_On();
- }
- else if(USBDeviceState == POWERED_STATE)
- {
- mLED_Only_1_On();
- }
- else if(USBDeviceState == DEFAULT_STATE)
- {
- mLED_Only_2_On();
- }
- else if(USBDeviceState == ADDRESS_STATE)
- {
- if(led_count == 0)
- {
- mLED_1_Toggle();
- mLED_2_Off();
- }
- }
- else if(USBDeviceState == CONFIGURED_STATE)
- {
- if(led_count==0)
- {
- mLED_1_Toggle();
- if(mGetLED_1())
- {
- mLED_2_Off();
- }
- else
- {
- mLED_2_On();
- }
- }
- }
- }
- }
- void USBCBSuspend(void)
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #if defined(__C30__)
- #if 0
- U1EIR = 0xFFFF;
- U1IR = 0xFFFF;
- U1OTGIR = 0xFFFF;
- IFS5bits.USB1IF = 0;
- IEC5bits.USB1IE = 1;
- U1OTGIEbits.ACTVIE = 1;
- U1OTGIRbits.ACTVIF = 1;
- Sleep();
- #endif
- #endif
- }
- #if 0
- void __attribute__ ((interrupt)) _USB1Interrupt(void)
- {
- #if !defined(self_powered)
- if(U1OTGIRbits.ACTVIF)
- {
- IEC5bits.USB1IE = 0;
- U1OTGIEbits.ACTVIE = 0;
- IFS5bits.USB1IF = 0;
-
-
- USBClearInterruptFlag(USBIdleIFReg,USBIdleIFBitNum);
-
- }
- #endif
- }
- #endif
- void USBCBWakeFromSuspend(void)
- {
-
-
-
-
-
-
-
-
- }
- void USBCB_SOF_Handler(void)
- {
-
-
- }
- void USBCBErrorHandler(void)
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- void USBCBStdSetDscHandler(void)
- {
-
- }
- void USBCBSendResume(void)
- {
- static WORD delay_count;
-
- USBResumeControl = 1;
-
- delay_count = 1800U;
- do
- {
- delay_count--;
- }while(delay_count);
- USBResumeControl = 0;
- }
- BOOL USER_USB_CALLBACK_EVENT_HANDLER(USB_EVENT event, void *pdata, WORD size)
- {
- switch(event)
- {
- case EVENT_CONFIGURED:
- USBCBInitEP();
- break;
- case EVENT_SET_DESCRIPTOR:
- USBCBStdSetDscHandler();
- break;
- case EVENT_EP0_REQUEST:
- USBCBCheckOtherReq();
- break;
- case EVENT_SOF:
- USBCB_SOF_Handler();
- break;
- case EVENT_SUSPEND:
- USBCBSuspend();
- break;
- case EVENT_RESUME:
- USBCBWakeFromSuspend();
- break;
- case EVENT_BUS_ERROR:
- USBCBErrorHandler();
- break;
- case EVENT_TRANSFER:
- Nop();
- break;
- default:
- break;
- }
- return TRUE;
- }
|