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

Committer:
CactusSemi
Date:
Fri May 25 17:11:59 2018 +0000
Revision:
2:c7229eac380b
Parent:
0:d4b2a035ffe3
Child:
3:3e8c16b6620c
05?24/2018 final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mab5449 0:d4b2a035ffe3 1 #include "mbed.h"
mab5449 0:d4b2a035ffe3 2
CactusSemi 2:c7229eac380b 3 Serial pc(USBTX, USBRX);
CactusSemi 2:c7229eac380b 4
CactusSemi 2:c7229eac380b 5
CactusSemi 2:c7229eac380b 6 const int frequ = 500; //unit kHz
CactusSemi 2:c7229eac380b 7 const char dev_addr = 0x00; //1u
mab5449 0:d4b2a035ffe3 8
CactusSemi 2:c7229eac380b 9 char get_half_byte(int *flag) {
CactusSemi 2:c7229eac380b 10 char cur_char;
CactusSemi 2:c7229eac380b 11 cur_char = pc.getc();
CactusSemi 2:c7229eac380b 12 if ( cur_char >= '0' && cur_char <= '9' ) {
CactusSemi 2:c7229eac380b 13 cur_char = cur_char - '0';
CactusSemi 2:c7229eac380b 14 *flag = 1;
CactusSemi 2:c7229eac380b 15 }
CactusSemi 2:c7229eac380b 16 else if ( cur_char >= 'a' && cur_char <= 'f') {
CactusSemi 2:c7229eac380b 17 cur_char = cur_char - 'a'+10;
CactusSemi 2:c7229eac380b 18 *flag = 1;
CactusSemi 2:c7229eac380b 19 }
CactusSemi 2:c7229eac380b 20 else if( cur_char >= 'A' && cur_char <= 'F') {
CactusSemi 2:c7229eac380b 21 cur_char = cur_char - 'A'+10;
CactusSemi 2:c7229eac380b 22 *flag = 1;
mab5449 0:d4b2a035ffe3 23 }
CactusSemi 2:c7229eac380b 24 else *flag = 0;
CactusSemi 2:c7229eac380b 25 return cur_char;
CactusSemi 2:c7229eac380b 26 }
mab5449 0:d4b2a035ffe3 27
CactusSemi 2:c7229eac380b 28 void i2c_write() {
CactusSemi 2:c7229eac380b 29 char reg_ptr = 0x55;
CactusSemi 2:c7229eac380b 30 char reg_data = 0xaa;
CactusSemi 2:c7229eac380b 31 char temp;
CactusSemi 2:c7229eac380b 32 int flag1 = 0;
CactusSemi 2:c7229eac380b 33 I2C i2c(p9,p10);
CactusSemi 2:c7229eac380b 34 //Read Register Pointer
CactusSemi 2:c7229eac380b 35 pc.printf("\n\n\r----------------------\n\n\rYahoooo! Lets program a Register");
CactusSemi 2:c7229eac380b 36 while (!flag1) {
CactusSemi 2:c7229eac380b 37 pc.printf("\n\n\rEnter Register Address in hex (0 to f): ");
CactusSemi 2:c7229eac380b 38 reg_ptr = get_half_byte(&flag1);
CactusSemi 2:c7229eac380b 39 if (flag1==0) pc.printf(" Invalid Chracter!! No worries, let us try again");
CactusSemi 2:c7229eac380b 40 }
CactusSemi 2:c7229eac380b 41 //Read Register Data
CactusSemi 2:c7229eac380b 42 flag1 = 0;
CactusSemi 2:c7229eac380b 43 while (!flag1) {
CactusSemi 2:c7229eac380b 44 pc.printf("\n\n\rEnter Data in hex (00 to ff): ");
CactusSemi 2:c7229eac380b 45 reg_data = get_half_byte(&flag1);
CactusSemi 2:c7229eac380b 46 if (flag1 == 1) {
CactusSemi 2:c7229eac380b 47 reg_data = reg_data << 4;
CactusSemi 2:c7229eac380b 48 temp = get_half_byte(&flag1);
CactusSemi 2:c7229eac380b 49 reg_data = (reg_data | temp);
CactusSemi 2:c7229eac380b 50 }
CactusSemi 2:c7229eac380b 51 if (flag1==0) pc.printf(" Invalid Chracter!! No worries, let us try again");
CactusSemi 2:c7229eac380b 52 }
CactusSemi 2:c7229eac380b 53 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);
CactusSemi 2:c7229eac380b 54 pc.printf("\n\n\rContinue Write? (y/n) : ");
CactusSemi 2:c7229eac380b 55 temp = 0;
CactusSemi 2:c7229eac380b 56 while ( temp!='y' && temp!='n') {
CactusSemi 2:c7229eac380b 57 temp = pc.getc();
CactusSemi 2:c7229eac380b 58 }
CactusSemi 2:c7229eac380b 59 if (temp == 'n') {
CactusSemi 2:c7229eac380b 60 pc.printf("\n\n\rAborting Register Write :(");
CactusSemi 2:c7229eac380b 61 return;
CactusSemi 2:c7229eac380b 62 }
CactusSemi 2:c7229eac380b 63 i2c.frequency(frequ*100);
CactusSemi 2:c7229eac380b 64 i2c.stop(); //add a stop after hot-read
CactusSemi 2:c7229eac380b 65 i2c.start();
CactusSemi 2:c7229eac380b 66 flag1 = i2c.write(dev_addr);
CactusSemi 2:c7229eac380b 67 if (flag1 != 1) pc.printf("\n\n\rNo Ack for dev addr :(");
CactusSemi 2:c7229eac380b 68 flag1 = i2c.write(reg_ptr);
CactusSemi 2:c7229eac380b 69 if (flag1 != 1) pc.printf("\n\n\rNo Ack reg pointer :(");
CactusSemi 2:c7229eac380b 70 flag1 = i2c.write(reg_data);
CactusSemi 2:c7229eac380b 71 if (flag1 != 1) pc.printf("\n\n\rNo Ack data :(");
CactusSemi 2:c7229eac380b 72 wait_us(5);
CactusSemi 2:c7229eac380b 73 i2c.stop();
CactusSemi 2:c7229eac380b 74 pc.printf("\n\n\rYeahhh! Register Write Complete\n\n\r---------- ");
CactusSemi 2:c7229eac380b 75 wait_us(5);
CactusSemi 2:c7229eac380b 76 i2c.~I2C();
CactusSemi 2:c7229eac380b 77 }
CactusSemi 2:c7229eac380b 78
mab5449 0:d4b2a035ffe3 79 int main() {
CactusSemi 2:c7229eac380b 80 char current_char=0;
CactusSemi 2:c7229eac380b 81 pc.printf("\n\r---------------------------------\n\n\rReady to have fun!!\n\n\rEnter a character- 'w' to perform write operation: ");
CactusSemi 2:c7229eac380b 82 while(current_char!='w') {
CactusSemi 2:c7229eac380b 83 current_char=pc.getc();
CactusSemi 2:c7229eac380b 84 //pc.putc(current_char);
CactusSemi 2:c7229eac380b 85 }
CactusSemi 2:c7229eac380b 86 current_char=0;
CactusSemi 2:c7229eac380b 87 while(1) {
CactusSemi 2:c7229eac380b 88 i2c_write();
CactusSemi 2:c7229eac380b 89 wait_us(5);
CactusSemi 2:c7229eac380b 90 }
mab5449 0:d4b2a035ffe3 91 }