Ashwath M Pavithran / Mbed OS csi066_rev0p3_harald_prog

Dependencies:   csi059

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers I2C_write.cpp Source File

I2C_write.cpp

00001 #include "mbed.h"
00002 
00003 extern Serial pc;
00004 extern int frequ; //unit kHz
00005 extern char dev_addr; //fixed
00006 
00007 char get_half_byte(int *); //defined in I2C_read.cpp
00008 
00009 void i2c_write() {
00010     char reg_ptr = 0x55;
00011     char reg_data = 0xaa;
00012     char temp;
00013     int flag1 = 0;
00014     I2C i2c(p9,p10);
00015     LPC_PINCON->PINMODE_OD0 = (LPC_PINCON->PINMODE_OD0  | 0x0003); // To make p9 & P10 open_drain
00016     //Read Register Pointer
00017     pc.printf("\n\n\n \r\tYahoooo! Lets program a Register");
00018     while (!flag1) {
00019         pc.printf("\n\n\n \r\tEnter Register Address in hex (0 to 17): ");
00020         reg_ptr = get_half_byte(&flag1);
00021         if (flag1 == 1) {
00022             reg_ptr = reg_ptr << 4;
00023             temp = get_half_byte(&flag1);
00024             reg_ptr = (reg_ptr | temp);
00025         }
00026         if (flag1==0) pc.printf(" \033[%dm Invalid Chracter!! No worries, let us try again \033[%dm",41,40);
00027     } 
00028     //Read Register Data
00029     flag1 = 0;
00030     while (!flag1) {
00031         pc.printf("\n\n \r\tEnter Data in hex (00 to ff): ");
00032         reg_data = get_half_byte(&flag1); 
00033         if (flag1 == 1) {
00034             reg_data = reg_data << 4;
00035             temp = get_half_byte(&flag1);
00036             reg_data = (reg_data | temp);
00037         }
00038         if (flag1==0) pc.printf(" \033[%dm Invalid Chracter!! No worries, let us try again \033[%dm",41,40);
00039     }                  
00040 
00041     pc.printf("\n\n\n\r\t\033[%dm", 44);//change backround to blue
00042     pc.printf(" Device Address (fixed) = 0x%2.2X ; Register Pointer = 0x%2.2X ; Register Data = 0x%2.2X ",dev_addr, reg_ptr, reg_data);
00043     pc.printf("\033[%dm", 40);//change backround to black    
00044     
00045     pc.printf("\n\n\n \r\tContinue Write? (y/n) : ");  
00046     temp = 0;
00047     while ( temp!='y' && temp!='n') {
00048         temp = pc.getc();
00049     }
00050     if (temp == 'n') {
00051         pc.printf("\n\n \r\tAborting Register Write :(");
00052         return;
00053     }
00054     i2c.frequency(frequ*1000);
00055     i2c.stop(); //add a stop after hot-read
00056     wait_us(10);
00057     i2c.start();
00058     flag1 = i2c.write(dev_addr);
00059     if (flag1 != 1) pc.printf("\n\n\n \r\tNo Ack for dev addr :(");
00060     flag1 = i2c.write(reg_ptr);
00061     if (flag1 != 1) pc.printf("\n\n \r\tNo Ack reg pointer :(");    
00062     flag1 = i2c.write(reg_data); 
00063     if (flag1 != 1) pc.printf("\n\n \r\tNo Ack data :(");           
00064     wait_us(5);
00065     i2c.stop();
00066     pc.printf("\n\n\n \r\tYeahhh! Register Write Complete");
00067     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);
00068     pc.printf("\n\n\n\r");             
00069     wait_us(5);
00070     i2c.~I2C();   
00071 }