From 33d717d2c08a62f5e0b873d302ff45019fab55f8 Mon Sep 17 00:00:00 2001 From: silabs-Ruibin <66031031+silabs-Ruibin@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:42:05 -0500 Subject: [PATCH] Adds I2C leader interrupt based example --- .DS_Store | Bin 0 -> 8196 bytes platform_i2c_leader_interrupt/.DS_Store | Bin 0 -> 6148 bytes .../platform_i2c_leader_interrupt.sls | Bin 0 -> 58666 bytes platform_i2c_leader_interrupt/inc/app.h | 31 ++ platform_i2c_leader_interrupt/readme.md | 54 +++ platform_i2c_leader_interrupt/src/app.c | 377 ++++++++++++++++++ platform_i2c_leader_interrupt/src/main.c | 58 +++ 7 files changed, 520 insertions(+) create mode 100644 .DS_Store create mode 100644 platform_i2c_leader_interrupt/.DS_Store create mode 100644 platform_i2c_leader_interrupt/SimplicityStudio/platform_i2c_leader_interrupt.sls create mode 100644 platform_i2c_leader_interrupt/inc/app.h create mode 100644 platform_i2c_leader_interrupt/readme.md create mode 100644 platform_i2c_leader_interrupt/src/app.c create mode 100644 platform_i2c_leader_interrupt/src/main.c diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..78aa9fd9fb1ec0b52e3dacf5ac74a809a54af718 GIT binary patch literal 8196 zcmeHMU2GIp6h3EKWX7Ro3WYAPEL#c^VWlllq#$McL-@DQZRsDd&h89!WOk;VHP1}O##IE}}dImu)oCxjGmKmi8~?uy19G7vIwHv=qpUk;;SgAV?*{CxvtDUY|oq!EMaJkRPKvSRH#6bR*KO5SM3b~7}~ zmCUGZd45yVb(AV9=R7o5o-3>J(bR}rO8L59@H+JTFzfZYuAM2j^~_<*ETy&DPS^2u z%Q5pDU>PQv9O<_l!!32V1;_9>HYEmRMOM;UWPH4(wIva6Y2I=+5g%{e(3FU8+PL}b zSw&vd(73H9ebUZ3?gg=E3^op^x`Tv^vtz*UvUY}6#HODGk+xUt6hv06E)#j9Or-L# zIxpJaKcEf`SXtLeS!c|&Hs2#I_fYp>-YgP_{aM#8<#H- zz2=zD+5>*j81me_-^np)O)Ge2k4X@#Xm$~hW?8@{?H=_l*YOUUd5>g6vPqDqd{DJG z*03hgym?!4=bi(HCadRbH4D^Qb%@@N<6FlqGe4+%S<^8r=R{x0GW?PLqUBi`+w67p zoT=1chca1R7g@4&Su`pPZUM@s1BHxrs$lu2wFX(9teLM>tI_(EimY8eV$ee#a1C}R zgO5a`^^eH%Fw=MDO{#@jjjmls0KM0vwTmg##wJD4yxx=KTmq_YYLOMq=(F{VX$Pv- zt)$x5Ulc13lx;g?dh*0T*3IQ;ot{ufJG*3A`|23G_kP{;yGKoD>Zv++%kq#nqUX)- z5_xwSv0s+?D@+Oj&2vJYtdB+q*;MU@VH&jVC3TVNXe!z#Yu^(_vz($u@kFmf zgq7ToTr1v+V769trfPPwE`wFD8QP!+j#7-Df^+Z+yakuwL--u7!Zo-KKf+J&Gu(vV z;7|A)5fxm3wYUfu;|h#pJvLwyw&GUYhP&_}9>N~%#X-zq77aX(C(*|O7I6%p!RPRK zJdYRg1$+%($2agzd>=o;kMS~oidXSlyoTT55BLlIiZ}5eNs{JCRZ_K7Cq<;C(lTki z)F^F{wo7f|`K5By4o|IzH>7S7vkSLi-;yTo8E&y%yLPL4@0W19QN;snVeO*DD^@+a ze&gd$v`_h<@Y=GY-W~wl=ch#q_j&FncRDMNM0I(rkAlJ+yA_JlV^^EY++Ut#)^T-Z zOq)YtBf6{AH8JfW3K`K|8%xAAi6T{W8)MC?RzY#7aO|d7Le)?foh|BCRjZ_kR3?{3 zmei^0j-Uj^NYe={a<;gs1Tgj^jCemi+xZULbFO5nsZW z@m0KpZ{s`oF22Y8{tA9}hbQlw?#cM|>^!-c$~(5}oS<3Cu`>MzGxsXQP=w|GJ7@m= zf946ok&uCqf&V=NSlN~8>Y!!Jw1Kc(J5JYAbg{zhCWPb=s(3n1lBeS&r~WXccAQKZ hCK<>HAxT5!KmQ?s=PmTP9iIQUf2@Y*{{wdZ{|kk=wC?}_ literal 0 HcmV?d00001 diff --git a/platform_i2c_leader_interrupt/.DS_Store b/platform_i2c_leader_interrupt/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b695f5e308af71239f6d203ef5b4379d6e6fbc77 GIT binary patch literal 6148 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 z�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 N@jng@>zDfp{C^d|t8@SW literal 0 HcmV?d00001 diff --git a/platform_i2c_leader_interrupt/inc/app.h b/platform_i2c_leader_interrupt/inc/app.h new file mode 100644 index 0000000..b8f74c8 --- /dev/null +++ b/platform_i2c_leader_interrupt/inc/app.h @@ -0,0 +1,31 @@ +/***************************************************************************//** + * @file + * @brief Top level application functions + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#ifndef APP_H +#define APP_H + +/***************************************************************************//** + * Initialize application. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * App ticking function. + ******************************************************************************/ +void app_process_action(void); + +#endif // APP_H diff --git a/platform_i2c_leader_interrupt/readme.md b/platform_i2c_leader_interrupt/readme.md new file mode 100644 index 0000000..c7d1421 --- /dev/null +++ b/platform_i2c_leader_interrupt/readme.md @@ -0,0 +1,54 @@ +# I2C leader interrupt based C Example + +## Summary +This project shows how to configure the I2C periphreal in leader mode, +and use interrupt based routine to perform I2C transfers with a +secondary device. The I2C state machine is implemented in the I2C interrupt +handler. Both read and write operations are supported and can be configured +using the push buttons. + +## Gecko SDK Version +v4.4.3 + +## Hardware Required + +* Board: 2x Silicon Labs EFR32xG24 Starter Kit + WSTK (BRD4186C + BRD4001A) + * Device: EFR32MG24B210F1536IM48 + +## Setup +Clone the repository with this project from GitHub onto your local machine. + +From within the Simplicity Studio IDE, select Import -> MCU Project... from the +Project menu. Click the Browse button and navigate to the local repository +folder, then to the SimplicityStudio folder, select the .slsproj/.sls file for the +board, click the Next button twice, and then click Finish. + +Import the [I2C_Follower](https://github.com/SiliconLabs/peripheral_examples/tree/master/series2/i2c/i2c_follower) example from the peripehral examples repo + + +Connect the GND, I2C_SCL, and I2C_SDA pins between the two boards and use a +logic analyzer to probe the SCL and SDA pin. Or run the project in debug mode +and check the receiveBuffer for read operations. + +I2C_SCL -> PC05 EXP 15 +I2C_SDA -> PC07 EXP 16 + +Press Push Button 0 for read request from leader to follower +Press Push Button 1 for write request from leader to follower + +## How the Project Works +The I2C leader state machine is configured in the I2C handler using different +I2C interrupt. The state machine itself is documented in the EFR32xg24 reference +manual's I2C chapter. +The I2C follower example is used to test the leader project, but ideally any I2C +follower device should work as long as the follower's address is written correctly. + +## .sls Projects Used +* i2c_leader_interrupt.sls + +## How to Port to Another Part +Right click on the project and select "Properties" and navigate to "C/C++ +Build" then "Board/Part/SDK". Select the new board or part to target and apply +the changes. There may be some dependencies that need to be resolved when +changing the target architecture. This project can only be run on other +Series 1 devices. \ No newline at end of file diff --git a/platform_i2c_leader_interrupt/src/app.c b/platform_i2c_leader_interrupt/src/app.c new file mode 100644 index 0000000..79ce3ab --- /dev/null +++ b/platform_i2c_leader_interrupt/src/app.c @@ -0,0 +1,377 @@ +/***************************************************************************//** + * @file + * @brief Top level application functions + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#include +#include +#include "em_chip.h" +#include "em_device.h" +#include "em_cmu.h" +#include "em_i2c.h" +#include "em_gpio.h" + +// I2C pins (SCL = PC5/EXP15; SDA = PC7/EXP16) +// PD03 is the I2C domain that enables pull ups on the board +#define I2C_SCL_PORT gpioPortC +#define I2C_SCL_PIN 5 +#define I2C_SDA_PORT gpioPortC +#define I2C_SDA_PIN 7 +#define I2C_DOMAIN_POWER_PORT gpioPortD +#define I2C_DOMAIN_POWER_PIN 3 + +// push buttons +// PB0 - READ, PB1 - WRITE +#define PUSH_BTN0_PORT gpioPortB +#define PUSH_BTN0_PIN 1 +#define PUSH_BTN1_PORT gpioPortB +#define PUSH_BTN1_PIN 3 + +// Address of the I2C follower device (left-shifted to bits [7:1]) +#define I2C_FOLLOWER_ADDRESS 0xE2 + +// Read/write bit/mask for the I2C follower device address +#define I2C_RNOTW_BIT 0x01 +#define I2C_RNOTW_MASK 0xFE + +// I2C interrupt group +#define I2C_LEADER_INTERRUPT I2C_IEN_START | I2C_IEN_ACK \ + | I2C_IEN_NACK | \ + I2C_IEN_RXDATAV | I2C_IEN_MSTOP + +#define I2C_ERROR_INTERRUPT I2C_IEN_SDAERR | I2C_IEN_SCLERR\ + | I2C_IEN_CLERR | I2C_IEN_BUSERR + +#define I2C_BUFFER_SIZE 10 +#define I2C_WRITE_TARGET 0 // offset of the target (follower) + // array to written to + +#define DEBUG_I2C 0 + +// get I2C ready for a transfer +void i2cTransferReset(uint32_t transferType); + +// state machine enum +enum i2c_state_machine { + I2C_IDLE_STATE = 0, + I2C_START_STATE = 0x1, + I2C_ACK_TRANSMISSION_STATE = 0x2, + I2C_STOP_STATE = 0x5, + I2C_NACK_STATE = 0x6, + I2C_ERR_STATE = 0x7 +}; + +// transfer type enum +enum i2c_transfer_type { + I2C_TRANSFER_READ, + I2C_TRANSFER_WRITE +}; + +uint8_t receiveBuffer[I2C_BUFFER_SIZE]; +uint8_t transmitBuffer[I2C_BUFFER_SIZE]; +uint8_t targetAddressSent; // flag check for offset sent to follower +uint32_t i2c_state; // i2c state machine +uint32_t i2c_transfer; // i2c transfer type +uint32_t receiveIndex; +uint32_t transmitIndex; +uint8_t i2c_startTransfer; + +/***************************************************************************//** + * GPIO odd pins interrupt handler + ******************************************************************************/ +void GPIO_ODD_IRQHandler(void) +{ + uint32_t flags = GPIO_IntGet(); + GPIO_IntClear(flags); + + if (i2c_startTransfer == true) { + // middle of transfer, ignore request + return; + } + + if (flags & GPIO_IF_EXTIF1) { + // push button 0 is triggered + i2cTransferReset(I2C_TRANSFER_READ); + GPIO_PinOutSet(gpioPortB, 2); + return; + } + + if (flags & GPIO_IF_EXTIF3) { + // push button 1 is triggered + i2cTransferReset(I2C_TRANSFER_WRITE); + GPIO_PinOutSet(gpioPortB, 4); + return; + } +} + +/***************************************************************************//** + * I2C0 interrupt handler + ******************************************************************************/ +void I2C0_IRQHandler(void) +{ + uint32_t flags = I2C_IntGet(I2C0); + I2C_IntClear(I2C0, flags); + + // if in the middle of a transfer + if (!i2c_startTransfer) { + return; + } + + // stop condition reached + if (flags & I2C_IF_MSTOP) { + i2c_state = I2C_STOP_STATE; + i2c_startTransfer = false; // transfer done + return; + } + + if (flags & (I2C_ERROR_INTERRUPT)) { + i2c_state = I2C_ERR_STATE; + return; + } + + if (flags & I2C_IF_NACK) { + // transmission NACKed, stop transmission + I2C0 -> CMD_SET = I2C_CMD_STOP; + return; + } + + // I2C state machine + switch (i2c_state) { + case I2C_IDLE_STATE: + // should expect start condition + // All condition will start with a write request to set target address + if (flags & I2C_IF_START) { + if ((i2c_transfer == I2C_TRANSFER_READ) & targetAddressSent) { + // target address sent already, issue a read request + I2C0 -> TXDATA = (I2C_FOLLOWER_ADDRESS | I2C_RNOTW_BIT); + } else { + // write target address and write request + I2C0 -> TXDATA = I2C_FOLLOWER_ADDRESS; + } + i2c_state = I2C_START_STATE; + } + break; + + case I2C_START_STATE: + // should expect a ACK or NACK from follower + if (flags & I2C_IF_ACK) { + i2c_state = I2C_ACK_TRANSMISSION_STATE; + // Address recognized, check RXDATAV if read + if ((i2c_transfer == I2C_TRANSFER_READ) & (flags & I2C_IF_RXDATAV) & targetAddressSent) { + // data valid, read from RXDATA + receiveBuffer[receiveIndex++] = I2C0 -> RXDATA; + I2C_IntClear(I2C0, I2C_IF_RXDATAV); + if (receiveIndex >= I2C_BUFFER_SIZE) { + // end transmission + I2C0 -> CMD_SET = I2C_CMD_STOP | I2C_CMD_NACK; + } else { + I2C0 -> CMD_SET = I2C_CMD_ACK; + } + } + else if((i2c_transfer == I2C_TRANSFER_WRITE) | !targetAddressSent) { + // first send the offset to write to + I2C0 -> TXDATA = (uint8_t)I2C_WRITE_TARGET; + } + } + break; + + case I2C_ACK_TRANSMISSION_STATE: + // if read, RXDATA should be valid + // if write, should expect an ACK + // Reset targetAddress Sent + if (i2c_transfer == I2C_TRANSFER_READ) { + if(flags & I2C_IF_ACK) { + // This is an Ack for setting the target address + targetAddressSent = true; + // start the read + i2c_state = I2C_IDLE_STATE; + I2C0 -> CMD_SET = I2C_CMD_START; + } + if (flags & I2C_IF_RXDATAV) { + targetAddressSent = false; + receiveBuffer[receiveIndex++] = (uint8_t)I2C0 -> RXDATA; + if (receiveIndex >= I2C_BUFFER_SIZE) { + // stop command issued + I2C0 -> CMD_SET = I2C_CMD_STOP | I2C_CMD_NACK; + } else { + I2C0 -> CMD_SET = I2C_CMD_ACK; + } + I2C_IntClear(I2C0, I2C_IF_RXDATAV); + } + } else { + // if write, should expect an ACK from the secondary device + if (flags & I2C_IF_ACK) { + // continue transmission unless stop stage reached + I2C0 -> TXDATA = (uint8_t)transmitBuffer[transmitIndex++]; + // no more data left to send, stop ongoing transfer + if (transmitIndex >= I2C_BUFFER_SIZE) { + I2C0 -> CMD_SET = I2C_CMD_STOP; + } + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * @brief Setup I2C + ******************************************************************************/ +void initI2C(void) +{ + CMU_ClockEnable(cmuClock_I2C0, true); + + // Use default settings + I2C_Init_TypeDef i2cInit = I2C_INIT_DEFAULT; + + /* + * Power up the Si7021 RHT sensor domain on the mainboard. This + * also powers up the sensor's local SCL and SDA pull-ups, which + * eliminates the need to jumper resistors to the EXP header pins. + */ + GPIO_PinModeSet(I2C_DOMAIN_POWER_PORT, + I2C_DOMAIN_POWER_PIN, + gpioModePushPull, + 1); + + // Configure SCL and SDA for open-drain operation + GPIO_PinModeSet(I2C_SCL_PORT, + I2C_SCL_PIN, + gpioModeWiredAndPullUpFilter, + 1); + GPIO_PinModeSet(I2C_SDA_PORT, + I2C_SDA_PIN, + gpioModeWiredAndPullUpFilter, + 1); + + // Route I2C pins to GPIO + GPIO->I2CROUTE[0].SCLROUTE = (I2C_SCL_PORT << _GPIO_I2C_SCLROUTE_PORT_SHIFT + | (I2C_SCL_PIN << + _GPIO_I2C_SCLROUTE_PIN_SHIFT)); + GPIO->I2CROUTE[0].SDAROUTE = (I2C_SDA_PORT << _GPIO_I2C_SDAROUTE_PORT_SHIFT + | (I2C_SDA_PIN << + _GPIO_I2C_SDAROUTE_PIN_SHIFT)); + GPIO->I2CROUTE[0].ROUTEEN = GPIO_I2C_ROUTEEN_SCLPEN | GPIO_I2C_ROUTEEN_SDAPEN; + + // Initialize the I2C + I2C_Init(I2C0, &i2cInit); + + // Set the status flags and index + i2c_startTransfer = false; + +} + +/***************************************************************************//** + * @brief reset I2C and prepare for another transfer. transferType is either read + * or write. Reset the transmit and receive index and flush I2C buffer + ******************************************************************************/ +void i2cTransferReset(uint32_t transferType) +{ + GPIO_PinModeSet(gpioPortB, 2, gpioModePushPull, 0); + GPIO_PinModeSet(gpioPortB, 4, gpioModePushPull, 0); + i2c_state = I2C_IDLE_STATE; + i2c_transfer = transferType; + transmitIndex = 0; + receiveIndex = 0; + targetAddressSent = false; + + I2C0->CMD_SET = I2C_CMD_ABORT; + /* Ensure buffers are empty. */ + I2C0->CMD = I2C_CMD_CLEARPC | I2C_CMD_CLEARTX; + + // Flush RX + while (I2C0->STATUS & I2C_STATUS_RXDATAV) { + I2C0->RXDATA; + } + +#if defined(_SILICON_LABS_32B_SERIES_2) + + /* SW needs to clear RXDATAV IF on Series 2 devices. + Flag is kept high by HW if buffer is not empty. */ + I2C_IntClear(I2C0, I2C_IF_RXDATAV); +#endif + + // Clear all I2C interrupt + I2C_IntClear(I2C0, _I2C_IF_MASK); + // Enable I2C interrupt groups + I2C_IntEnable(I2C0, I2C_LEADER_INTERRUPT | I2C_ERROR_INTERRUPT); + NVIC_ClearPendingIRQ(I2C0_IRQn); + NVIC_EnableIRQ(I2C0_IRQn); + + if(transferType == I2C_TRANSFER_WRITE){ + // populate transmit buffer + for (int i = 0; i < I2C_BUFFER_SIZE; i++) { + transmitBuffer[i] = receiveBuffer[i]+1; + } + } + + i2c_startTransfer = true; + // Send start condition + I2C0->CMD_SET = I2C_CMD_START; +} + +/***************************************************************************//** + * @brief GPIO Initialization + ******************************************************************************/ +void initGPIO(void) +{ + // initialize push button 0 and 1 + GPIO_PinModeSet(PUSH_BTN0_PORT, PUSH_BTN0_PIN, gpioModeInputPull, 1); + GPIO_PinModeSet(PUSH_BTN1_PORT, PUSH_BTN1_PIN, gpioModeInputPull, 1); + + GPIO_PinModeSet(gpioPortB, 2, gpioModePushPull, 0); + GPIO_PinModeSet(gpioPortB, 4, gpioModePushPull, 0); + + // configure push button 0 and 1 interrupt + GPIO_ExtIntConfig(PUSH_BTN0_PORT, + PUSH_BTN0_PIN, + PUSH_BTN0_PIN, + false, + true, + true); + GPIO_ExtIntConfig(PUSH_BTN1_PORT, + PUSH_BTN1_PIN, + PUSH_BTN1_PIN, + false, + true, + true); + + // Enable NVIC interrupt + NVIC_ClearPendingIRQ(GPIO_ODD_IRQn); + NVIC_EnableIRQ(GPIO_ODD_IRQn); +} + +/***************************************************************************//** + * Initialize application. + ******************************************************************************/ +void app_init(void) +{ + // Initialize I2C + initI2C(); + I2C_Enable(I2C0, true); + + // Enable push button interrupts + initGPIO(); +} + +/***************************************************************************//** + * App ticking function. + ******************************************************************************/ +void app_process_action(void) +{ + // while loop +} diff --git a/platform_i2c_leader_interrupt/src/main.c b/platform_i2c_leader_interrupt/src/main.c new file mode 100644 index 0000000..2da253b --- /dev/null +++ b/platform_i2c_leader_interrupt/src/main.c @@ -0,0 +1,58 @@ +/***************************************************************************//** + * @file main.c + * @brief main() function. + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +}