Statistics
| Branch: | Revision:

ddr4s / fw / wiringPi / wiringPi / wiringShift.c @ 32:cadb9025f1e0

History | View | Annotate | Download (2.23 KB)

1
/*
2
 * wiringShift.c:
3
 *        Emulate some of the Arduino wiring functionality. 
4
 *
5
 * Copyright (c) 2009-2012 Gordon Henderson.
6
 ***********************************************************************
7
 * This file is part of wiringPi:
8
 *        https://projects.drogon.net/raspberry-pi/wiringpi/
9
 *
10
 *    wiringPi is free software: you can redistribute it and/or modify
11
 *    it under the terms of the GNU Lesser General Public License as published by
12
 *    the Free Software Foundation, either version 3 of the License, or
13
 *    (at your option) any later version.
14
 *
15
 *    wiringPi is distributed in the hope that it will be useful,
16
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 *    GNU Lesser General Public License for more details.
19
 *
20
 *    You should have received a copy of the GNU Lesser General Public License
21
 *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
22
 ***********************************************************************
23
 */
24

    
25
#include <stdint.h>
26

    
27
#include "wiringPi.h"
28
#include "wiringShift.h"
29

    
30
/*
31
 * shiftIn:
32
 *        Shift data in from a clocked source
33
 *********************************************************************************
34
 */
35

    
36
uint8_t shiftIn (uint8_t dPin, uint8_t cPin, uint8_t order)
37
{
38
  uint8_t value = 0 ;
39
  int8_t  i ;
40
 
41
  if (order == MSBFIRST)
42
    for (i = 7 ; i >= 0 ; --i)
43
    {
44
      digitalWrite (cPin, HIGH) ;
45
      value |= digitalRead (dPin) << i ;
46
      digitalWrite (cPin, LOW) ;
47
    }
48
  else
49
    for (i = 0 ; i < 8 ; ++i)
50
    {
51
      digitalWrite (cPin, HIGH) ;
52
      value |= digitalRead (dPin) << i ;
53
      digitalWrite (cPin, LOW) ;
54
    }
55

    
56
  return value;
57
}
58

    
59
/*
60
 * shiftOut:
61
 *        Shift data out to a clocked source
62
 *********************************************************************************
63
 */
64

    
65
void shiftOut (uint8_t dPin, uint8_t cPin, uint8_t order, uint8_t val)
66
{
67
  int8_t i;
68

    
69
  if (order == MSBFIRST)
70
    for (i = 7 ; i >= 0 ; --i)
71
    {
72
      digitalWrite (dPin, val & (1 << i)) ;
73
      digitalWrite (cPin, HIGH) ;
74
      digitalWrite (cPin, LOW) ;
75
    }
76
  else
77
    for (i = 0 ; i < 8 ; ++i)
78
    {
79
      digitalWrite (dPin, val & (1 << i)) ;
80
      digitalWrite (cPin, HIGH) ;
81
      digitalWrite (cPin, LOW) ;
82
    }
83
}