| /* |
| * Copyright (c) 2015, Freescale Semiconductor, Inc. |
| * Copyright 2016-2017 NXP |
| * All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| /* Standard C Included Files */ |
| #include <string.h> |
| /* SDK Included Files */ |
| #include "board.h" |
| #include "fsl_debug_console.h" |
| #include "fsl_i2c.h" |
| |
| #include "pin_mux.h" |
| #include "clock_config.h" |
| /******************************************************************************* |
| * Definitions |
| ******************************************************************************/ |
| #define EXAMPLE_I2C_SLAVE_BASEADDR I2C2 |
| |
| #define I2C_MASTER_SLAVE_ADDR_7BIT 0x7EU |
| #define I2C_DATA_LENGTH 32U |
| |
| /******************************************************************************* |
| * Prototypes |
| ******************************************************************************/ |
| |
| /******************************************************************************* |
| * Variables |
| ******************************************************************************/ |
| |
| uint8_t g_slave_buff[I2C_DATA_LENGTH]; |
| i2c_slave_handle_t g_s_handle; |
| volatile bool g_SlaveCompletionFlag = false; |
| |
| /******************************************************************************* |
| * Code |
| ******************************************************************************/ |
| |
| static void i2c_slave_callback(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData) |
| { |
| switch (xfer->event) |
| { |
| /* Transmit request */ |
| case kI2C_SlaveTransmitEvent: |
| /* Update information for transmit process */ |
| xfer->data = g_slave_buff; |
| xfer->dataSize = I2C_DATA_LENGTH; |
| break; |
| |
| /* Receive request */ |
| case kI2C_SlaveReceiveEvent: |
| /* Update information for received process */ |
| xfer->data = g_slave_buff; |
| xfer->dataSize = I2C_DATA_LENGTH; |
| break; |
| |
| /* Transfer done */ |
| case kI2C_SlaveCompletionEvent: |
| g_SlaveCompletionFlag = true; |
| break; |
| |
| default: |
| g_SlaveCompletionFlag = true; |
| break; |
| } |
| } |
| |
| /*! |
| * @brief Main function |
| */ |
| int main(void) |
| { |
| i2c_slave_config_t slaveConfig; |
| |
| /* Board specific RDC settings */ |
| BOARD_RdcInit(); |
| |
| BOARD_InitPins(); |
| BOARD_BootClockRUN(); |
| BOARD_InitDebugConsole(); |
| BOARD_InitMemory(); |
| |
| PRINTF("\r\nI2C board2board polling example -- Slave transfer.\r\n\r\n"); |
| |
| /*1.Set up i2c slave first*/ |
| /* |
| * slaveConfig->addressingMode = kI2C_Address7bit; |
| * slaveConfig->enableGeneralCall = false; |
| * slaveConfig->enableWakeUp = false; |
| * slaveConfig->enableHighDrive = false; |
| * slaveConfig->enableBaudRateCtl = false; |
| * slaveConfig->enableSlave = true; |
| */ |
| I2C_SlaveGetDefaultConfig(&slaveConfig); |
| |
| slaveConfig.slaveAddress = I2C_MASTER_SLAVE_ADDR_7BIT; |
| |
| I2C_SlaveInit(EXAMPLE_I2C_SLAVE_BASEADDR, &slaveConfig); |
| |
| for (uint32_t i = 0U; i < I2C_DATA_LENGTH; i++) |
| { |
| g_slave_buff[i] = 0; |
| } |
| |
| memset(&g_s_handle, 0, sizeof(g_s_handle)); |
| |
| I2C_SlaveTransferCreateHandle(EXAMPLE_I2C_SLAVE_BASEADDR, &g_s_handle, i2c_slave_callback, NULL); |
| |
| /* Set up slave transfer. */ |
| I2C_SlaveTransferNonBlocking(EXAMPLE_I2C_SLAVE_BASEADDR, &g_s_handle, kI2C_SlaveCompletionEvent); |
| |
| /* Wait for transfer completed. */ |
| while (!g_SlaveCompletionFlag) |
| { |
| } |
| g_SlaveCompletionFlag = false; |
| |
| PRINTF("Slave received data :"); |
| for (uint32_t i = 0U; i < I2C_DATA_LENGTH; i++) |
| { |
| if (i % 8 == 0) |
| { |
| PRINTF("\r\n"); |
| } |
| PRINTF("0x%2x ", g_slave_buff[i]); |
| } |
| PRINTF("\r\n\r\n"); |
| |
| /* Wait for master receive completed.*/ |
| while (!g_SlaveCompletionFlag) |
| { |
| } |
| g_SlaveCompletionFlag = false; |
| |
| PRINTF("\r\nEnd of I2C example .\r\n"); |
| while (1) |
| { |
| } |
| } |