You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

93 lines
3.5 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2011 by Martin Schmoelzer *
  3. * <martin.schmoelzer@student.tuwien.ac.at> *
  4. * *
  5. * This program is free software; you can redistribute it and/or modify *
  6. * it under the terms of the GNU General Public License as published by *
  7. * the Free Software Foundation; either version 2 of the License, or *
  8. * (at your option) any later version. *
  9. * *
  10. * This program is distributed in the hope that it will be useful, *
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  13. * GNU General Public License for more details. *
  14. * *
  15. * You should have received a copy of the GNU General Public License *
  16. * along with this program; if not, write to the *
  17. * Free Software Foundation, Inc., *
  18. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  19. ***************************************************************************/
  20. #include "main.h"
  21. #include "shorttypes.h"
  22. #include "io.h"
  23. #include "usb.h"
  24. #include "protocol.h"
  25. extern void sudav_isr(void) __interrupt SUDAV_ISR;
  26. extern void sof_isr(void) __interrupt;
  27. extern void sutok_isr(void) __interrupt;
  28. extern void suspend_isr(void) __interrupt;
  29. extern void usbreset_isr(void) __interrupt;
  30. extern void ibn_isr(void) __interrupt;
  31. extern void ep0in_isr(void) __interrupt;
  32. extern void ep0out_isr(void) __interrupt;
  33. extern void ep1in_isr(void) __interrupt;
  34. extern void ep1out_isr(void) __interrupt;
  35. extern void ep2in_isr(void) __interrupt;
  36. extern void ep2out_isr(void) __interrupt;
  37. extern void ep3in_isr(void) __interrupt;
  38. extern void ep3out_isr(void) __interrupt;
  39. extern void ep4in_isr(void) __interrupt;
  40. extern void ep4out_isr(void) __interrupt;
  41. extern void ep5in_isr(void) __interrupt;
  42. extern void ep5out_isr(void) __interrupt;
  43. extern void ep6in_isr(void) __interrupt;
  44. extern void ep6out_isr(void) __interrupt;
  45. extern void ep7in_isr(void) __interrupt;
  46. extern void ep7out_isr(void) __interrupt;
  47. void io_init(void)
  48. {
  49. /* PORTxCFG register bits select alternate functions (1 == alternate function,
  50. * 0 == standard I/O)
  51. * OEx register bits turn on/off output buffer (1 == output, 0 == input)
  52. * OUTx register bits determine pin state of output
  53. * PINx register bits reflect pin state (high == 1, low == 0) */
  54. /* PORT A */
  55. PORTACFG = PIN_OE;
  56. OEA = PIN_U_OE | PIN_OE | PIN_RUN_LED | PIN_COM_LED;
  57. OUTA = PIN_RUN_LED | PIN_COM_LED;
  58. /* PORT B */
  59. PORTBCFG = 0x00;
  60. OEB = PIN_TDI | PIN_TMS | PIN_TCK | PIN_TRST | PIN_BRKIN | PIN_RESET
  61. | PIN_OCDSE;
  62. /* TRST and RESET signals are low-active but inverted by hardware, so we clear
  63. * these signals here! */
  64. OUTB = 0x00;
  65. /* PORT C */
  66. PORTCCFG = PIN_WR;
  67. OEC = PIN_TXD0 | PIN_WR;
  68. OUTC = 0x00;
  69. }
  70. int main(void)
  71. {
  72. io_init();
  73. usb_init();
  74. /* Enable Interrupts */
  75. EA = 1;
  76. /* Begin executing command(s). This function never returns. */
  77. command_loop();
  78. /* Never reached, but SDCC complains about missing return statement */
  79. return 0;
  80. }