debug.c
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:4k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 2001. Samsung Electronics, co. ltd  All rights reserved.
  7. --*/
  8. #include <windows.h>
  9. #include <nkintr.h>
  10. #include <S2440.h>
  11. #define     UART0BaudRate 115200
  12. #define     UART1BaudRate 115200 //38400
  13. /*
  14.     @func   void | OEMInitDebugSerial | Initialize serial debug monitor port.
  15.     @rdesc  N/A.
  16.     @comm    
  17.     @xref   
  18. */
  19. void OEMInitDebugSerial(void) 
  20. {
  21.     volatile UART1reg   *s2440UART1 = (UART1reg *)UART1_BASE;
  22.     volatile IOPreg     *s2440IOP = (IOPreg *)IOP_BASE;
  23.     
  24. // UART1 (TXD1 & RXD1) used for debug serial.
  25. //
  26. // Configure port H for UART.
  27. //
  28. s2440IOP->rGPHCON &= ~((3 << 8) | (3 << 10)); // Configure GPH2 and GHP3 for UART1 Tx and Rx, respectively.
  29. s2440IOP->rGPHCON |=  ((2 << 8) | (2 << 10)); //
  30. s2440IOP->rGPHUP  |=   (1 << 4) | (1 << 5); // Disable pull-up on TXD1 and RXD1.
  31. // Configure UART.
  32. //
  33. s2440UART1->rUFCON  = 0x0; // Disable the FIFO (TODO: do we need to enable the FIFO?)
  34. s2440UART1->rUMCON  = 0x0; // Disable AFC.
  35. s2440UART1->rULCON  = 0x3; // Normal mode, N81.
  36. s2440UART1->rUCON   = 0x245; // Rx pulse interrupt, Tx level interrupt, Rx error status interrupt enabled.
  37. s2440UART1->rUBRDIV = ( (int)(S2440PCLK/16.0/UART1BaudRate + 0.5) -1 ); // Set up baudrate (38400).
  38. }
  39. /*****************************************************************************
  40. *
  41. *
  42. *   @func   void    |   OEMWriteDebug | Display value to specified LED port.
  43. *
  44. *   The wIndex parameter can be used to specify a write to the discrete LEDS (if
  45. *   0xffff), otherwise is used as an offset (DWORD aligned) for the Alpha LEDS
  46. *   for triggering.
  47. */
  48. void 
  49. OEMWriteDebugLED(WORD wIndex, DWORD dwPattern)
  50. {
  51. volatile IOPreg *s2440IOP = (IOPreg * )IOP_BASE;
  52.     // The S24x0X01 Eval platform supports 4 LEDs..
  53. //
  54.     s2440IOP->rGPFDAT=(s2440IOP->rGPFDAT & 0xf) | ((dwPattern & 0xf)<<4);
  55. }
  56. /*****************************************************************************
  57. *
  58. *
  59. *   @func   void    |   OEMWriteDebugString | Display string to the monitor port.
  60. *
  61. *   @parm   unsigned short * | str |
  62. *           Points to the receiving buffer.
  63. */
  64. void 
  65. OEMWriteDebugString(unsigned short *str) 
  66. {
  67. // Loop through text string, sending characters.
  68. //
  69.     while (str && *str)
  70. {
  71.         OEMWriteDebugByte((unsigned char)*str++);
  72. }
  73. }
  74. /*****************************************************************************
  75. *
  76. *
  77. *   @func   void    |   OEMWriteDebugByte | Output byte to the monitor port.
  78. *
  79. *   @parm   unsigned char *| str |
  80. *           Points to the output buffer.
  81. */
  82. void 
  83. OEMWriteDebugByte(UCHAR ch) 
  84. {
  85.     volatile UART1reg *s2440UART1 = (UART1reg *)UART1_BASE;
  86. // Wait for transmit buffer to be empty.
  87. //
  88. while(!(s2440UART1->rUTRSTAT & 0x2))
  89. {
  90. }
  91.     s2440UART1->rUTXH = ch;
  92. }
  93. int
  94. OEMReadDebugByte() 
  95. {
  96.     unsigned char ch;
  97.     volatile UART1reg *s2440UART1 = (UART1reg *)UART1_BASE;
  98.     
  99. // Any receive data for us?
  100. //
  101.     if (!(s2440UART1->rUTRSTAT & 0x1))
  102. {
  103.         ch = OEM_DEBUG_READ_NODATA; // No data.
  104. }
  105.     else
  106. {
  107.         ch = s2440UART1->rURXH; // Read character.
  108. }
  109.     return (ch);
  110. }
  111. /*****************************************************************************
  112. *
  113. *
  114. *   @func   void    |   OEMClearDebugComError | Clear a debug communications error
  115. *
  116. */
  117. void
  118. OEMClearDebugCommError(void) 
  119. {
  120. unsigned int ReadReg;
  121.     volatile UART1reg *s2440UART1 = (UART1reg *)UART1_BASE;
  122.     
  123. // Reading UART error status clears the status.
  124. //
  125. ReadReg=s2440UART1->rUERSTAT;
  126. }