master not working

Dependencies:   mbed-rtos mbed

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             master.frequency(100000);                       //set clock frequency
00024             master_intrpt = 1;
00025             while(ack0)
00026             {
00027             ack0 =  master.read(addr|1,&slave_data,1);
00028             }
00029             if(!ack0 )
00030             {
00031                 printf("\n\r master has read %c from slave\n\r",slave_data);
00032                 //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00033             }
00034             else
00035             {
00036                 printf("\n\r data not read by master \n");
00037             }
00038             master_intrpt = 0; 
00039 }
00040             
00041 void FUNC_INT()
00042 {
00043       FUNC_I2C_MASTER_READ();
00044 }
00045 
00046 char writedata;
00047 void FUNC_MASTER_WRITE()
00048 {
00049     char data = pc.getc();
00050     master_intrpt = 1;
00051     while(ack1)
00052     {
00053         ack1 = (bool) master.write(addr|0x00,&writedata,1);
00054     }
00055     if(!ack1 )
00056            {
00057                     printf("master has written %c to slave\n\r",writedata);
00058                     //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00059            }
00060     else
00061     {
00062         printf("\n\r data not written to slave \n");
00063     master_intrpt = 0;
00064     //printf("\n \r %d %d %d %d %d\n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
00065     }
00066 }
00067     
00068 
00069 int main()
00070 {   
00071     printf("\nstarted master\n");
00072     master_intrpt = 0;
00073     slave_intrpt.rise(&FUNC_INT);
00074  
00075     //master.start();  
00076     while(1)
00077     { 
00078       FUNC_MASTER_WRITE();  
00079       
00080     }
00081 }