slave not working

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"       
00002 I2CSlave slave(D14,D15);                       //configuring pins p27, p28 as I2Cslave
00003 Serial pc (USBTX,USBRX);
00004 InterruptIn master_intrpt(D9);
00005  
00006 DigitalOut slave_intrpt(D10);
00007  
00008 int ack0 = 1;
00009 int ack1 = 1;                               //read/write mode for i2c 0 : write2slave, 1 : write2master
00010 
00011 
00012 char writedata;
00013 char readdata;
00014  
00015 void FUNC_I2C_WRITE2CDMS()
00016 {
00017         
00018             slave.address(0x20);
00019             while(ack0==1)
00020             {       
00021             if(slave.receive()==1)
00022             {
00023                 ack0=slave.write(&writedata,1);
00024                
00025                 
00026             }
00027             else if(slave.receive()==3 || slave.receive()==2)
00028             {
00029                 ack1=slave.read(&readdata,1);
00030             }
00031             }
00032             if(!ack0 )
00033            {
00034                 printf("slave has written %c to slave\n\r",writedata);
00035                     //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00036            }
00037             else
00038             {
00039             printf("\n\r data not written to slave \n");
00040             }
00041              if(!ack1 )
00042            {
00043                 printf("slave has read %c to master \n \r",writedata);
00044                     //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00045            }
00046             else
00047             {
00048             printf("\n\r data not read from master \n");
00049             }
00050 }
00051 
00052         
00053 void FUNC_INT()
00054 {
00055 
00056     FUNC_I2C_WRITE2CDMS();
00057     slave_intrpt = 0;   
00058 }
00059  
00060 
00061 
00062  
00063  
00064 int main()
00065 {   
00066     printf("\n slave started\n\r");
00067     
00068     master_intrpt.rise(&FUNC_INT);
00069     while(1)
00070     {
00071     writedata = pc.getc();
00072     slave_intrpt=1;
00073                 
00074     }
00075      
00076 }
00077