hello everybody,
I try to use PIC18F45K50 with internal usb module for communicate with my PC.
I don't use a external crystal but only the internal clock (may be my mistake?)
If I use only USBService in my loop program, my HID device works well
but if I include USBOut, my program crash, and the PC lost the HID device
may be somebody can help me to find my mistake
Code:#CONFIG CONFIG PLLSEL = PLL3X ;3x clock multiplier CONFIG CFGPLLEN = ON ;PLL Enabled CONFIG CPUDIV = NOCLKDIV ;CPU uses system clock (no divide) CONFIG LS48MHZ = SYS48X8 ;System clock at 48 MHz, USB clock divider is set to 8 CONFIG FOSC = INTOSCIO ;Internal oscillator CONFIG PCLKEN = OFF ;Primary oscillator shutdown firmware controlled CONFIG FCMEN = OFF ;Fail-Safe Clock Monitor disabled CONFIG IESO = OFF ;Oscillator Switchover mode disabled CONFIG nPWRTEN = ON ;Power up timer enabled CONFIG BOREN = ON ;BOR controlled by firmware (SBOREN is enabled) CONFIG BORV = 190 ;BOR set to 1.9V nominal CONFIG nLPBOR = OFF ;Low-Power Brown-out Reset disabled CONFIG WDTEN = ON ;WDT enabled in hardware (SWDTEN ignored) CONFIG WDTPS = 512 ;1:512 CONFIG CCP2MX = RC1 ;CCP2 input/output is multiplexed with RC1 CONFIG PBADEN = OFF ;PORTB<5:0> pins are configured as digital I/O on Reset CONFIG T3CMX = RC0 ;T3CKI function is on RC0 CONFIG SDOMX = RB3 ;SDO function is on RB3 CONFIG MCLRE = ON ;MCLR pin enabled; RE3 input disabled CONFIG STVREN = ON ;Stack full/underflow will cause Reset CONFIG LVP = OFF ;Single-Supply ICSP disabled CONFIG XINST = OFF ;Instruction set extension and Indexed Addressing mode disabled #ENDCONFIG DEFINE OSC 48 USBBufferSizeMax con 16 ' maximum buffer size USBBufferSizeTX con 16 ' PIC -> PC USBBufferSizeRX con 16 ' PC -> PIC USBBuffer Var Byte[USBBufferSizeMax] USBBufferCount Var Byte ' include the HID descriptor include "DESCUSBProject.bas" OSCCON = %01110000 'OSCint = 16Mhz OSCCON2 = %00010000 'PLL enable TRISB = %11100001 ANSELB = %00000000 ' port B mode Digital TRISC = %10111111 ANSELC = %00000000 ' port C mode digital TRISD = %00001111 ANSELD = %00000000 ' port D mode digital TRISE = %11111111 ANSELE = %00000000 ' port E mode digital clear usbinit ' initialise USB... gosub DoUSBIn 'empty buffer hserout ["reset",13] ProgramStart: clearwdt 'gosub DoUSBIn USBBuffer[1] = 5 gosub DoUSBOut goto ProgramStart ' ************************************************************ ' * receive data from the USB bus * ' ************************************************************ DoUSBIn: USBBufferCount = USBBufferSizeRX ' RX buffer size USBService ' keep connection alive USBIn 1, USBBuffer, USBBufferCount, DoUSBIn ' read data, if available return ' ************************************************************ ' * wait for USB interface to attach * ' ************************************************************ DoUSBOut: USBBufferCount = USBBufferSizeTX ' TX buffer size USBService ' keep connection alive USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data return




Bookmarks