View previous topic :: View next topic |
Author |
Message |
Darren Logan Guest
|
Wanted : A simple USB example |
Posted: Tue May 27, 2003 3:51 pm |
|
|
Hello there,
Does anyone have a simple PIC to PC USB example (written in CCS C obviously)?
If so, I would be very greatful if you would let me have the code.
Admittadly, I do not understand USB fully - however all I would like to be able to do is have the PC communicate with a PIC (say send strings back and forth) in a simple no-brainer mannor!.
Am I right in thinking that one has to have a Vendor ID in order to use USB?
I think the earlier I get into this the better, as USB is obviously taking off "big style" - as they say.
Any help appreciated. Cheers!
Regards,
Darren
___________________________
This message was ported from CCS's old forum
Original Post ID: 144514797 |
|
|
alexz
Joined: 17 Sep 2004 Posts: 133 Location: UK
|
|
Posted: Thu Oct 14, 2004 5:23 am |
|
|
I would like to have it as well _________________ Alex |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Thu Oct 14, 2004 5:56 am |
|
|
Look in your examples & drivers directories. There are several there. |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1634 Location: Perth, Australia
|
|
Posted: Thu Oct 14, 2004 7:09 am |
|
|
Code for the FTDI245....
Code: |
#include .... // include CPU specific header and port definitions
#define TxCQsize 64 // Console Tx buffer size
#define RxCQsize 64 // Console Tx buffer size
//; Console Rx Ring Buffer control
byte Rx_HeadC;
byte Rx_TailC;
//; Console Tx Ring Buffer control
byte Tx_HeadC;
byte Tx_TailC;
// Console Tx buffer
byte Tx_BaseC[TxCQsize];
// Console Rx buffer
byte Rx_BaseC[RxCQsize];
void console_putc(char TxChar)
/************************************************************************************************
;
; Subroutine console_putc
;
; Stdout routine (BLOCKING) for putting characters to the console interface.
;
; On Exit:
;
; ***********************************************************************************************/
{
long counter = 65535; // setup counter to prevent lockup on failure of USB
//; test to determine if the USB device is active
if (!bit_test(USB_PwrEn))
{
while ((counter!=0) && bit_test(USB_WRF))
{
counter--;
}
if (Counter)
{
DBus = TxChar; //; write the character to the data bus
bit_set(USB_WR);
DBusDir = 0; //; set data bus to output
bit_clear(USB_WR);
DBusDir = 0xff; //; set data bus to input
}
else
{
// timeout waiting on USB
// .. do something else here such as write to serial port
putc(TxChar);
}
}
else
{
//; USB port not active, do something else like pass control to the async port code
putc(TxChar);
}
}
bit console_kbhit(void)
{
// test to determine if the USB device is active
return ((!bit_test(USB_PwrEn)) && (!bit_test(USB_RDF)));
}
char console_getc(void)
{
char Rx_Char = 0x00;
// test to determine if the USB device is active
// if not active pass exit
if ((!bit_test(USB_PwrEn)) && (!bit_test(USB_RDF)))
{
// here we have a character in the USB controller
DBusDir = 0xFF; // set the data bus to input
bit_clear(USB_RD);
Rx_Char = DBus;
bit_set(USB_RD);
}
return (Rx_Char);
}
void main()
{
init_pic();
//; initialise the I/O lines to the USB controller
bit_set(USB_FLUSH); //; initialise the flush FIFO pin
bit_clear(USB_WR); //; set default WR level
bit_set(USB_RD); //; set default RD level
//; initialise Console receive buffer pointers
Rx_HeadC = 0;
Rx_TailC = 0;
//; initialise Console transmit buffer pointers
Tx_HeadC = 0;
Tx_TailC = 0;
printf(console_putc,"Hello, world\r\n");
//ExecLoop
while (1)
{
// do something
// don't forget to scan the USB device
// note that the FTDI245 has a large input buffer
// there is not need to do a buffer to buffer copy
//
}
}
|
Have fun.... |
|
|
alexz
Joined: 17 Sep 2004 Posts: 133 Location: UK
|
|
Posted: Thu Oct 14, 2004 7:28 am |
|
|
Has anybode got a code for the USBN9603 _________________ Alex |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Thu Oct 14, 2004 8:16 am |
|
|
Like I said, CCS gives it to you:
Code: |
/////////////////////////////////////////////////////////////////////////
//// usbn960x.c ////
//// ////
//// National USBN960x Hardware layer for CCS's PIC USB driver. ////
//// ////
//// This file is part of CCS's PIC USB driver code, which includes: ////
//// usb_desc_*.h - an example set of config and device descriptor ////
//// usb.c - USB token and request handler code ////
//// usb.h - definitions, prototypes and global variables ////
//// ////
//// usbn960x.c is the hardware layer level driver for the CCS PIC ////
//// USB driver. You can replace usbn960x.c with another hardware ////
//// layer level and still use the other parts of the PIC USB ////
//// driver. ////
//// ////
//// Three examples are given using CCS's PIC USB driver. ////
//// ex_usb_scope.c is a bulk device that sends 512 bytes to the ////
//// host and uses the USBN960x. ex_usb_hid.c is a HID device and ////
//// uses the PIC16C7x5 or USBN960x. ex_usb_mouse.c is a HID mouse ////
//// and uses the PIC16C7x5 or USBN960x. ////
//// ////
//// This example USB peripheral layer was written and tested with ////
//// CCS's USB Full Speed demo board. When using your own design, ////
//// either wire your USB960x the same as our demo board or change ////
//// the port and pin definitions below. ////
//// ////
//// ************************* NOTE ************************** ////
//// This driver uses INT_EXT. It requires INT_EXT to interrupt the ////
//// PIC when an event has happened on the USBN960x. Because of ////
//// this code enables interrupts. A user modification can be made ////
//// to poll the USBN960x device instead of relying on an interrupt. ////
//// ////
|
|
|
|
alexz
Joined: 17 Sep 2004 Posts: 133 Location: UK
|
|
Posted: Thu Oct 14, 2004 8:21 am |
|
|
Yeah, I ve found it now, thanks _________________ Alex |
|
|
Guest
|
|
|
|