Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "_global.h"
  2. #include <avr/interrupt.h>
  3. #include "_uart.h"
  4.  
  5. u8 uart_rxbuff[UART_RXBUFF_SIZE];
  6. volatile u8 uart_rx_hd;
  7. u8 uart_rx_tl;
  8. u8 uart_txbuff[UART_TXBUFF_SIZE];
  9. u8 uart_tx_hd;
  10. volatile u8 uart_tx_tl;
  11.  
  12. //-----------------------------------------------------------------------------
  13.  
  14. void directuart_putchar(u8 ch)
  15. {
  16.  while ((UCSR1A&(1<<UDRE))==0) {}
  17.  UDR1=ch;
  18. }
  19.  
  20. //-----------------------------------------------------------------------------
  21.  
  22. void directuart_crlf(void)
  23. {
  24.  directuart_putchar(0x0d);
  25.  directuart_putchar(0x0a);
  26. }
  27.  
  28. //-----------------------------------------------------------------------------
  29.  
  30. void directuart_init(void)
  31. {
  32.  UBRR1H=0; UBRR1L=5;                            // 115200 baud (@11.0592 MHz)
  33.  UCSR1A=0;                                      // Double Speed
  34.  UCSR1C=(1<<UCSZ11)|(1<<UCSZ10)|(1<<USBS);      // 8databits, 2stopbits
  35.  UCSR1B=(1<<TXEN1);                             // Разрешаем передачу
  36.  flags1=(flags1&~ENABLE_UART)|ENABLE_DIRECTUART;
  37. }
  38.  
  39. //-----------------------------------------------------------------------------
  40.  
  41. void uart_chk_cts(void)
  42. {
  43.  if ( (!(PINB&(1<<PB6))) && (uart_tx_tl!=uart_tx_hd) )
  44.   UCSR1B|=(1<<UDRIE1);
  45. }
  46.  
  47. //-----------------------------------------------------------------------------
  48.  
  49. void uart_putchar(u8 ch)
  50. {
  51.  do
  52.  {
  53.   if (flags1&RTSCTS_FLOWCTRL) uart_chk_cts();
  54.  }while ( ((uart_tx_tl-uart_tx_hd-1)&U_TX_MASK)==0 );
  55.  uart_txbuff[uart_tx_hd]=ch;
  56.  uart_tx_hd=(uart_tx_hd+1)&U_TX_MASK;
  57.  if ( !(flags1&RTSCTS_FLOWCTRL) || !(PINB&(1<<PB6)) )
  58.   UCSR1B|=(1<<UDRIE1);
  59. }
  60.  
  61. //-----------------------------------------------------------------------------
  62.  
  63. u8 uart_getchar(u8 *ch)
  64. {
  65.  if (uart_rx_tl!=uart_rx_hd)
  66.  {
  67.   *ch=uart_rxbuff[uart_rx_tl];
  68.   uart_rx_tl=(uart_rx_tl+1)&U_RX_MASK;
  69.   if (((uart_rx_tl-uart_rx_hd-1)&U_RX_MASK)>21)
  70.    RTS_CLR();
  71.   return 1;
  72.  }
  73.  else
  74.   return 0;
  75. }
  76.  
  77. //-----------------------------------------------------------------------------
  78.  
  79. void uart_crlf(void)
  80. {
  81.  uart_putchar(0x0d);
  82.  uart_putchar(0x0a);
  83. }
  84.  
  85. //-----------------------------------------------------------------------------
  86.  
  87. void uart_dump512(u8 *buff)
  88. {
  89.  u8 stored_flags1;
  90.  stored_flags1=flags1;
  91.  flags1&=~(ENABLE_SD_LOG|ENABLE_SCR|ENABLE_DIRECTUART);
  92.  flags1|=ENABLE_UART;
  93.  print_msg(PGMSTR("\r\n;     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F"));
  94.  u16 i;
  95.  i=0;
  96.  do
  97.  {
  98.   uart_crlf();
  99.   print_hexbyte(i&0xff);
  100.   print_hexbyte(i>>8);
  101.   uart_putchar(0x20);
  102.   uart_putchar(0x20);
  103.   u8 j;
  104.   for (j=0;j<16;j++) print_hexbyte_for_dump(buff[i+j]);
  105.   uart_putchar(0x20);
  106.   for (j=0;j<16;j++) put_char_for_dump(buff[i+j]);
  107.   i+=16;
  108.  }while (i<512);
  109.  flags1=stored_flags1;
  110. }
  111.  
  112. //-----------------------------------------------------------------------------
  113.  
  114. void uart_init(void)
  115. {
  116.  UBRR1H=0; UBRR1L=5;                            // 115200 baud (@11.0592 MHz)
  117.  UCSR1A=0;                                      // Double Speed
  118.  UCSR1C=(1<<UCSZ11)|(1<<UCSZ10)|(1<<USBS);      // 8databits, 2stopbits
  119.  UCSR1B=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);         // Разрешаем приём, передачу и прерывания приёма
  120.  flags1=(flags1&~ENABLE_DIRECTUART)|ENABLE_UART;
  121.  
  122.  uart_rx_hd=0;
  123.  uart_rx_tl=0;
  124.  uart_tx_hd=0;
  125.  uart_tx_tl=0;
  126.  
  127.  RTS_CLR();
  128.  DDRD|=(1<<PD5);
  129.  DDRB&=~(1<<PB6);
  130. }
  131.  
  132. //-----------------------------------------------------------------------------
  133.