uart.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:3k
源码类别:

DVD

开发平台:

C/C++

  1. #include "config.h"
  2. #include "regmap.h"
  3. #include "uart.h"
  4. #ifndef DVDRELEASE
  5. #ifdef SOFT_UART_OUT   
  6. extern int PutSoftUartChar(BYTE *,int);
  7. #endif
  8. UINT16 uart_rp;
  9. UINT16 uart_wp;
  10. #define FIFOS 256
  11. char uart_buf[FIFOS];
  12. void reset_uart1_fifo()
  13. {
  14.   uart_rp = uart_wp = 0;
  15.   regs0->uart1_isc  = 0; // disable interrupt
  16. }
  17. int is_uart1_fifo_empty()
  18. {
  19. #if 0
  20.   unsigned rp = uart_rp;
  21.   unsigned wp = uart_wp;
  22.   if (wp==rp) return 1;
  23.   else
  24.   {
  25.     if (UART1_tx_rdy())
  26.     {
  27.       regs0->uart1_data = uart_buf[rp];
  28.       rp = rp+1;
  29.       if (rp>=FIFOS) rp=0;
  30.     }
  31.     uart_rp = rp;
  32.   }
  33.   return 0;
  34. #endif
  35.   return (uart_rp==uart_wp);
  36. }
  37. #define ENABLE_UART1_INTR() (regs0->uart1_isc=(1<<4))
  38. int is_uart1_fifo_full()
  39. {
  40.   int wp = uart_wp;
  41.   int rp = uart_rp;
  42.   int wpn;
  43.   wpn = wp+1;
  44.   if (wpn>=FIFOS) wpn=0;
  45.   if (wp!=rp) ENABLE_UART1_INTR(); // not-empty: enable interrupt
  46.   return (wpn==rp); // full-condition
  47. }
  48. void write_uart1(int c)
  49. {
  50. #ifdef SOFT_UART_OUT   
  51.   PutSoftUartChar((BYTE *)&c,1);
  52. #else 
  53.   int wp = uart_wp;
  54.   int rp = uart_rp;
  55.   int wpn;
  56.   wpn = wp+1;
  57.   if (wpn>=FIFOS) wpn=0;
  58.   if (wpn!=rp) {uart_buf[wp] = c; uart_wp = wpn;}
  59.   ENABLE_UART1_INTR(); // enable it.
  60. #endif  
  61. }
  62. void write_uart1_exact(int c)
  63. {
  64. #ifdef SOFT_UART_OUT   
  65. PutSoftUartChar((BYTE *)&c,1);
  66. #else
  67.   UART1_putc(c);
  68. #endif  
  69. }
  70. #include "intdef.h"
  71. #ifdef SERVO_UART
  72. UINT8 gcRS232Data[5];
  73. UINT8 gwWPtr=0;
  74. UINT8 cReveiveRs232=0;
  75. #endif
  76. void intr_uart1(void)
  77. {
  78.   int wp = uart_wp;
  79.   int rp = uart_rp;
  80. #ifdef SERVO_UART
  81.  #if 0
  82.   if (UART1_rx_rdy())
  83.   {
  84.       gcRS232Data[gwWPtr] = (regs0->uart1_data);
  85.   if (gwWPtr >= 4)
  86.   {
  87. cReveiveRs232 = 1;
  88. gwWPtr = 0;
  89.   }
  90.   else
  91.   {
  92. cReveiveRs232 = 0;
  93.     gwWPtr ++;
  94.   }
  95.   }
  96.  #endif
  97. #else
  98.   if (regs0->uart1_isc & 0x01)
  99.   {
  100.     while (wp!=rp && UART1_tx_rdy())
  101.     {
  102.       regs0->uart1_data = uart_buf[rp];
  103.       rp = rp+1;
  104.       if (rp>=FIFOS) rp=0;
  105.     }
  106.   }
  107.   if (rp==wp) regs0->uart1_isc = 0;
  108.   uart_rp = rp;
  109. #endif
  110.   regs0->intr_flag = INTR_UART1_INT;
  111. }
  112. #ifdef DVD728
  113. //
  114. // UART 0
  115. void reset_uart0_fifo()
  116. {
  117.   uart_rp = uart_wp = 0;
  118.   regs0->uart0_isc  = 0; // disable interrupt
  119. }
  120. int is_uart0_fifo_empty()
  121. {
  122.   return (uart_rp==uart_wp);
  123. }
  124. #define ENABLE_UART0_INTR() (regs0->uart0_isc=(1<<4))
  125. int is_uart0_fifo_full()
  126. {
  127.   int wp = uart_wp;
  128.   int rp = uart_rp;
  129.   int wpn;
  130.   wpn = wp+1;
  131.   if (wpn>=FIFOS) wpn=0;
  132.   if (wp!=rp) ENABLE_UART0_INTR(); // not-empty: enable interrupt
  133.   return (wpn==rp); // full-condition
  134. }
  135. void write_uart0(int c)
  136. {
  137. #ifdef SOFT_UART_OUT   
  138.   PutSoftUartChar((BYTE *)&c,1);
  139. #else 
  140.   int wp = uart_wp;
  141.   int rp = uart_rp;
  142.   int wpn;
  143.   wpn = wp+1;
  144.   if (wpn>=FIFOS) wpn=0;
  145.   if (wpn!=rp) {uart_buf[wp] = c; uart_wp = wpn;}
  146.   ENABLE_UART0_INTR(); // enable it.
  147. #endif  
  148. }
  149. void write_uart0_exact(int c)
  150. {
  151. #ifdef SOFT_UART_OUT   
  152. PutSoftUartChar((BYTE *)&c,1);
  153. #else
  154.   UART0_putc(c);
  155. #endif  
  156. }
  157. void intr_uart0(void)
  158. {
  159.   int wp = uart_wp;
  160.   int rp = uart_rp;
  161. #if 1
  162.   if (regs0->uart0_isc & 0x01)
  163.   {
  164.     while (wp!=rp && UART0_tx_rdy())
  165.     {
  166.       regs0->uart0_data = uart_buf[rp];
  167.       rp = rp+1;
  168.       if (rp>=FIFOS) rp=0;
  169.     }
  170.   }
  171.   if (rp==wp) regs0->uart0_isc = 0;
  172.   uart_rp = rp;
  173. #endif
  174.   regs0->intr_flag = INTR_UART0_INT;
  175. }
  176. #endif
  177. #else
  178. void intr_uart0(void) {}
  179. void intr_uart1(void) {}
  180. #endif