aboutsummaryrefslogtreecommitdiff
path: root/ATmega48/Source/d_output.c
blob: 7141ef9db63cf55746fc993accdfe88eecadcff3 (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
//
// Programmer      
//
// Date init       14.12.2004
//
// Reviser         $Author:: Dktochpe                                        $
//
// Revision date   $Date:: 17-08-05 8:20                                     $
//
// Filename        $Workfile:: d_output.c                                    $
//
// Version         $Revision:: 13                                            $
//
// Archive         $Archive:: /LMS2006/Sys01/Ioctrl/Firmware/Source/d_output $
//
// Platform        C
//

#include  "stdconst.h"
#include  "m_sched.h"
#include  "d_output.h"
#include  "d_output.r"

static    SBYTE Dutycycle[NOS_OF_AVR_OUTPUTS];
static    UBYTE Frequency;
static    UBYTE LastOutputMode;


void      dOutputInit(void)
{
  UBYTE   Tmp;

  OUTPUTInit;
  for (Tmp = 0;Tmp < NOS_OF_AVR_OUTPUTS;Tmp++)
  {
    Dutycycle[Tmp] = 0;
    OUTPUTWrite(Tmp,Dutycycle[Tmp]);
  }
  LastOutputMode = 0x00;
}


void      dOutputUpdate(UBYTE Brake)
{
  UBYTE   Tmp;
  UBYTE   TmpMask;

  Tmp = IoToAvr.PwmFreq;
  if (Frequency != Tmp)
  {
    if ((Tmp >= 1) && (Tmp <= 32))
    {
      Frequency = Tmp;
      OUTPUTFreq(Frequency);
      for (Tmp = 0;Tmp < NOS_OF_AVR_OUTPUTS;Tmp++)
      {
        Dutycycle[Tmp] = 0;
      }
    }
  }

  TmpMask = IoToAvr.OutputMode;

  for (Tmp = 0;Tmp < NOS_OF_AVR_OUTPUTS;Tmp++)
  {
    if (Brake == TRUE)
    {
      TmpMask               |= (0x01 << Tmp);
      IoToAvr.PwmValue[Tmp]  = 0;
    }
    if ((Dutycycle[Tmp] != IoToAvr.PwmValue[Tmp]) || ((LastOutputMode ^ TmpMask) & (0x01 << Tmp)))
    {
      OUTPUTWriteBrakeMask(TmpMask);
      Dutycycle[Tmp] = IoToAvr.PwmValue[Tmp];
      OUTPUTWrite(Tmp,Dutycycle[Tmp]);
    }
  }
  LastOutputMode = TmpMask;
  OUTPUTUpdate;
}


void      dOutputExit(void)
{
  OUTPUTExit;
}