puts.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Debug routines which directly access the uart.
  3.  */
  4. #include <linux/types.h>
  5. #include <asm/galileo-boards/ev96100.h>
  6. //#define SERIAL_BASE    EV96100_UART0_REGS_BASE
  7. #define SERIAL_BASE    0xBD000020
  8. #define NS16550_BASE   SERIAL_BASE
  9. #define SERA_CMD       0x0D
  10. #define SERA_DATA      0x08
  11. //#define SERB_CMD       0x05
  12. #define SERB_CMD       20
  13. #define SERB_DATA      0x00
  14. #define TX_BUSY        0x20
  15. #define TIMEOUT    0xffff
  16. #undef SLOW_DOWN
  17. static const char digits[16] = "0123456789abcdef";
  18. static volatile unsigned char * const com1 = (unsigned char *)SERIAL_BASE;
  19. #ifdef SLOW_DOWN
  20. static inline void slow_down()
  21. {
  22.     int k;
  23.     for (k=0; k<10000; k++);
  24. }
  25. #else
  26. #define slow_down()
  27. #endif
  28. void
  29. putch(const unsigned char c)
  30. {
  31.     unsigned char ch;
  32.     int i = 0;
  33.     do {
  34.         ch = com1[SERB_CMD];
  35.         slow_down();
  36.         i++;
  37.         if (i>TIMEOUT) {
  38.             break;
  39.         }
  40.     } while (0 == (ch & TX_BUSY));
  41.     com1[SERB_DATA] = c;
  42. }
  43. void
  44. putchar(const unsigned char c)
  45. {
  46.     unsigned char ch;
  47.     int i = 0;
  48.     do {
  49.         ch = com1[SERB_CMD];
  50.         slow_down();
  51.         i++;
  52.         if (i>TIMEOUT) {
  53.             break;
  54.         }
  55.     } while (0 == (ch & TX_BUSY));
  56.     com1[SERB_DATA] = c;
  57. }
  58. void
  59. puts(unsigned char *cp)
  60. {
  61.     unsigned char ch;
  62.     int i = 0;
  63.     while (*cp) {
  64.         do {
  65.              ch = com1[SERB_CMD];
  66.             slow_down();
  67.             i++;
  68.             if (i>TIMEOUT) {
  69.                 break;
  70.             }
  71.         } while (0 == (ch & TX_BUSY));
  72.         com1[SERB_DATA] = *cp++;
  73.     }
  74.     putch('r');
  75.     putch('n');
  76. }
  77. void
  78. fputs(unsigned char *cp)
  79. {
  80.     unsigned char ch;
  81.     int i = 0;
  82.     while (*cp) {
  83.         do {
  84.              ch = com1[SERB_CMD];
  85.              slow_down();
  86.             i++;
  87.             if (i>TIMEOUT) {
  88.                 break;
  89.             }
  90.         } while (0 == (ch & TX_BUSY));
  91.         com1[SERB_DATA] = *cp++;
  92.     }
  93. }
  94. void
  95. put64(uint64_t ul)
  96. {
  97.     int cnt;
  98.     unsigned ch;
  99.     cnt = 16;            /* 16 nibbles in a 64 bit long */
  100.     putch('0');
  101.     putch('x');
  102.     do {
  103.         cnt--;
  104.         ch = (unsigned char)(ul >> cnt * 4) & 0x0F;
  105.                 putch(digits[ch]);
  106.     } while (cnt > 0);
  107. }
  108. void
  109. put32(unsigned u)
  110. {
  111.     int cnt;
  112.     unsigned ch;
  113.     cnt = 8;            /* 8 nibbles in a 32 bit long */
  114.     putch('0');
  115.     putch('x');
  116.     do {
  117.         cnt--;
  118.         ch = (unsigned char)(u >> cnt * 4) & 0x0F;
  119.                 putch(digits[ch]);
  120.     } while (cnt > 0);
  121. }