touch screen handler for the microchip AR1020

Committer:
hlipka
Date:
Tue Feb 22 22:11:49 2011 +0000
Revision:
2:1a436d154c84
Parent:
1:264ad2a00fd9
Child:
3:b7eb3b3fe79f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hlipka 0:cf4dd04052e3 1 /*
hlipka 0:cf4dd04052e3 2 * mbed AR1020 library
hlipka 0:cf4dd04052e3 3 * Copyright (c) 2010 Hendrik Lipka
hlipka 0:cf4dd04052e3 4 *
hlipka 0:cf4dd04052e3 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
hlipka 0:cf4dd04052e3 6 * of this software and associated documentation files (the "Software"), to deal
hlipka 0:cf4dd04052e3 7 * in the Software without restriction, including without limitation the rights
hlipka 0:cf4dd04052e3 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hlipka 0:cf4dd04052e3 9 * copies of the Software, and to permit persons to whom the Software is
hlipka 0:cf4dd04052e3 10 * furnished to do so, subject to the following conditions:
hlipka 0:cf4dd04052e3 11 *
hlipka 0:cf4dd04052e3 12 * The above copyright notice and this permission notice shall be included in
hlipka 0:cf4dd04052e3 13 * all copies or substantial portions of the Software.
hlipka 0:cf4dd04052e3 14 *
hlipka 0:cf4dd04052e3 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hlipka 0:cf4dd04052e3 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hlipka 0:cf4dd04052e3 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hlipka 0:cf4dd04052e3 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hlipka 0:cf4dd04052e3 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hlipka 0:cf4dd04052e3 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hlipka 0:cf4dd04052e3 21 * THE SOFTWARE.
hlipka 0:cf4dd04052e3 22 */
hlipka 0:cf4dd04052e3 23
hlipka 0:cf4dd04052e3 24 #include "ar1020.h"
hlipka 0:cf4dd04052e3 25 #include "wait_api.h"
hlipka 0:cf4dd04052e3 26
hlipka 2:1a436d154c84 27 AR1020::AR1020(SPI *spi, PinName enable, PinName sqi, PinName power, bool swapX, bool swapY, bool swapXY) {
hlipka 0:cf4dd04052e3 28 _spi=spi;
hlipka 0:cf4dd04052e3 29 _enable=new DigitalOut(enable);
hlipka 0:cf4dd04052e3 30 _enable->write(1);
hlipka 0:cf4dd04052e3 31 _irq=new InterruptIn(sqi);
hlipka 0:cf4dd04052e3 32 _x=-1;
hlipka 0:cf4dd04052e3 33 _y=-1;
hlipka 0:cf4dd04052e3 34 _pen=0;
hlipka 0:cf4dd04052e3 35 _oldPen=false;
hlipka 0:cf4dd04052e3 36 _led=new DigitalOut(LED1);
hlipka 1:264ad2a00fd9 37 _power=new DigitalOut(power);
hlipka 1:264ad2a00fd9 38 _power->write(0);
hlipka 0:cf4dd04052e3 39 }
hlipka 0:cf4dd04052e3 40
hlipka 2:1a436d154c84 41 AR1020::AR1020(PinName mosi, PinName miso, PinName clk, PinName enable, PinName sqi, PinName power, bool swapX, bool swapY, bool swapXY) {
hlipka 0:cf4dd04052e3 42 _mosi=new DigitalOut(mosi);
hlipka 0:cf4dd04052e3 43 _miso=new DigitalIn(miso);
hlipka 0:cf4dd04052e3 44 _clk=new DigitalOut(clk);
hlipka 0:cf4dd04052e3 45 _clk->write(0);
hlipka 0:cf4dd04052e3 46
hlipka 0:cf4dd04052e3 47 _enable=new DigitalOut(enable);
hlipka 0:cf4dd04052e3 48 _enable->write(1);
hlipka 0:cf4dd04052e3 49 _irq=new InterruptIn(sqi);
hlipka 0:cf4dd04052e3 50 _sqi=new DigitalIn(sqi);
hlipka 0:cf4dd04052e3 51 _x=-1;
hlipka 0:cf4dd04052e3 52 _y=-1;
hlipka 0:cf4dd04052e3 53 _pen=0;
hlipka 0:cf4dd04052e3 54 _oldPen=false;
hlipka 0:cf4dd04052e3 55 _led=new DigitalOut(LED1);
hlipka 1:264ad2a00fd9 56 _power=new DigitalOut(power);
hlipka 1:264ad2a00fd9 57 _power->write(0);
hlipka 0:cf4dd04052e3 58 }
hlipka 0:cf4dd04052e3 59
hlipka 2:1a436d154c84 60 AR1020::~AR1020() {
hlipka 0:cf4dd04052e3 61 delete _enable;
hlipka 0:cf4dd04052e3 62 delete _irq;
hlipka 0:cf4dd04052e3 63 }
hlipka 0:cf4dd04052e3 64
hlipka 2:1a436d154c84 65 void AR1020::init() {
hlipka 1:264ad2a00fd9 66 _power->write(1);
hlipka 1:264ad2a00fd9 67 wait_ms(100);
hlipka 2:1a436d154c84 68 int r=cmd(0x13,NULL,0);
hlipka 0:cf4dd04052e3 69 printf("disable touch=%i\n",r);
hlipka 0:cf4dd04052e3 70
hlipka 0:cf4dd04052e3 71 int regStart=cmd(0x22,NULL,0);
hlipka 0:cf4dd04052e3 72 printf("reg offset=%i\n",regStart);
hlipka 0:cf4dd04052e3 73
hlipka 0:cf4dd04052e3 74 if (regStart<0)
hlipka 0:cf4dd04052e3 75 return;
hlipka 0:cf4dd04052e3 76
hlipka 0:cf4dd04052e3 77 char cid2[4]={0x00,0x0d+regStart,0x01,0x01};
hlipka 0:cf4dd04052e3 78 r=cmd(0x21,cid2,4);
hlipka 0:cf4dd04052e3 79 printf("set mode=1 => %i\n",r);
hlipka 0:cf4dd04052e3 80
hlipka 0:cf4dd04052e3 81
hlipka 2:1a436d154c84 82 r=cmd(0x12,NULL,0);
hlipka 0:cf4dd04052e3 83 printf("enable touch=%i\n",r);
hlipka 0:cf4dd04052e3 84 _irq->rise(this, &AR1020::read);
hlipka 0:cf4dd04052e3 85 }
hlipka 0:cf4dd04052e3 86
hlipka 2:1a436d154c84 87 int AR1020::x() {
hlipka 0:cf4dd04052e3 88 return _x;
hlipka 0:cf4dd04052e3 89 }
hlipka 0:cf4dd04052e3 90
hlipka 2:1a436d154c84 91 int AR1020::y() {
hlipka 0:cf4dd04052e3 92 return _y;
hlipka 0:cf4dd04052e3 93 }
hlipka 0:cf4dd04052e3 94
hlipka 2:1a436d154c84 95 int AR1020::pen() {
hlipka 0:cf4dd04052e3 96 return _pen;
hlipka 0:cf4dd04052e3 97 }
hlipka 0:cf4dd04052e3 98
hlipka 0:cf4dd04052e3 99
hlipka 2:1a436d154c84 100 void AR1020::read() {
hlipka 2:1a436d154c84 101 while (1==_sqi->read()) {
hlipka 2:1a436d154c84 102 _led->write(1);
hlipka 2:1a436d154c84 103 _enable->write(0);
hlipka 2:1a436d154c84 104 wait_us(60);
hlipka 2:1a436d154c84 105
hlipka 2:1a436d154c84 106 int pen=readByte();
hlipka 2:1a436d154c84 107 wait_us(60);
hlipka 2:1a436d154c84 108
hlipka 2:1a436d154c84 109 int xlo=readByte();
hlipka 2:1a436d154c84 110 wait_us(60);
hlipka 2:1a436d154c84 111
hlipka 2:1a436d154c84 112 int xhi=readByte();
hlipka 2:1a436d154c84 113 wait_us(60);
hlipka 2:1a436d154c84 114
hlipka 2:1a436d154c84 115 int ylo=readByte();
hlipka 2:1a436d154c84 116 wait_us(60);
hlipka 2:1a436d154c84 117
hlipka 2:1a436d154c84 118 int yhi=readByte();
hlipka 2:1a436d154c84 119 _enable->write(1);
hlipka 0:cf4dd04052e3 120
hlipka 0:cf4dd04052e3 121 // printf("0x%x|0x%x|0x%x|0x%x|0x%x\n", pen,xlo,xhi,ylo,yhi);
hlipka 2:1a436d154c84 122 if (0x4d==pen || 0==pen || 255==pen) {
hlipka 2:1a436d154c84 123 // ignore invalid stuff, do nothing...
hlipka 2:1a436d154c84 124 } else if (0x81!=pen&0x81) { // pen set?
hlipka 2:1a436d154c84 125 _pen=0;
hlipka 2:1a436d154c84 126 int x=xlo+(xhi<<7);
hlipka 2:1a436d154c84 127 int y=ylo+(yhi<<7);
hlipka 2:1a436d154c84 128 if (0!=x&&0!=y) {
hlipka 2:1a436d154c84 129 _x=x;
hlipka 2:1a436d154c84 130 _y=y;
hlipka 2:1a436d154c84 131 }
hlipka 2:1a436d154c84 132 } else {
hlipka 2:1a436d154c84 133 _pen=1;
hlipka 2:1a436d154c84 134 int x=xlo+(xhi<<7);
hlipka 2:1a436d154c84 135 int y=ylo+(yhi<<7);
hlipka 2:1a436d154c84 136 if (0!=x&&0!=y) {
hlipka 2:1a436d154c84 137 _x=x;
hlipka 2:1a436d154c84 138 _y=y;
hlipka 2:1a436d154c84 139 }
hlipka 0:cf4dd04052e3 140 }
hlipka 2:1a436d154c84 141 _event.x=_x;
hlipka 2:1a436d154c84 142 _event.y=_y;
hlipka 2:1a436d154c84 143 _event.pen=_pen;
hlipka 2:1a436d154c84 144 if (_pen==1 && _oldPen==false) { // pen down
hlipka 2:1a436d154c84 145 _callbackPD.call((uint32_t)&_event);
hlipka 2:1a436d154c84 146 } else if (_pen==1 && _oldPen==true) { // pen moved
hlipka 2:1a436d154c84 147 _callbackPM.call((uint32_t)&_event);
hlipka 2:1a436d154c84 148 } else if (_pen==0 && _oldPen==true) { // pen up
hlipka 2:1a436d154c84 149 _callbackPU.call((uint32_t)&_event);
hlipka 2:1a436d154c84 150 } else {
hlipka 2:1a436d154c84 151 // happens on the first touch (the first report is send with pen=0).
hlipka 2:1a436d154c84 152 }
hlipka 2:1a436d154c84 153 _oldPen=(_pen==1);
hlipka 2:1a436d154c84 154 _led->write(0);
hlipka 2:1a436d154c84 155 if (1==_sqi->read())
hlipka 2:1a436d154c84 156 wait_ms(5);
hlipka 0:cf4dd04052e3 157 }
hlipka 0:cf4dd04052e3 158 }
hlipka 0:cf4dd04052e3 159
hlipka 2:1a436d154c84 160 int AR1020::cmd(char cmd,char* data, int len, bool doEnable) {
hlipka 2:1a436d154c84 161 if (doEnable) {
hlipka 2:1a436d154c84 162 _enable->write(1);
hlipka 2:1a436d154c84 163 wait_us(1000);
hlipka 2:1a436d154c84 164 _enable->write(0);
hlipka 2:1a436d154c84 165 }
hlipka 2:1a436d154c84 166
hlipka 0:cf4dd04052e3 167 wait_us(10);
hlipka 2:1a436d154c84 168
hlipka 0:cf4dd04052e3 169 writeByte(0x55);
hlipka 0:cf4dd04052e3 170 wait_us(100);
hlipka 2:1a436d154c84 171
hlipka 0:cf4dd04052e3 172 writeByte(len+1);
hlipka 0:cf4dd04052e3 173 wait_us(100);
hlipka 2:1a436d154c84 174
hlipka 0:cf4dd04052e3 175 writeByte(cmd);
hlipka 0:cf4dd04052e3 176 wait_us(100);
hlipka 2:1a436d154c84 177
hlipka 2:1a436d154c84 178 for (int i=0;i<len;i++) {
hlipka 0:cf4dd04052e3 179 writeByte(data[i]);
hlipka 0:cf4dd04052e3 180 wait_us(100);
hlipka 0:cf4dd04052e3 181 }
hlipka 0:cf4dd04052e3 182 Timer t;
hlipka 0:cf4dd04052e3 183 t.start();
hlipka 2:1a436d154c84 184 while (true) {
hlipka 2:1a436d154c84 185 wait_us(100);
hlipka 2:1a436d154c84 186 if (1==_sqi->read())
hlipka 2:1a436d154c84 187 break;
hlipka 2:1a436d154c84 188 if (t.read_ms()>1)
hlipka 2:1a436d154c84 189 break;
hlipka 0:cf4dd04052e3 190 }
hlipka 0:cf4dd04052e3 191 char rhead=readByte();
hlipka 0:cf4dd04052e3 192 wait_us(100);
hlipka 2:1a436d154c84 193 if (rhead!=0x55) {
hlipka 2:1a436d154c84 194 if (doEnable)
hlipka 2:1a436d154c84 195 _enable->write(1);
hlipka 0:cf4dd04052e3 196 printf("rh=0x%x\n",rhead);
hlipka 0:cf4dd04052e3 197 return -1000;
hlipka 0:cf4dd04052e3 198 }
hlipka 0:cf4dd04052e3 199 char rlen=readByte();
hlipka 0:cf4dd04052e3 200 wait_us(100);
hlipka 2:1a436d154c84 201 if (rlen==2) {
hlipka 0:cf4dd04052e3 202 char r=readByte();
hlipka 0:cf4dd04052e3 203 wait_us(100);
hlipka 0:cf4dd04052e3 204 char rc=readByte();
hlipka 0:cf4dd04052e3 205 wait_us(100);
hlipka 2:1a436d154c84 206 if (doEnable)
hlipka 2:1a436d154c84 207 _enable->write(1);
hlipka 0:cf4dd04052e3 208 if (rc!=cmd)
hlipka 0:cf4dd04052e3 209 return -2000;
hlipka 0:cf4dd04052e3 210 return -r;
hlipka 2:1a436d154c84 211 } else if (rlen==3) {
hlipka 0:cf4dd04052e3 212 char r=readByte();
hlipka 0:cf4dd04052e3 213 wait_us(100);
hlipka 0:cf4dd04052e3 214 char rc=readByte();
hlipka 0:cf4dd04052e3 215 wait_us(100);
hlipka 2:1a436d154c84 216 if (rc!=cmd) {
hlipka 2:1a436d154c84 217 if (doEnable)
hlipka 2:1a436d154c84 218 _enable->write(1);
hlipka 0:cf4dd04052e3 219 return -3000;
hlipka 0:cf4dd04052e3 220 }
hlipka 0:cf4dd04052e3 221 char rd=readByte();
hlipka 0:cf4dd04052e3 222 wait_us(100);
hlipka 2:1a436d154c84 223 if (doEnable)
hlipka 2:1a436d154c84 224 _enable->write(1);
hlipka 0:cf4dd04052e3 225 if (r==0)
hlipka 0:cf4dd04052e3 226 return rd;
hlipka 0:cf4dd04052e3 227 return -r;
hlipka 2:1a436d154c84 228 } else {
hlipka 2:1a436d154c84 229 if (doEnable)
hlipka 2:1a436d154c84 230 _enable->write(1);
hlipka 0:cf4dd04052e3 231 return -4000;
hlipka 0:cf4dd04052e3 232 }
hlipka 0:cf4dd04052e3 233 }
hlipka 2:1a436d154c84 234 void AR1020::calibrate() {
hlipka 0:cf4dd04052e3 235 _irq->rise(NULL);
hlipka 0:cf4dd04052e3 236
hlipka 0:cf4dd04052e3 237 DigitalOut led1(LED1);
hlipka 0:cf4dd04052e3 238 DigitalOut led2(LED2);
hlipka 0:cf4dd04052e3 239 DigitalOut led3(LED3);
hlipka 0:cf4dd04052e3 240 DigitalOut led4(LED4);
hlipka 2:1a436d154c84 241 led1=0;
hlipka 2:1a436d154c84 242 led2=0;
hlipka 2:1a436d154c84 243 led3=1;
hlipka 2:1a436d154c84 244 led4=1;
hlipka 2:1a436d154c84 245
hlipka 2:1a436d154c84 246 int r=cmd(0x13,NULL,0);
hlipka 0:cf4dd04052e3 247 printf("disable touch=%i\n",r);
hlipka 0:cf4dd04052e3 248 wait_ms(100);
hlipka 0:cf4dd04052e3 249 if (r<0)
hlipka 0:cf4dd04052e3 250 return;
hlipka 0:cf4dd04052e3 251 led4=0;
hlipka 2:1a436d154c84 252
hlipka 0:cf4dd04052e3 253 int regStart=cmd(0x22,NULL,0);
hlipka 0:cf4dd04052e3 254 printf("reg offset=%i\n",regStart);
hlipka 0:cf4dd04052e3 255
hlipka 0:cf4dd04052e3 256 char cid[3]={0x00,0x0d+regStart,0x01};
hlipka 0:cf4dd04052e3 257 int mode=cmd(0x20,cid,3);
hlipka 0:cf4dd04052e3 258 printf("mode=%i\n",mode);
hlipka 0:cf4dd04052e3 259
hlipka 0:cf4dd04052e3 260 if (regStart<0)
hlipka 0:cf4dd04052e3 261 return;
hlipka 0:cf4dd04052e3 262 printf("start calibrate\n");
hlipka 2:1a436d154c84 263 led3=0;
hlipka 0:cf4dd04052e3 264 char cid2[4]={0x00,0x0e+regStart,0x01,0x19};
hlipka 0:cf4dd04052e3 265 r=cmd(0x21,cid2,4);
hlipka 0:cf4dd04052e3 266 printf("set inset=%i\n",r);
hlipka 0:cf4dd04052e3 267 if (r<0)
hlipka 0:cf4dd04052e3 268 return;
hlipka 0:cf4dd04052e3 269
hlipka 0:cf4dd04052e3 270 _enable->write(1);
hlipka 2:1a436d154c84 271 wait_us(100);
hlipka 0:cf4dd04052e3 272 _enable->write(0);
hlipka 0:cf4dd04052e3 273 wait_us(10);
hlipka 2:1a436d154c84 274 char cid3[1]={0x04};
hlipka 2:1a436d154c84 275 cmd(0x14,cid3,1,false);
hlipka 2:1a436d154c84 276
hlipka 2:1a436d154c84 277 wait_ms(1);
hlipka 0:cf4dd04052e3 278
hlipka 0:cf4dd04052e3 279 int resp=readCalibResponse();
hlipka 0:cf4dd04052e3 280 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 281 printf("start OK, press upper left");
hlipka 0:cf4dd04052e3 282 led1=1;
hlipka 0:cf4dd04052e3 283 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 284 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 285 printf("press upper right");
hlipka 0:cf4dd04052e3 286 led2=1;
hlipka 0:cf4dd04052e3 287 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 288 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 289 printf("press lower right");
hlipka 0:cf4dd04052e3 290 led3=1;
hlipka 0:cf4dd04052e3 291 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 292 printf("status=%i\n",resp);
hlipka 0:cf4dd04052e3 293 printf("press lower left");
hlipka 0:cf4dd04052e3 294 led4=1;
hlipka 0:cf4dd04052e3 295 resp=readCalibResponse();
hlipka 0:cf4dd04052e3 296 printf("status=%i\n",resp);
hlipka 2:1a436d154c84 297
hlipka 2:1a436d154c84 298 _enable->write(1);
hlipka 2:1a436d154c84 299
hlipka 2:1a436d154c84 300 r=cmd(0x23,NULL,0);
hlipka 2:1a436d154c84 301 printf("save registers=%i\n",r);
hlipka 2:1a436d154c84 302
hlipka 2:1a436d154c84 303 r=cmd(0x12,NULL,0);
hlipka 0:cf4dd04052e3 304 printf("enable touch=%i\n",r);
hlipka 2:1a436d154c84 305
hlipka 0:cf4dd04052e3 306 _irq->rise(this, &AR1020::read);
hlipka 2:1a436d154c84 307
hlipka 0:cf4dd04052e3 308 }
hlipka 0:cf4dd04052e3 309
hlipka 2:1a436d154c84 310 int AR1020::readCalibResponse() {
hlipka 2:1a436d154c84 311 while (true) {
hlipka 0:cf4dd04052e3 312 int r=readByte();
hlipka 2:1a436d154c84 313 if (r!=0x55) {
hlipka 2:1a436d154c84 314 // printf("1=0x%x\n",r);
hlipka 0:cf4dd04052e3 315 wait_ms(100);
hlipka 0:cf4dd04052e3 316 continue;
hlipka 0:cf4dd04052e3 317 }
hlipka 0:cf4dd04052e3 318
hlipka 0:cf4dd04052e3 319 r=readByte();
hlipka 0:cf4dd04052e3 320 wait_us(100);
hlipka 2:1a436d154c84 321 if (r!=0x02) {
hlipka 0:cf4dd04052e3 322 printf("2=0x%x\n",r);
hlipka 0:cf4dd04052e3 323 continue;
hlipka 0:cf4dd04052e3 324 }
hlipka 2:1a436d154c84 325
hlipka 0:cf4dd04052e3 326 r=readByte();
hlipka 0:cf4dd04052e3 327 wait_us(100);
hlipka 2:1a436d154c84 328 if (r!=0x00) {
hlipka 0:cf4dd04052e3 329 printf("3=0x%x\n",r);
hlipka 0:cf4dd04052e3 330 continue;
hlipka 0:cf4dd04052e3 331 }
hlipka 0:cf4dd04052e3 332 int rc=readByte();
hlipka 0:cf4dd04052e3 333 wait_us(100);
hlipka 2:1a436d154c84 334 if (rc!=0x14) {
hlipka 0:cf4dd04052e3 335 printf("4=0x%x\n",r);
hlipka 0:cf4dd04052e3 336 continue;
hlipka 0:cf4dd04052e3 337 }
hlipka 2:1a436d154c84 338
hlipka 0:cf4dd04052e3 339 return r;
hlipka 0:cf4dd04052e3 340 }
hlipka 0:cf4dd04052e3 341 }
hlipka 0:cf4dd04052e3 342
hlipka 2:1a436d154c84 343 int AR1020::readByte() {
hlipka 0:cf4dd04052e3 344 _clk->write(0);
hlipka 0:cf4dd04052e3 345 wait_us(10);
hlipka 0:cf4dd04052e3 346 int r=0;
hlipka 2:1a436d154c84 347 for (int i=0;i<8;i++) {
hlipka 0:cf4dd04052e3 348 r=r<<1;
hlipka 0:cf4dd04052e3 349 _clk->write(1);
hlipka 0:cf4dd04052e3 350 wait_us(10);
hlipka 0:cf4dd04052e3 351 _clk->write(0);
hlipka 0:cf4dd04052e3 352 wait_us(10);
hlipka 0:cf4dd04052e3 353 int bit=_miso->read();
hlipka 0:cf4dd04052e3 354 r+=bit;
hlipka 0:cf4dd04052e3 355 }
hlipka 0:cf4dd04052e3 356 // printf("<-%i\n",r);
hlipka 0:cf4dd04052e3 357 return r;
hlipka 0:cf4dd04052e3 358 }
hlipka 0:cf4dd04052e3 359
hlipka 2:1a436d154c84 360 void AR1020::writeByte(char byte) {
hlipka 0:cf4dd04052e3 361 _clk->write(0);
hlipka 0:cf4dd04052e3 362 wait_us(10);
hlipka 0:cf4dd04052e3 363 // printf("->0x%x\n",byte);
hlipka 2:1a436d154c84 364 for (int i=0;i<8;i++) {
hlipka 0:cf4dd04052e3 365 int bit=byte>127;
hlipka 0:cf4dd04052e3 366 // printf("%i",bit);
hlipka 0:cf4dd04052e3 367 _clk->write(1);
hlipka 0:cf4dd04052e3 368 wait_us(10);
hlipka 0:cf4dd04052e3 369 _mosi->write(bit);
hlipka 0:cf4dd04052e3 370 wait_us(10);
hlipka 0:cf4dd04052e3 371 _clk->write(0);
hlipka 0:cf4dd04052e3 372 wait_us(10);
hlipka 0:cf4dd04052e3 373 byte=(char)(byte<<1);
hlipka 0:cf4dd04052e3 374
hlipka 0:cf4dd04052e3 375 }
hlipka 0:cf4dd04052e3 376 // printf("\n");
hlipka 0:cf4dd04052e3 377 }