Oli Guest
|
FYI: PIC24 family / PCD compiler / USB working |
Posted: Fri May 08, 2009 7:44 am |
|
|
Hi All
Have just got the CCS USB drivers working with the PIC24FJ256GB110 and PCD V4.092, but came across one problem.
After spending a few hours trying to figure out any hardware problems, I found none. The USB drivers looked fine, but I had run out of ideas so I started from the basics - The datasheet says:
Quote: |
17.4.1 ENABLING DEVICE MODE
1. Reset the Ping-Pong Buffer Pointers by setting,
then clearing, the Ping-Pong Buffer Reset bit
PPBRST (U1CON<1>).
2. Disable all interrupts (U1IE and U1EIE = 00h).
3. Clear any existing interrupt flags by writing FFh
to U1IR and U1EIR.
4. Verify that VBUS is present (non OTG devices
only).
5. Enable the USB module by setting the USBEN
bit (U1CON<0>).
6. Set the OTGEN bit (U1OTGCON<2>) to enable
OTG operation.
7. Enable the endpoint zero buffer to receive the
first setup packet by setting the EPRXEN and
EPHSHK bits for Endpoint 0 (U1EP0<3,0> = 1).
8. Power up the USB module by setting the
USBPWR bit (U1PWRC<0>).
9. Enable the D+ pull-up resistor to signal an attach
by setting DPPULUP (U1OTGCON<7>). |
Implementing this looks like:
Code: | #word U1CON = 0x0494
#bit PPBRST = U1CON.1
#word U1IE = 0x048C
#word U1EIE = 0x0490
#word U1IR = 0x048A
#word U1EIR = 0x048E
#bit USBEN = U1CON.0
#word U1OTGCON = 0x0486
#bit OTGEN = U1OTGCON.2
#word U1EP0 = 0x04AA
#bit EPRXEN = U1EP0.3
#bit EPHSHK = U1EP0.0
#word U1PWRC = 0x0488
#bit USBPWR = U1PWRC.0
#bit DPPULUP = U1OTGCON.7 |
Code: | //PPBRST = 1; // not needed
//delay_ms(10); // not needed
//PPBRST = 0; // not needed
//U1IE = 0; // not needed
//U1EIE = 0; // not needed
//U1IR = 0xFFFF; // not needed
//U1EIR = 0xFFFF; // not needed
//verify Vbus is present
//USBEN = 1;
OTGEN = 1; // needed
//EPRXEN = 1;
//EPHSHK = 1; // not needed
//USBPWR = 1; // not needed
DPPULUP = 1; // needed |
Basically, setting OTGEN and DPPULUP to 1 enables the CCS drivers to work as described (in my case). Hope this helps somebody. |
|