main.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. // Open source PIC USB stack echo demo
  2. // USB stack by JTR and Honken
  3. // CC-BY
  4. //
  5. // USB driver files should be in '..\dp_usb\'
  6. // Enter a USB VID and PID in prj_usb_config.h
  7. #include "prj_usb_config.h"
  8. //USB stack
  9. #include "usbcdc.h"
  10. #include "usb_defs.h"
  11. #include "pic-config.c"
  12. //FRAISE stack
  13. #include "fraisemaster.h"
  14. #include "stdio.h"
  15. #include <pic18fregs.h>
  16. #define BYTE unsigned char
  17. //board hardware setup
  18. //add your hardware here
  19. void SetupBoard(void) {
  20. #if defined (PIEDUSB)
  21. //disable some defaults
  22. ADCON1 |= 0b1111; //all pins digital
  23. CVRCON = 0b00000000;
  24. LATC = 0x00;
  25. TRISC = 0xFF;
  26. #endif
  27. // Initalize switchs and leds
  28. mInitAllLEDs();
  29. mInitSwitch();
  30. mInitSerDrv();
  31. }
  32. //void USBSuspend(void);
  33. //void _user_putc(char c)
  34. #ifndef PUTCHAR
  35. #define PUTCHAR(c) void putchar(char c) __wparam
  36. #endif
  37. PUTCHAR(c)
  38. {
  39. //putc_cdc(c);
  40. usbcdc_putchar(c);
  41. if (c=='\n')
  42. usbcdc_flush();
  43. }
  44. /*char getchar(BYTE ) {
  45. //usbcdc_flush();
  46. return usbcdc_getchar();
  47. }*/
  48. /*char pollchar() {
  49. if(!usbcdc_rd_ready()) return 0;*/
  50. void main(void)
  51. {
  52. BYTE RecvdByte;
  53. SetupBoard();
  54. mLED_1_Off();
  55. mLED_2_Off();
  56. //while(1);
  57. // Use our own special output function for STDOUT:
  58. //stdout = _H_USER;
  59. stdout = STREAM_USER;
  60. // initCDC(); // setup the CDC state machine
  61. usbcdc_init();
  62. mLED_1_On();
  63. // mLED_2_Off();
  64. RCONbits.IPEN = 1;
  65. IPR2bits.USBIP = 0;
  66. INTCONbits.GIEL = 1;
  67. INTCONbits.GIEH = 1;
  68. while (usbcdc_device_state != CONFIGURED)
  69. mLED_2_On();
  70. FraiseInit();
  71. // Main echo loop
  72. do {
  73. // If USB_INTERRUPT is not defined each loop should have at least one additional call to the usb handler to allow for control transfers.
  74. //#ifndef USB_INTERRUPTS
  75. // usb_handler();
  76. //#endif
  77. // Receive and send method 1
  78. // The CDC module will call usb_handler each time a BULK CDC packet is sent or received.
  79. // If there is a byte ready will return with the number of bytes available and received byte in RecvdByte
  80. /*if (poll_getc_cdc(&RecvdByte))
  81. putc_cdc(RecvdByte);*/
  82. //putchar(getchar());
  83. if(!FrGotLineFromUsb) {
  84. while(usbcdc_rd_ready()) {
  85. RecvdByte = usbcdc_getchar();
  86. if(RecvdByte=='\n') {
  87. FrGotLineFromUsb=1;
  88. //printf((const far rom char*)"rcvd line !\n");
  89. break;
  90. }
  91. else if(LineFromUsbLen<(sizeof(LineFromUsb)-1))
  92. LineFromUsb[LineFromUsbLen++]=RecvdByte;
  93. }
  94. }
  95. if(UIRbits.SOFIF==1) { FraiseSOF(); UIRbits.SOFIF=0; }
  96. FraiseService();
  97. } while (1);
  98. } //end main
  99. void InterruptHandlerLow(void) __interrupt 2
  100. {
  101. // usb_handler();
  102. // ClearGlobalUsbInterruptFlag();
  103. // FraiseISR();
  104. if(PIR2bits.USBIF)
  105. {
  106. usbcdc_handler();
  107. PIR2bits.USBIF=0;
  108. }
  109. }
  110. void InterruptHandlerHigh(void) __shadowregs __interrupt 1
  111. { //Also legacy mode interrupt.
  112. //usb_handler();
  113. //ClearGlobalUsbInterruptFlag();
  114. FraiseISR();
  115. /*if(PIR2bits.USBIF)
  116. {
  117. usbcdc_handler();
  118. PIR2bits.USBIF=0;
  119. }*/
  120. }