Top secrets sources NedoPC pentevo

Rev

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

#include "_global.h"
#include <avr/interrupt.h>
#include "_uart.h"

u8 uart_rxbuff[UART_RXBUFF_SIZE];
volatile u8 uart_rx_hd;
u8 uart_rx_tl;
u8 uart_txbuff[UART_TXBUFF_SIZE];
u8 uart_tx_hd;
volatile u8 uart_tx_tl;

//-----------------------------------------------------------------------------

void directuart_putchar(u8 ch)
{
 while ((UCSR1A&(1<<UDRE))==0) {}
 UDR1=ch;
}

//-----------------------------------------------------------------------------

void directuart_crlf(void)
{
 directuart_putchar(0x0d);
 directuart_putchar(0x0a);
}

//-----------------------------------------------------------------------------

void directuart_init(void)
{
 UBRR1H=0; UBRR1L=5;                            // 115200 baud (@11.0592 MHz)
 UCSR1A=0;                                      // Double Speed
 UCSR1C=(1<<UCSZ11)|(1<<UCSZ10)|(1<<USBS);      // 8databits, 2stopbits
 UCSR1B=(1<<TXEN1);                             //  §à¥è ¥¬ ¯¥à¥¤ çã
 flags1=(flags1&~ENABLE_UART)|ENABLE_DIRECTUART;
}

//-----------------------------------------------------------------------------

void uart_chk_cts(void)
{
 if ( (!(PINB&(1<<PB6))) && (uart_tx_tl!=uart_tx_hd) )
  UCSR1B|=(1<<UDRIE1);
}

//-----------------------------------------------------------------------------

void uart_putchar(u8 ch)
{
 do
 {
  if (flags1&RTSCTS_FLOWCTRL) uart_chk_cts();
 }while ( ((uart_tx_tl-uart_tx_hd-1)&U_TX_MASK)==0 );
 uart_txbuff[uart_tx_hd]=ch;
 uart_tx_hd=(uart_tx_hd+1)&U_TX_MASK;
 if ( !(flags1&RTSCTS_FLOWCTRL) || !(PINB&(1<<PB6)) )
  UCSR1B|=(1<<UDRIE1);
}

//-----------------------------------------------------------------------------

u8 uart_getchar(u8 *ch)
{
 if (uart_rx_tl!=uart_rx_hd)
 {
  *ch=uart_rxbuff[uart_rx_tl];
  uart_rx_tl=(uart_rx_tl+1)&U_RX_MASK;
  if (((uart_rx_tl-uart_rx_hd-1)&U_RX_MASK)>21)
   RTS_CLR();
  return 1;
 }
 else
  return 0;
}

//-----------------------------------------------------------------------------

void uart_crlf(void)
{
 uart_putchar(0x0d);
 uart_putchar(0x0a);
}

//-----------------------------------------------------------------------------

void uart_dump512(u8 *buff)
{
 u8 stored_flags1;
 stored_flags1=flags1;
 flags1&=~(ENABLE_SD_LOG|ENABLE_SCR|ENABLE_DIRECTUART);
 flags1|=ENABLE_UART;
 print_msg(PGMSTR("\r\n;     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F"));
 u16 i;
 i=0;
 do
 {
  uart_crlf();
  print_hexbyte(i&0xff);
  print_hexbyte(i>>8);
  uart_putchar(0x20);
  uart_putchar(0x20);
  u8 j;
  for (j=0;j<16;j++) print_hexbyte_for_dump(buff[i+j]);
  uart_putchar(0x20);
  for (j=0;j<16;j++) put_char_for_dump(buff[i+j]);
  i+=16;
 }while (i<512);
 flags1=stored_flags1;
}

//-----------------------------------------------------------------------------

void uart_init(void)
{
 UBRR1H=0; UBRR1L=5;                            // 115200 baud (@11.0592 MHz)
 UCSR1A=0;                                      // Double Speed
 UCSR1C=(1<<UCSZ11)|(1<<UCSZ10)|(1<<USBS);      // 8databits, 2stopbits
 UCSR1B=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);         //  §à¥è ¥¬ ¯à¨ñ¬, ¯¥à¥¤ çã ¨ ¯à¥à뢠­¨ï ¯à¨ñ¬ 
 flags1=(flags1&~ENABLE_DIRECTUART)|ENABLE_UART;

 uart_rx_hd=0;
 uart_rx_tl=0;
 uart_tx_hd=0;
 uart_tx_tl=0;

 RTS_CLR();
 DDRD|=(1<<PD5);
 DDRB&=~(1<<PB6);
}

//-----------------------------------------------------------------------------