2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
3 Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
4 Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
9 #include "mbed.h" // mbed.h lib
11 void i2cbang_init(I2C i2c
){
12 const int addr
= 0x40;
16 i2c
.write(addr
, cmd
, 2);
19 i2c
.write(addr
, cmd
, 2);
23 void i2cbang_start(I2C i2c
){
24 const int addr
= 0x40;
28 i2c
.write(addr
, cmd
, 2);
31 i2c
.write(addr
, cmd
, 2);
35 void i2cbang_stop(I2C i2c
){
36 const int addr
= 0x40;
40 i2c
.write(addr
, cmd
, 2);
43 i2c
.write(addr
, cmd
, 2);
47 void i2cbang_writebit(I2C i2c
, bool bit
){
48 const int addr
= 0x40;
56 i2c
.write(addr
, cmd
, 2);
64 i2c
.write(addr
, cmd
, 2);
72 i2c
.write(addr
, cmd
, 2);
77 i2c
.write(addr
, cmd
, 2);
82 char i2cbang_readbit(I2C i2c
){
83 const int addr
= 0x40;
88 i2c
.write(addr
, cmd
, 2);
92 i2c
.write(addr
, cmd
, 2);
96 i2c
.write(addr
, cmd
, 1, false);
97 i2c
.read(addr
, cmd
, 1);
103 i2c
.write(addr
, cmd
, 2);
107 // i2c.write(addr, cmd, 2);
110 //res = (~res) & 0x40;
114 int i2cbang_write(I2C i2c
, char c
){
115 for (int i
=0;i
<8;i
++){
116 i2cbang_writebit(i2c
, (c
&0x80) > 0);
120 return i2cbang_readbit(i2c
);
122 const int addr = 0x40;
126 for (int i=7;i>=0;i--){
138 i2c.write(addr, cmd, 2);
140 i2c.write(addr, cmd, 1, false);
142 i2c.write(addr | 0x01);
143 cmd[1] = i2c.read(false);
144 // int res = (~cmd[1]) & 0x40;
149 i2c.write(addr, cmd, 2);
152 i2c.write(addr, cmd, 2, false);
157 char i2cbang_read(I2C i2c
, bool ack
){
159 for(int i
=0;i
<8;i
++){
161 res
|= i2cbang_readbit(i2c
);
165 i2cbang_writebit(i2c
, 0);
167 i2cbang_writebit(i2c
, 1);