![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Rtos API example
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "test_env.h" 00003 #include <stdio.h> 00004 00005 #if !DEVICE_I2C 00006 #error [NOT_SUPPORTED] I2C is not supported 00007 #endif 00008 00009 #if !DEVICE_I2CSLAVE 00010 #error [NOT_SUPPORTED] I2C Slave is not supported 00011 #endif 00012 00013 #if defined(TARGET_NUCLEO_F031K6) || \ 00014 defined (TARGET_NUCLEO_L011K4) || \ 00015 defined (TARGET_NUCLEO_L031K6) || \ 00016 defined (TARGET_DISCO_F746NG) || \ 00017 defined (TARGET_DISCO_L476VG) || \ 00018 defined (TARGET_NUCLEO_F303K8) || \ 00019 defined (TARGET_NUCLEO_F334R8) || \ 00020 defined (TARGET_DISCO_F334C8) || \ 00021 defined (TARGET_NUCLEO_F042K6) 00022 #error [NOT_SUPPORTED] Target has only one I2C instance 00023 #endif 00024 00025 #define ADDR (0x80) 00026 #define FREQ 100000 00027 00028 // ******************************************************** 00029 // This tests data transfer between two I2C interfaces on 00030 // the same chip, one configured as master, the other as 00031 // slave. 00032 // 00033 // Wiring: connect master SCL to slave SCL, and master SDA to slave SDA 00034 // ******************************************************** 00035 00036 #if defined (TARGET_DISCO_F429ZI) || \ 00037 defined (TARGET_DISCO_L053C8) 00038 I2C master(PB_9, PB_8); 00039 00040 #elif defined(TARGET_FF_ARDUINO) 00041 I2C master(D14, D15); // I2C_SDA, I2C_SCL 00042 #endif 00043 00044 00045 #if defined (TARGET_NUCLEO_F429ZI) || \ 00046 defined (TARGET_NUCLEO_F767ZI) || \ 00047 defined (TARGET_NUCLEO_L053R8) || \ 00048 defined (TARGET_NUCLEO_L073RZ) || \ 00049 defined (TARGET_NUCLEO_L152RE) || \ 00050 defined (TARGET_NUCLEO_L476RG) || \ 00051 defined (TARGET_NUCLEO_F207ZG) || \ 00052 defined (TARGET_NUCLEO_F103RB) || \ 00053 defined (TARGET_NUCLEO_F091RC) || \ 00054 defined (TARGET_DISCO_F429ZI) || \ 00055 defined (TARGET_DISCO_F469NI) || \ 00056 defined (TARGET_DISCO_L053C8) || \ 00057 defined (TARGET_NUCLEO_F446ZE) 00058 I2CSlave slave(PB_11, PB_10); 00059 00060 #elif defined (TARGET_NUCLEO_F303RE) || \ 00061 defined (TARGET_NUCLEO_F302R8) 00062 I2CSlave slave(D2, D8); 00063 00064 #elif defined (TARGET_NUCLEO_F303ZE) 00065 I2CSlave slave(PC_9, PA_8); 00066 00067 #elif defined (TARGET_NUCLEO_F746ZG) 00068 I2CSlave slave(D2, D4); 00069 00070 #elif defined (TARGET_NUCLEO_F030R8) || \ 00071 defined (TARGET_NUCLEO_F070RB) || \ 00072 defined (TARGET_NUCLEO_F072RB) 00073 I2CSlave slave(PB_11, D6); 00074 00075 #elif defined (TARGET_DISCO_L475VG_IOT01A) 00076 I2CSlave slave(A4, A5); 00077 00078 #else 00079 I2CSlave slave(D3, D6); 00080 00081 #endif 00082 00083 int main() 00084 { 00085 char sent = 'T', received; 00086 00087 master.frequency(FREQ); 00088 slave.frequency(FREQ); 00089 slave.address(ADDR); 00090 00091 // First transfer: master to slave 00092 master.start(); 00093 master.write(ADDR); 00094 master.write(sent); 00095 while(slave.receive() != I2CSlave::WriteAddressed); 00096 00097 slave.read(&received, 1); 00098 if(sent != received) 00099 { 00100 notify_completion(false); 00101 return 1; 00102 } 00103 master.stop(); 00104 00105 // Second transfer: slave to master 00106 master.start(); 00107 master.write(ADDR | 1); 00108 while(slave.receive() != I2CSlave::ReadAddressed); 00109 00110 slave.write(received); 00111 received = master.read(0); 00112 master.stop(); 00113 notify_completion(received == sent); 00114 } 00115
Generated on Sun Jul 17 2022 08:25:26 by
![doxygen](doxygen.png)