Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Wed Jul 13 2022 07:54:48 by
