Final Jacaranda Program; updated during Harald's visit; In NVM program, set tm_en_vout_mon =1 before updating the oscillator frequency.

Revision:
2:c7229eac380b
Parent:
0:d4b2a035ffe3
Child:
3:3e8c16b6620c
--- a/main.cpp	Fri Jun 23 14:21:38 2017 -0500
+++ b/main.cpp	Fri May 25 17:11:59 2018 +0000
@@ -1,21 +1,91 @@
 #include "mbed.h"
 
-Thread thread;
-DigitalOut led1(LED1);
-volatile bool running = true;
+Serial pc(USBTX, USBRX);
+
+
+const int frequ = 500; //unit kHz
+const char dev_addr = 0x00; //1u
 
-// Blink function toggles the led in a long running loop
-void blink(DigitalOut *led) {
-    while (running) {
-        *led = !*led;
-        wait(1);
+char get_half_byte(int *flag) {
+    char cur_char;
+    cur_char = pc.getc();
+    if ( cur_char >= '0' && cur_char <= '9' ) {
+        cur_char = cur_char - '0';
+        *flag = 1;
+    }
+    else if ( cur_char >= 'a' && cur_char <= 'f') {
+        cur_char = cur_char - 'a'+10;
+        *flag = 1;
+    }
+    else if( cur_char >= 'A' && cur_char <= 'F') {
+        cur_char = cur_char - 'A'+10;
+        *flag = 1;
     }
-}
+    else *flag = 0; 
+    return cur_char;
+}   
 
-// Spawns a thread to run blink for 5 seconds
+void i2c_write() {
+    char reg_ptr = 0x55;
+    char reg_data = 0xaa;
+    char temp;
+    int flag1 = 0;
+    I2C i2c(p9,p10);
+    //Read Register Pointer
+    pc.printf("\n\n\r----------------------\n\n\rYahoooo! Lets program a Register");
+    while (!flag1) {
+        pc.printf("\n\n\rEnter Register Address in hex (0 to f): ");
+        reg_ptr = get_half_byte(&flag1);
+        if (flag1==0) pc.printf(" Invalid Chracter!! No worries, let us try again");
+    } 
+    //Read Register Data
+    flag1 = 0;
+    while (!flag1) {
+        pc.printf("\n\n\rEnter Data in hex (00 to ff): ");
+        reg_data = get_half_byte(&flag1); 
+        if (flag1 == 1) {
+            reg_data = reg_data << 4;
+            temp = get_half_byte(&flag1);
+            reg_data = (reg_data | temp);
+        }
+        if (flag1==0) pc.printf(" Invalid Chracter!! No worries, let us try again");
+    }                  
+    pc.printf("\n\n\rDevice Address (fixed) = 0x%2.2X ; Register Pointer = 0x%2.2X ; Register Data = 0x%2.2X ",dev_addr, reg_ptr, reg_data);
+    pc.printf("\n\n\rContinue Write? (y/n) : ");  
+    temp = 0;
+    while ( temp!='y' && temp!='n') {
+        temp = pc.getc();
+    }
+    if (temp == 'n') {
+        pc.printf("\n\n\rAborting Register Write :(");
+        return;
+    }
+    i2c.frequency(frequ*100);
+    i2c.stop(); //add a stop after hot-read
+    i2c.start();
+    flag1 = i2c.write(dev_addr);
+    if (flag1 != 1) pc.printf("\n\n\rNo Ack for dev addr :(");
+    flag1 = i2c.write(reg_ptr);
+    if (flag1 != 1) pc.printf("\n\n\rNo Ack reg pointer :(");    
+    flag1 = i2c.write(reg_data); 
+    if (flag1 != 1) pc.printf("\n\n\rNo Ack data :(");           
+    wait_us(5);
+    i2c.stop();
+    pc.printf("\n\n\rYeahhh! Register Write Complete\n\n\r---------- ");      
+    wait_us(5);
+    i2c.~I2C();   
+}  
+
 int main() {
-    thread.start(callback(blink, &led1));
-    wait(5);
-    running = false;
-    thread.join();
+    char current_char=0;
+    pc.printf("\n\r---------------------------------\n\n\rReady to have fun!!\n\n\rEnter a character- 'w' to perform write operation: ");
+    while(current_char!='w') {
+        current_char=pc.getc();
+        //pc.putc(current_char);
+    }
+    current_char=0;
+    while(1) {
+        i2c_write();
+        wait_us(5); 
+    }
 }
\ No newline at end of file