annotate service/busyboxArduino/LiquidCrystal_V1.2.1/LiquidCrystal/FastIO.cpp @ 959:d05562532887

add LiquidCrystal_V1.2.1 lib Ignore-this: ddfe8b0c1d6e19f210684520859d5a57 darcs-hash:20150104073516-312f9-919b23acb8a7ff8ee237635640d3cf51ab6f89ad
author drewp <drewp@bigasterisk.com>
date Sat, 03 Jan 2015 23:35:16 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
959
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 // ---------------------------------------------------------------------------
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 // Created by Florian Fida on 20/01/12
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 // Copyright 2012 - Under creative commons license 3.0:
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 // Attribution-ShareAlike CC BY-SA
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 // http://creativecommons.org/licenses/by-sa/3.0/
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 // This software is furnished "as is", without technical support, and with no
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 // warranty, express or implied, as to its usefulness for any purpose.
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 // ---------------------------------------------------------------------------
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 // (http://www.romanblack.com/shift1.htm)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 // Thread Safe: No
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 // Extendable: Yes
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 // @file FastIO.h
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 // This file implements basic fast IO routines.
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 // @brief
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 // @version API 1.0.0
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 // @author Florian Fida -
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 // 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 //
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 // @todo:
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 // support chipkit:
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 // cores/pic32/wiring_digital.c)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 // ---------------------------------------------------------------------------
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 #include "FastIO.h"
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 pinMode(pin, OUTPUT);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 if(initial_state != SKIP)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 digitalWrite(pin, initial_state); // also turns off pwm timer
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 #ifdef FIO_FALLBACK
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 // just wasting memory if not using fast io...
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 return 0;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 #else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 return portOutputRegister(digitalPinToPort(pin));
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 #endif
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 fio_register fio_pinToInputRegister(uint8_t pin)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 pinMode(pin, INPUT);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 digitalWrite(pin, LOW); // also turns off pwm timer and pullup
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56 #ifdef FIO_FALLBACK
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 // just wasting memory if not using fast io...
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 return 0;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 #else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 return portInputRegister(digitalPinToPort(pin));
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 #endif
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 fio_bit fio_pinToBit(uint8_t pin)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 #ifdef FIO_FALLBACK
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 // (ab)use the bit variable to store the pin
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69 return pin;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 #else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 return digitalPinToBitMask(pin);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 #endif
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 #ifdef FIO_FALLBACK
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79 digitalWrite(pinBit, value);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 #else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
83 if(value == LOW)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
84 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 fio_digitalWrite_LOW(pinRegister,pinBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87 else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 fio_digitalWrite_HIGH(pinRegister,pinBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92 #endif
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
93 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
95 int fio_digitalRead(fio_register pinRegister, uint8_t pinBit)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
97 #ifdef FIO_FALLBACK
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
98 return digitalRead (pinBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
99 #else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
100 if (*pinRegister & pinBit)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102 return HIGH;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 return LOW;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105 #endif
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
106 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 void fio_shiftOut (fio_register dataRegister, fio_bit dataBit,
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109 fio_register clockRegister, fio_bit clockBit,
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
110 uint8_t value, uint8_t bitOrder)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
111 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
112 // # disable interrupts
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
113 int8_t i;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
114
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
115 if(bitOrder == LSBFIRST)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
117 for(i = 0; i < 8; i++)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
118 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
119 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
120 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
121 if(value & 1)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
122 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
123 fio_digitalWrite_HIGH(dataRegister, dataBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
124 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
125 else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
126 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
127 fio_digitalWrite_LOW(dataRegister, dataBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
128 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
129 value >>= 1;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
130 fio_digitalWrite_HIGH (clockRegister, clockBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
131 fio_digitalWrite_LOW (clockRegister,clockBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
132 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
133 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
134
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
135 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
136 else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
137 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
138 for(i = 0; i < 8; i++)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
139 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
140 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
141 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
142 if(value & 0x80)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
143 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
144 fio_digitalWrite_HIGH(dataRegister, dataBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
145 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
146 else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
147 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
148 fio_digitalWrite_LOW(dataRegister, dataBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
149 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
150 value <<= 1;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
151 fio_digitalWrite_HIGH (clockRegister, clockBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
152 fio_digitalWrite_LOW (clockRegister,clockBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
153 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
154 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
155 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
156 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
157
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
158
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
159 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit,
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
160 fio_register clockRegister, fio_bit clockBit)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
161 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
162 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
163 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
164 // shift out 0x0 (B00000000) fast, byte order is irrelevant
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
165 fio_digitalWrite_LOW (dataRegister, dataBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
166
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
167 for(uint8_t i = 0; i<8; ++i)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
168 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
169 fio_digitalWrite_HIGH (clockRegister, clockBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
170 fio_digitalWrite_SWITCH (clockRegister, clockBit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
171 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
172 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
173 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
174
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
175
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
176 void fio_shiftOut1_init(uint8_t pin)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
177 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
178 fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin));
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
179 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
180
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
181 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
182 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
183 // Make sure that capacitors are charged
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
184 // 300us is an educated guess...
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
185 fio_digitalWrite(shift1Register,shift1Bit,HIGH);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
186 delayMicroseconds(300);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
187 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
188
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
189
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
190 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value,
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
191 boolean noLatch)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
192 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
193 /*
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
194 * this function are based on Shif1 protocol developed by Roman Black
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
195 * (http://www.romanblack.com/shift1.htm)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
196 *
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
197 * test sketches:
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
198 * http://pastebin.com/raw.php?i=2hnC9v2Z
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
199 * http://pastebin.com/raw.php?i=bGg4DhXQ
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
200 * http://pastebin.com/raw.php?i=tg1ZFiM5
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
201 * http://pastebin.com/raw.php?i=93ExPDD3 - cascading
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
202 * tested with:
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
203 * TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
204 * arduino-one-wire-shift-register-prototype)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
205 * 7HC595N
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
206 */
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
207
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
208 // iterate but ignore last bit (is it correct now?)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
209 for(int8_t i = 7; i>=0; --i)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
210 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
211
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
212 // assume that pin is HIGH (smokin' pot all day... :) - requires
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
213 // initialization
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
214 if(value & _BV(i))
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
215 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
216 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
217 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
218 // HIGH = 1 Bit
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
219 fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
220 //hold pin LOW for 1us - done! :)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
221 fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
222 } // end critical section
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
223 //hold pin HIGH for 15us
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
224 delayMicroseconds(15);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
225 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
226 else
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
227 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
228 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
229 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
230 // LOW = 0 Bit
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
231 fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
232 // hold pin LOW for 15us
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
233 delayMicroseconds(15);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
234 fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
235 } // end critical section
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
236
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
237 // hold pin HIGH for 30us
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
238 delayMicroseconds(30);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
239 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
240 if(!noLatch && i==1)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
241 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
242 break;
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
243 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
244 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
245
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
246 if(!noLatch)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
247 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
248 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
249 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
250 // send last bit (=LOW) and Latch command
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
251 fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
252 } // end critical section
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
253 delayMicroseconds(199); // Hold pin low for 200us
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
254
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
255 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
256 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
257 fio_digitalWrite_HIGH(shift1Register,shift1Bit);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
258 } // end critical section
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
259 delayMicroseconds(299); // Hold pin high for 300us and leave it that
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
260 // way - using explicit HIGH here, just in case.
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
261 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
262 }
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
263
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
264 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch)
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
265 {
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
266 fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch);
d05562532887 add LiquidCrystal_V1.2.1 lib
drewp <drewp@bigasterisk.com>
parents:
diff changeset
267 }