Publishing for sharing with Harald

Dependencies:   csi059

Committer:
CactusSemi
Date:
Fri May 22 19:19:45 2020 +0000
Revision:
4:1c48c9fa44fc
Parent:
3:3e8c16b6620c
Publishing for sharing with Harald

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CactusSemi 3:3e8c16b6620c 1 #include "mbed.h"
CactusSemi 3:3e8c16b6620c 2
CactusSemi 3:3e8c16b6620c 3 extern Serial pc;
CactusSemi 3:3e8c16b6620c 4 extern int frequ; //unit kHz
CactusSemi 3:3e8c16b6620c 5 extern char dev_addr; //fixed
CactusSemi 3:3e8c16b6620c 6
CactusSemi 3:3e8c16b6620c 7 char get_half_byte(int *); //defined in I2C_read.cpp
CactusSemi 3:3e8c16b6620c 8
CactusSemi 3:3e8c16b6620c 9 void i2c_write() {
CactusSemi 3:3e8c16b6620c 10 char reg_ptr = 0x55;
CactusSemi 3:3e8c16b6620c 11 char reg_data = 0xaa;
CactusSemi 3:3e8c16b6620c 12 char temp;
CactusSemi 3:3e8c16b6620c 13 int flag1 = 0;
CactusSemi 3:3e8c16b6620c 14 I2C i2c(p9,p10);
CactusSemi 3:3e8c16b6620c 15 LPC_PINCON->PINMODE_OD0 = (LPC_PINCON->PINMODE_OD0 | 0x0003); // To make p9 & P10 open_drain
CactusSemi 3:3e8c16b6620c 16 //Read Register Pointer
CactusSemi 3:3e8c16b6620c 17 pc.printf("\n\n\n \r\tYahoooo! Lets program a Register");
CactusSemi 3:3e8c16b6620c 18 while (!flag1) {
CactusSemi 4:1c48c9fa44fc 19 pc.printf("\n\n\n \r\tEnter Register Address in hex (0 to 17): ");
CactusSemi 3:3e8c16b6620c 20 reg_ptr = get_half_byte(&flag1);
CactusSemi 4:1c48c9fa44fc 21 if (flag1 == 1) {
CactusSemi 4:1c48c9fa44fc 22 reg_ptr = reg_ptr << 4;
CactusSemi 4:1c48c9fa44fc 23 temp = get_half_byte(&flag1);
CactusSemi 4:1c48c9fa44fc 24 reg_ptr = (reg_ptr | temp);
CactusSemi 4:1c48c9fa44fc 25 }
CactusSemi 3:3e8c16b6620c 26 if (flag1==0) pc.printf(" \033[%dm Invalid Chracter!! No worries, let us try again \033[%dm",41,40);
CactusSemi 3:3e8c16b6620c 27 }
CactusSemi 3:3e8c16b6620c 28 //Read Register Data
CactusSemi 3:3e8c16b6620c 29 flag1 = 0;
CactusSemi 3:3e8c16b6620c 30 while (!flag1) {
CactusSemi 3:3e8c16b6620c 31 pc.printf("\n\n \r\tEnter Data in hex (00 to ff): ");
CactusSemi 3:3e8c16b6620c 32 reg_data = get_half_byte(&flag1);
CactusSemi 3:3e8c16b6620c 33 if (flag1 == 1) {
CactusSemi 3:3e8c16b6620c 34 reg_data = reg_data << 4;
CactusSemi 3:3e8c16b6620c 35 temp = get_half_byte(&flag1);
CactusSemi 3:3e8c16b6620c 36 reg_data = (reg_data | temp);
CactusSemi 3:3e8c16b6620c 37 }
CactusSemi 3:3e8c16b6620c 38 if (flag1==0) pc.printf(" \033[%dm Invalid Chracter!! No worries, let us try again \033[%dm",41,40);
CactusSemi 3:3e8c16b6620c 39 }
CactusSemi 3:3e8c16b6620c 40
CactusSemi 3:3e8c16b6620c 41 pc.printf("\n\n\n\r\t\033[%dm", 44);//change backround to blue
CactusSemi 3:3e8c16b6620c 42 pc.printf(" Device Address (fixed) = 0x%2.2X ; Register Pointer = 0x%2.2X ; Register Data = 0x%2.2X ",dev_addr, reg_ptr, reg_data);
CactusSemi 3:3e8c16b6620c 43 pc.printf("\033[%dm", 40);//change backround to black
CactusSemi 3:3e8c16b6620c 44
CactusSemi 3:3e8c16b6620c 45 pc.printf("\n\n\n \r\tContinue Write? (y/n) : ");
CactusSemi 3:3e8c16b6620c 46 temp = 0;
CactusSemi 3:3e8c16b6620c 47 while ( temp!='y' && temp!='n') {
CactusSemi 3:3e8c16b6620c 48 temp = pc.getc();
CactusSemi 3:3e8c16b6620c 49 }
CactusSemi 3:3e8c16b6620c 50 if (temp == 'n') {
CactusSemi 3:3e8c16b6620c 51 pc.printf("\n\n \r\tAborting Register Write :(");
CactusSemi 3:3e8c16b6620c 52 return;
CactusSemi 3:3e8c16b6620c 53 }
CactusSemi 3:3e8c16b6620c 54 i2c.frequency(frequ*1000);
CactusSemi 3:3e8c16b6620c 55 i2c.stop(); //add a stop after hot-read
CactusSemi 3:3e8c16b6620c 56 wait_us(10);
CactusSemi 3:3e8c16b6620c 57 i2c.start();
CactusSemi 3:3e8c16b6620c 58 flag1 = i2c.write(dev_addr);
CactusSemi 3:3e8c16b6620c 59 if (flag1 != 1) pc.printf("\n\n\n \r\tNo Ack for dev addr :(");
CactusSemi 3:3e8c16b6620c 60 flag1 = i2c.write(reg_ptr);
CactusSemi 3:3e8c16b6620c 61 if (flag1 != 1) pc.printf("\n\n \r\tNo Ack reg pointer :(");
CactusSemi 3:3e8c16b6620c 62 flag1 = i2c.write(reg_data);
CactusSemi 3:3e8c16b6620c 63 if (flag1 != 1) pc.printf("\n\n \r\tNo Ack data :(");
CactusSemi 3:3e8c16b6620c 64 wait_us(5);
CactusSemi 3:3e8c16b6620c 65 i2c.stop();
CactusSemi 3:3e8c16b6620c 66 pc.printf("\n\n\n \r\tYeahhh! Register Write Complete");
CactusSemi 3:3e8c16b6620c 67 if (flag1 != 1) pc.printf("\n\n\n\r\t\033[%dm But the Write operation might not be successful since no 'Ack' was received :( \033[%dm",45,40);
CactusSemi 3:3e8c16b6620c 68 pc.printf("\n\n\n\r");
CactusSemi 3:3e8c16b6620c 69 wait_us(5);
CactusSemi 3:3e8c16b6620c 70 i2c.~I2C();
CactusSemi 3:3e8c16b6620c 71 }