]> begriffs open source - cmsis/blob - CMSIS/DoxyGen/Driver/src/I2C_SlaveDemo.c
RTX5: minor change in events (name consistency)
[cmsis] / CMSIS / DoxyGen / Driver / src / I2C_SlaveDemo.c
1 #include "Driver_I2C.h"
2  
3 /* I2C driver instance */
4 extern ARM_DRIVER_I2C            Driver_I2C0; 
5 static ARM_DRIVER_I2C *I2Cdrv = &Driver_I2C0;
6  
7 static volatile uint32_t I2C_Event;
8  
9 /* I2C Signal Event function callback */
10 static void I2C_SignalEvent (uint32_t event) {
11   I2C_Event |= event;
12 }
13  
14 int main (void) {
15   uint8_t cnt = 0;
16  
17   /* Initialize I2C peripheral */
18   I2Cdrv->Initialize(I2C_SignalEvent);
19  
20   /* Power-on I2C peripheral */
21   I2Cdrv->PowerControl(ARM_POWER_FULL);
22  
23   /* Configure I2C bus */
24   I2Cdrv->Control(ARM_I2C_OWN_ADDRESS, 0x78);
25  
26   I2C_Event = 0;
27
28   while (1) {
29     /* Receive chunk */
30     I2Cdrv->SlaveReceive(&cnt, 1);
31     while ((I2C_Event & ARM_I2C_EVENT_TRANSFER_DONE) == 0);
32     /* Clear transfer done flag */
33     I2C_Event &= ~ARM_I2C_EVENT_TRANSFER_DONE;
34  
35     /* Transmit chunk back */
36     I2Cdrv->SlaveTransmit(&cnt, 1);
37     while ((I2C_Event & ARM_I2C_EVENT_TRANSFER_DONE) == 0);
38     /* Clear transfer done flag */
39     I2C_Event &= ~ARM_I2C_EVENT_TRANSFER_DONE;
40   }
41 }