master not working

Dependencies:   mbed-rtos mbed

Fork of new_master by sakthi priya amirtharaj

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 
00004 const int addr = 0x20;                     //slave address 
00005 I2C master (D14,D15);                      //configure pins p27,p28 as I2C master
00006 Serial pc (USBTX,USBRX);
00007 DigitalOut master_intrpt(D9);
00008 InterruptIn slave_intrpt(D10);
00009 
00010 bool ack0 =true; 
00011 bool ack1 =true; 
00012 
00013 
00014 unsigned char* data_reg = (unsigned char*)0x40067004;
00015 unsigned char* status_reg = (unsigned char*)0x40067003;
00016 unsigned char* c1_reg = (unsigned char*)0x40067002;
00017 unsigned char* c2_reg = (unsigned char*)0x40067005;
00018 unsigned char* freq_reg = (unsigned char*)0x40067001;
00019 
00020 char slave_data;
00021 void FUNC_I2C_MASTER_READ()
00022 {
00023              //printf("\nhere\n");
00024             master.frequency(100000);                       //set clock frequency
00025             master_intrpt = 1;
00026            
00027             while(ack0)
00028             {
00029             printf("\nahoy\n");
00030             ack0 =  master.read(addr|1,&slave_data,1);
00031             //printf("\n read ");
00032             }
00033             if(!ack0 )
00034             {
00035                 printf("\n\r master has read %c from slave\n\r",slave_data);
00036                 //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00037             }
00038             else
00039             {
00040                 printf("\n\r data not read by master \n");
00041             }
00042             master_intrpt = 0; 
00043 }
00044             
00045 void FUNC_INT()
00046 {
00047       FUNC_I2C_MASTER_READ();
00048 }
00049 
00050 char writedata;
00051 void FUNC_MASTER_WRITE()
00052 {
00053     char data = pc.getc();
00054     master_intrpt = 1;
00055     master.frequency(100000);      
00056     while(ack1)
00057     {
00058     printf("write");
00059     ack1 = (bool) master.write(addr|0x00,&writedata,1);
00060     }
00061     //if(!ack1 )
00062       //     {
00063                     printf("master has written %c to slave\n\r",writedata);
00064                     //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00065          /*  }
00066     else
00067     {
00068         printf("\n\r data not written to slave \n");
00069     master_intrpt = 0;
00070     //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00071     }*/
00072 }
00073     
00074 
00075 int main()
00076 {   
00077     printf("\nstarted master\n");
00078     master_intrpt = 0;
00079     slave_intrpt.rise(&FUNC_INT);
00080  
00081     //master.start();  
00082     while(1)
00083     { 
00084       FUNC_MASTER_WRITE();  
00085       
00086     }
00087 }