Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
davidjhoward
Date:
Wed Sep 14 18:54:23 2016 +0000
Revision:
58:a4422d19b2ea
Child:
116:7337ed514891
adding EEPROM drivers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidjhoward 58:a4422d19b2ea 1 // eep.c - EEPROM (AT24CM02)
davidjhoward 58:a4422d19b2ea 2 // -------------------------------------------------------------------------------------------------
davidjhoward 58:a4422d19b2ea 3
davidjhoward 58:a4422d19b2ea 4 #include "mbed.h"
davidjhoward 58:a4422d19b2ea 5 #include "global.h"
davidjhoward 58:a4422d19b2ea 6 #include "eep.h"
davidjhoward 58:a4422d19b2ea 7
davidjhoward 58:a4422d19b2ea 8 // -------------------------------------------------------------------------------------------------
davidjhoward 58:a4422d19b2ea 9 // globals
davidjhoward 58:a4422d19b2ea 10
davidjhoward 58:a4422d19b2ea 11 int eep_verbose = 0;
davidjhoward 58:a4422d19b2ea 12
davidjhoward 58:a4422d19b2ea 13 // -------------------------------------------------------------------------------------------------
davidjhoward 58:a4422d19b2ea 14 // byte functions
davidjhoward 58:a4422d19b2ea 15
davidjhoward 58:a4422d19b2ea 16 unsigned char eep_get_byte(int dev, unsigned long addr)
davidjhoward 58:a4422d19b2ea 17 {
davidjhoward 58:a4422d19b2ea 18 if(eep_verbose) printf("[eep_get_byte] dev=%d, addr=%u\n\n", dev, addr);
davidjhoward 58:a4422d19b2ea 19
davidjhoward 58:a4422d19b2ea 20 unsigned char rbyte = 0;
davidjhoward 58:a4422d19b2ea 21 unsigned char dbyte = 0;
davidjhoward 58:a4422d19b2ea 22 unsigned char addr0 = 0;
davidjhoward 58:a4422d19b2ea 23 unsigned char addr1 = 0;
davidjhoward 58:a4422d19b2ea 24
davidjhoward 58:a4422d19b2ea 25 // build address bytes
davidjhoward 58:a4422d19b2ea 26
davidjhoward 58:a4422d19b2ea 27 if (dev == 0) dbyte = EE0_ADDR;
davidjhoward 58:a4422d19b2ea 28 else if(dev == 1) dbyte = EE1_ADDR;
davidjhoward 58:a4422d19b2ea 29 else
davidjhoward 58:a4422d19b2ea 30 {
davidjhoward 58:a4422d19b2ea 31 printf("[eep_get_byte] device error\n"); return(0);
davidjhoward 58:a4422d19b2ea 32 }
davidjhoward 58:a4422d19b2ea 33
davidjhoward 58:a4422d19b2ea 34 if(addr < EEP_NBYT)
davidjhoward 58:a4422d19b2ea 35 {
davidjhoward 58:a4422d19b2ea 36 dbyte |= (addr & 0x00030000)>>16; // mask A17-A16 bits, add to dbyte
davidjhoward 58:a4422d19b2ea 37 addr0 = (addr & 0x0000FF00)>>8; // mask A15-A08 bits
davidjhoward 58:a4422d19b2ea 38 addr1 = (addr & 0x000000FF); // mask A07-A00 bits
davidjhoward 58:a4422d19b2ea 39 }
davidjhoward 58:a4422d19b2ea 40 else
davidjhoward 58:a4422d19b2ea 41 {
davidjhoward 58:a4422d19b2ea 42 printf("[eep_get_byte] address error\n"); return(0);
davidjhoward 58:a4422d19b2ea 43 }
davidjhoward 58:a4422d19b2ea 44
davidjhoward 58:a4422d19b2ea 45
davidjhoward 58:a4422d19b2ea 46 if(eep_verbose)
davidjhoward 58:a4422d19b2ea 47 {
davidjhoward 58:a4422d19b2ea 48 printf(" dbyte = 0x%x\n", dbyte);
davidjhoward 58:a4422d19b2ea 49 printf(" addr0 = 0x%x\n", addr0);
davidjhoward 58:a4422d19b2ea 50 printf(" addr1 = 0x%x", addr1);
davidjhoward 58:a4422d19b2ea 51 }
davidjhoward 58:a4422d19b2ea 52
davidjhoward 58:a4422d19b2ea 53 // perform read
davidjhoward 58:a4422d19b2ea 54
davidjhoward 58:a4422d19b2ea 55 const int ldata = 2;
davidjhoward 58:a4422d19b2ea 56 char data[ldata];
davidjhoward 58:a4422d19b2ea 57 data[0] = addr0;
davidjhoward 58:a4422d19b2ea 58 data[1] = addr1;
davidjhoward 58:a4422d19b2ea 59
davidjhoward 58:a4422d19b2ea 60 if(i2c->write(dbyte, data, 2, true )) printf("no ack 1\n");
davidjhoward 58:a4422d19b2ea 61 if(i2c->read (dbyte, data, 1, false)) printf("no ack 2\n");
davidjhoward 58:a4422d19b2ea 62 rbyte = data[0];
davidjhoward 58:a4422d19b2ea 63
davidjhoward 58:a4422d19b2ea 64 return(rbyte);
davidjhoward 58:a4422d19b2ea 65 }
davidjhoward 58:a4422d19b2ea 66
davidjhoward 58:a4422d19b2ea 67 void eep_set_byte(int dev, unsigned long addr, unsigned char wbyte)
davidjhoward 58:a4422d19b2ea 68 {
davidjhoward 58:a4422d19b2ea 69 if(eep_verbose) printf("[eep_set_byte] dev=%d, addr=%u, wbyte=%u\n\n", dev, addr, wbyte);
davidjhoward 58:a4422d19b2ea 70
davidjhoward 58:a4422d19b2ea 71 unsigned char dbyte = 0;
davidjhoward 58:a4422d19b2ea 72 unsigned char addr0 = 0;
davidjhoward 58:a4422d19b2ea 73 unsigned char addr1 = 0;
davidjhoward 58:a4422d19b2ea 74
davidjhoward 58:a4422d19b2ea 75 // build address bytes
davidjhoward 58:a4422d19b2ea 76
davidjhoward 58:a4422d19b2ea 77 if (dev == 0) dbyte = EE0_ADDR;
davidjhoward 58:a4422d19b2ea 78 else if(dev == 1) dbyte = EE1_ADDR;
davidjhoward 58:a4422d19b2ea 79 else
davidjhoward 58:a4422d19b2ea 80 {
davidjhoward 58:a4422d19b2ea 81 printf("[eep_set_byte] device error\n"); return;
davidjhoward 58:a4422d19b2ea 82 }
davidjhoward 58:a4422d19b2ea 83
davidjhoward 58:a4422d19b2ea 84 if(addr < EEP_NBYT)
davidjhoward 58:a4422d19b2ea 85 {
davidjhoward 58:a4422d19b2ea 86 dbyte |= (addr & 0x00030000)>>16; // mask A17-A16 bits, add to dbyte
davidjhoward 58:a4422d19b2ea 87 addr0 = (addr & 0x0000FF00)>>8; // mask A15-A08 bits
davidjhoward 58:a4422d19b2ea 88 addr1 = (addr & 0x000000FF); // mask A07-A00 bits
davidjhoward 58:a4422d19b2ea 89 }
davidjhoward 58:a4422d19b2ea 90 else
davidjhoward 58:a4422d19b2ea 91 {
davidjhoward 58:a4422d19b2ea 92 printf("[eep_set_byte] address error\n"); return;
davidjhoward 58:a4422d19b2ea 93 }
davidjhoward 58:a4422d19b2ea 94
davidjhoward 58:a4422d19b2ea 95 if(eep_verbose)
davidjhoward 58:a4422d19b2ea 96 {
davidjhoward 58:a4422d19b2ea 97 printf(" dbyte = 0x%x", dbyte);
davidjhoward 58:a4422d19b2ea 98 printf(" addr0 = 0x%x", addr0);
davidjhoward 58:a4422d19b2ea 99 printf(" addr1 = 0x%x", addr1);
davidjhoward 58:a4422d19b2ea 100 printf(" wbyte = 0x%x", wbyte);
davidjhoward 58:a4422d19b2ea 101 }
davidjhoward 58:a4422d19b2ea 102
davidjhoward 58:a4422d19b2ea 103 // perform read
davidjhoward 58:a4422d19b2ea 104
davidjhoward 58:a4422d19b2ea 105 const int ldata = 3;
davidjhoward 58:a4422d19b2ea 106 char data[ldata];
davidjhoward 58:a4422d19b2ea 107 data[0] = addr0;
davidjhoward 58:a4422d19b2ea 108 data[1] = addr1;
davidjhoward 58:a4422d19b2ea 109 data[2] = wbyte;
davidjhoward 58:a4422d19b2ea 110
davidjhoward 58:a4422d19b2ea 111 if(i2c->write(dbyte, data, ldata, false)) printf("no ack\n");
davidjhoward 58:a4422d19b2ea 112 }
davidjhoward 58:a4422d19b2ea 113
davidjhoward 58:a4422d19b2ea 114 // -------------------------------------------------------------------------------------------------