| /* |
| * 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_MASTER_BASEADDR I2C2 |
| #define I2C_MASTER_CLK_FREQ \ |
| CLOCK_GetPllFreq(kCLOCK_SystemPll1Ctrl) / (CLOCK_GetRootPreDivider(kCLOCK_RootI2c2)) / \ |
| (CLOCK_GetRootPostDivider(kCLOCK_RootI2c2)) / 5 /* SYSTEM PLL1 DIV5 */ |
| |
| #define I2C_MASTER_SLAVE_ADDR_7BIT 0x7EU |
| #define I2C_BAUDRATE 100000U |
| #define I2C_DATA_LENGTH 32U |
| |
| /******************************************************************************* |
| * Prototypes |
| ******************************************************************************/ |
| |
| /******************************************************************************* |
| * Variables |
| ******************************************************************************/ |
| |
| uint8_t g_master_txBuff[I2C_DATA_LENGTH]; |
| uint8_t g_master_rxBuff[I2C_DATA_LENGTH]; |
| volatile bool g_MasterCompletionFlag = false; |
| |
| /******************************************************************************* |
| * Code |
| ******************************************************************************/ |
| |
| /*! |
| * @brief Main function |
| */ |
| int main(void) |
| { |
| i2c_master_config_t masterConfig; |
| uint32_t sourceClock; |
| i2c_master_transfer_t masterXfer; |
| |
| /* Board specific RDC settings */ |
| BOARD_RdcInit(); |
| |
| BOARD_InitPins(); |
| BOARD_BootClockRUN(); |
| BOARD_InitDebugConsole(); |
| BOARD_InitMemory(); |
| |
| CLOCK_SetRootMux(kCLOCK_RootI2c2, kCLOCK_I2cRootmuxSysPll1Div5); /* Set I2C source to SysPLL1 Div5 160MHZ */ |
| CLOCK_SetRootDivider(kCLOCK_RootI2c2, 1U, 4U); /* Set root clock to 160MHZ / 4 = 40MHZ */ |
| |
| PRINTF("\r\nI2C board2board polling example -- Master transfer.\r\n"); |
| |
| /*2.Set up i2c master to send data to slave*/ |
| for (uint32_t i = 0U; i < I2C_DATA_LENGTH; i++) |
| { |
| g_master_txBuff[i] = i; |
| } |
| |
| PRINTF("Master will send data :"); |
| for (uint32_t i = 0U; i < I2C_DATA_LENGTH; i++) |
| { |
| if (i % 8 == 0) |
| { |
| PRINTF("\r\n"); |
| } |
| PRINTF("0x%2x ", g_master_txBuff[i]); |
| } |
| PRINTF("\r\n\r\n"); |
| |
| /* |
| * masterConfig->baudRate_Bps = 100000U; |
| * masterConfig->enableHighDrive = false; |
| * masterConfig->enableStopHold = false; |
| * masterConfig->glitchFilterWidth = 0U; |
| * masterConfig->enableMaster = true; |
| */ |
| I2C_MasterGetDefaultConfig(&masterConfig); |
| masterConfig.baudRate_Bps = I2C_BAUDRATE; |
| |
| sourceClock = I2C_MASTER_CLK_FREQ; |
| |
| I2C_MasterInit(EXAMPLE_I2C_MASTER_BASEADDR, &masterConfig, sourceClock); |
| |
| memset(&masterXfer, 0, sizeof(masterXfer)); |
| |
| masterXfer.slaveAddress = I2C_MASTER_SLAVE_ADDR_7BIT; |
| masterXfer.direction = kI2C_Write; |
| masterXfer.subaddress = (uint32_t)NULL; |
| masterXfer.subaddressSize = 0; |
| masterXfer.data = g_master_txBuff; |
| masterXfer.dataSize = I2C_DATA_LENGTH; |
| masterXfer.flags = kI2C_TransferDefaultFlag; |
| |
| I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); |
| |
| PRINTF("Receive sent data from slave :"); |
| |
| masterXfer.slaveAddress = I2C_MASTER_SLAVE_ADDR_7BIT; |
| masterXfer.direction = kI2C_Read; |
| masterXfer.subaddress = (uint32_t)NULL; |
| masterXfer.subaddressSize = 0; |
| masterXfer.data = g_master_rxBuff; |
| masterXfer.dataSize = I2C_DATA_LENGTH; |
| |
| masterXfer.flags = kI2C_TransferDefaultFlag; |
| |
| I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); |
| |
| for (uint32_t i = 0U; i < I2C_DATA_LENGTH; i++) |
| { |
| if (i % 8 == 0) |
| { |
| PRINTF("\r\n"); |
| } |
| PRINTF("0x%2x ", g_master_rxBuff[i]); |
| } |
| PRINTF("\r\n\r\n"); |
| |
| /* 6.Transfer completed. Check the data.*/ |
| for (uint32_t i = 0U; i < I2C_DATA_LENGTH; i++) |
| { |
| if (g_master_rxBuff[i] != g_master_txBuff[i]) |
| { |
| PRINTF("\r\nError occurred in the transfer ! \r\n"); |
| break; |
| } |
| } |
| |
| PRINTF("\r\nEnd of I2C example .\r\n"); |
| while (1) |
| { |
| } |
| } |