summaryrefslogtreecommitdiff
path: root/ATmega48/Source/d_pccomm.r
blob: 0660ac70d025f74535ff204e749ebb7fbc0954aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//
// Programmer      
//
// Date init       14.12.2004
//
// Reviser         $Author:: Dktochpe                                        $
//
// Revision date   $Date:: 22-02-05 11:10                                    $
//
// Filename        $Workfile:: d_pccomm.r                                    $
//
// Version         $Revision:: 6                                             $
//
// Archive         $Archive:: /LMS2006/Sys01/Ioctrl/Firmware/Source/d_pccomm $
//
// Platform        C
//

#ifdef    ATMEGAX8

#define   BAUD_RATE                     4800L

#define   RX_BUFFERSIZE                 (BYTES_TO_TX)
#define   TX_BUFFERSIZE                 (BYTES_TO_RX)

UBYTE     RxBuffer[RX_BUFFERSIZE];
UBYTE     RxPointer;

UBYTE     TxBuffer[TX_BUFFERSIZE];
UBYTE     TxPointer;

#pragma   language=extended
#pragma   vector = USART_RX_vect
__interrupt void RxInterrupt(void)
{
  UBYTE   *pBuffer;
  
  RxBuffer[RxPointer] = UDR0;
  RxPointer++;
  if (RxPointer >= RX_BUFFERSIZE)
  {
    pBuffer   = (UBYTE*)&IoToAvr;
    for (RxPointer = 0;RxPointer < RX_BUFFERSIZE;RxPointer++)
    {
      *pBuffer = RxBuffer[RxPointer];
      pBuffer++;
    }
    RxPointer = 0;
    pBuffer   = (UBYTE*)&IoFromAvr;
    for (TxPointer = 0;TxPointer < TX_BUFFERSIZE;TxPointer++)
    {
      TxBuffer[TxPointer] = *pBuffer;
      pBuffer++;
    }
    TxPointer = 0;
    UDR0      = TxBuffer[TxPointer];
    TxPointer++;
    UCSR0B   |= 0x40;
  }
}

#pragma   language=extended
#pragma   vector = USART_TX_vect
__interrupt void TxInterrupt(void)
{
  UDR0 = TxBuffer[TxPointer];
  TxPointer++;
  if (TxPointer >= TX_BUFFERSIZE)
  {
    UCSR0B &= ~0x40;
    TxPointer = 0;
    RxPointer = 0;
  }
}

#define   INITPcComm                    {\
                                          DDRD     |=  0x02;\
                                          DDRD     &= ~0x01;\
                                          UBRR0     =  (UWORD)((OSC/(16 * BAUD_RATE)) - 1);\
                                          UCSR0A    =  0x40;\
                                          UCSR0B    =  0x98;\
                                          UCSR0C    =  0x36;\
                                          RxPointer =  0;\
                                        }

#define   EXITPcComm                    {\
                                          UCSR0B    =  0x00;\
                                          PORTD    &= ~0x01;\
                                          DDRD     |=  0x01;\
                                        }


#endif