summaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source/d_ioctrl.c
blob: 7c414f6a27184cfe8d6da1febc74a94f7f543e19 (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
94
95
96
97
98
99
100
101
102
//
// Date init       14.12.2004
//
// Revision date   $Date:: 16-05-06 9:50                                     $
//
// Filename        $Workfile:: d_ioctrl.c                                    $
//
// Version         $Revision:: 11                                            $
//
// Archive         $Archive:: /LMS2006/Sys01/Main/Firmware/Source/d_ioctrl.c $
//
// Platform        C
//


#include  <string.h>
#include  "stdconst.h"
#include  "m_sched.h"
#include  "d_ioctrl.h"
#include  "d_ioctrl.r"

/* Enum related to State */
enum
{
  RX_I2C      = 1,
  TX_I2C      = 2,
  UNLOCK_I2C  = 3,
  WAIT_I2C    = 4
};


static    UBYTE volatile State;

void      dIOCtrlInit(void)
{
  IOCTRLInit;
  State = UNLOCK_I2C;
}

void      dIOCtrlSetPower(UBYTE Power)
{
  INSERTPower(Power);
}

void      dIOCtrlSetPwm(UBYTE Pwm)
{
  INSERTPwm(Pwm);
}

void      dIOCtrlTransfer(void)
{
  UBYTE   B;

  CHECKTime(B);
  if (B)
  {
    switch(State)
    {
      case TX_I2C:
      {
        FULLDataTx;
        State = RX_I2C;
      }
      break;
      case RX_I2C:
      {
        FULLDataRx;
        State = TX_I2C;
      }
      break;
      case UNLOCK_I2C:
      {
        UNLOCKTx;
        State = WAIT_I2C;
      }
      break;
      case WAIT_I2C:
      {

        /* Intermediate state as unlock string is 47  */
        /* characters which is a little more than 1mS */
        State = TX_I2C;
      }
      break;
      default:
      {
        UNLOCKTx;
        State = WAIT_I2C;
      }
      break;
    }
    SETTime;
  }
}



void      dIOCtrlExit(void)
{
  IOCTRLExit;
}