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

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. Module Name:  
  8. Abstract:
  9. OEM Debug Serial Monitor Routines
  10. rev:
  11. 2002.4.3 : first S3C2410 version (SOC)
  12. 2002.1.28 : CE.NET initial port (kwangyoon LEE, kwangyoon@samsung.com)
  13. Notes: 
  14. --*/
  15. #include <windows.h>
  16. #include "p2.h"
  17. ///#define USE_DEC_UART 1
  18. #undef SYSTEM_ASIC_REGS_BASE
  19. //#undef DMA_BUFFER_BASE
  20. #define SYSTEM_ASIC_REGS_BASE 0x20000000
  21. //#define DMA_BUFFER_BASE 0xC7000000
  22. #define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg))
  23. #define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg)) = (val)
  24. #define READ_REGISTER_USHORT(reg) (*(volatile unsigned short * const)(reg))
  25. #define WRITE_REGISTER_USHORT(reg, val) (*(volatile unsigned short * const)(reg)) = (val)
  26. #define READ_REGISTER_UCHAR(reg) (*(volatile unsigned char * const)(reg))
  27. #define WRITE_REGISTER_UCHAR(reg, val) (*(volatile unsigned char * const)(reg)) = (val)
  28. // DMA buffers for the HAL's serial port.
  29. #define DMA_PAGE_SIZE 0x800
  30. // Warning: when written to the DMA registers, the high 6 bits (31:26)
  31. // will be read as all zeros.
  32. #define DMA_RX_PAGE      DMA_BUFFER_BASE+0x2000
  33. #define DMA_TX_PAGE      (DMA_RX_PAGE + 2 * DMA_PAGE_SIZE)
  34. #define pCSRA (DEBUG_SER_BASE + SER_CSR_A)
  35. #define pCSRB (DEBUG_SER_BASE + SER_CSR_B)
  36. extern void WhereAmI(void);
  37. //extern void ShowValue(int value);
  38. /*****************************************************************************
  39. *
  40. *
  41. *   @func   void    |   OEMInitDebugSerial | Initialize debug monitor port.
  42. *
  43. *   NOTE: This function MUST NOT use any global variables!!!!!!
  44. */
  45. void InitSerial(void) 
  46. {
  47. }
  48. // Define UART physical register.
  49. #define     phUTRSTAT0      (*(volatile unsigned int *)0x15000010)
  50. #define     phUTXH0         (*(volatile unsigned char *)0x15000020)
  51. /*****************************************************************************
  52. *
  53. *
  54. *   @func   void    |   OEMWriteDebugByte | Output byte to the monitor port.
  55. *
  56. *   @parm   unsigned char *| str |
  57. *           Points to the output buffer.
  58. */
  59. void 
  60. WriteByte(UCHAR ch) 
  61. {
  62. #if 1
  63.     int i;
  64.     if(ch == 'n')  {
  65.         while(!(phUTRSTAT0 & 0x2)) ;
  66.     for(i=0; i<0x100; i++) ;//because the slow response of hyper_terminal 
  67.     phUTXH0 = 'r';
  68. }
  69. while(!(phUTRSTAT0 & 0x2)); //Wait until THR is empty.
  70.     for(i=0; i<0x100; i++) ;
  71.     phUTXH0 = ch;
  72.     
  73. #endif    
  74. }
  75. /*****************************************************************************
  76. *
  77. *
  78. *   @func   void    |   OEMWriteDebugString | Display string to the monitor port.
  79. *
  80. *   @parm   unsigned short * | str |
  81. *           Points to the receiving buffer.
  82. */
  83. void 
  84. WriteString(unsigned char *str) {
  85.     // Send message to serial port
  86.     while (*str)
  87.         WriteByte(*str++);
  88. }
  89. void WriteHex(long *ptr, int length)
  90. {
  91. #if 0 // jlsfix - stub for now
  92.     int count;
  93.     for (count = 0 ; count < length ; ++count) {
  94.         if ((count & 7) == 0) {
  95.             WriteByte('r');
  96.             WriteByte('n');
  97.             PutHex((long)ptr);
  98.             WriteByte(':');
  99.         }
  100.         WriteByte(' ');
  101.         PutHex(*ptr++);
  102.     }   
  103.     WriteByte('r');
  104.     WriteByte('n');
  105. #endif
  106. }