嗨,我使用 i2c_transfere_mpc5748g 示例文件,连接 pe11 和 pe10,在不做任何更改的情况下运行代码,在我的逻辑分析仪上给出以下信号:
我试图通过将 masterTxbuffer 等同于另一个数组来更改要发送的值:
uint8_t 数组 [] = {1,3,3,5,7,3,21,9,7,5,3,2,8,5,3,1};
for (i = 0u; i < TRANSFER_SIZE; i++)
{
masterTxBuffer = array;
}
并用相同的剩余代码发送它,但问题是我在分析仪上得到了相同的信号。
代码:
/** 版权所有 (c) 2013 - 2015,Freescale Semiconductor, Inc.
* 版权所有 2016-2017 NXP
* 保留所有权利。
*
* 本软件由恩智浦“按原样”提供,不提供任何明示或
*暗示的保证,包括但不限于
针对特定用途的适销性和适用性的暗示保证*。
*在任何情况下,恩智浦或其贡献者均不对任何直接、
*间接、偶然、特殊、惩戒性或后果性损害
*(包括但不限于替代商品或
*服务的采购;使用损失、数据、或利润;或业务中断)
* 无论是根据任何责任理论引起的,无论是在合同中,
*以任何方式因使用本软件而引起的* 严格责任或侵权行为(包括疏忽或其他) ,即使已被告知
* 存在此类损害的可能性。
*/
/* 包括编译此模块/程序所需的模块 */
#include "Cpu.h"
#include "pin_mux.h"
#include "i2c1.h"
#include "dmaController1.h"
#include "clockMan1.h"
#include
/* 用户包含(此行下面的#include 不是由 Processor Expert 维护的)*/
#include
#include
#include
#include <标准布尔.h>
/* slaveTxBuffer 的初始化 */
uint8_t slaveTxBuffer[TRANSFER_SIZE] = {0x0, 0x1, 0x02, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf};
uint8_t slaveRxBuffer[TRANSFER_SIZE] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
i2c_master_state_t i2c1MasterState;
i2c_slave_state_t i2c2SlaveState;
/*!
* @brief I2C Slave Callback
*
* @Param [in] instance I2C 实例编号
* @Param [in] slaveEvent 在 I2C 总线上接收到的事件
* @Param [in] userData 传递给回调的用户定义数据
* @return None
*
* @details 此函数将由 I2C 中断处理程序调用,它
* 将为 TX 或 RX 事件分配缓冲区。
* 如果发生错误事件,它将中止当前传输。
*/
void i2c2_SlaveCallback0(i2c_slave_event_t slaveEvent, void *userData)
{
/* 从 userData 获取实例编号 */
uint32_t instance;
实例=(uint32_t)用户数据;/
* 检查事件类型:
* - 根据主机请求类型设置 RX 或 TX 缓冲区*
/ 如果(slaveEvent == I2C_SLAVE_EVENT_TX_REQ)
I2C_DRV_SlaveSetTxBuffer((uint8_t)实例,slaveTxBuffer,TRANSFER_SIZE);
}
易失性 int exit_code = 0;
/*!
rief 项目的主要功能。
details 启动初始化序列如下:
* - 启动 asm 例程
* - main()
*/
int main(void)
{
/* I2C 传输缓冲区声明 */
uint8_t masterTxBuffer[TRANSFER_SIZE] ;
uint8_t 数组 [] = {1,3,3,5,7,3,21,9,7,5,3,2,8,5,3,1};
/* 用于初始化缓冲区的变量 */
uint8_t cnt;
volatile bool isTransferOk = true;
/* 用于初始化数据缓冲区的循环的变量 */
uint16_t i;
uint16_tj;
/* 将 I2C 实例编号用作从属模块的回调参数 */
i2c2_SlaveConfig0.callbackParam = (uint32_t *)INST_I2C2;
/* 初始化和配置时钟
* - 配置系统时钟和分频器
* - 配置 LPI2C 时钟门控
* - 有关详细信息,请参阅时钟管理器组件
* / CLOCK_SYS_UpdateConfiguration(0U,CLOCK_MANAGER_POLICY_FORCIBLE);/* 初始化引脚* - 配置 I2C 引脚* - 有关详细信息,请参阅 PinSettings 组件*/ PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); /* 初始化 I2C 主机配置
* 有关配置详细信息,请参阅 I2C 组件
*/
I2C_DRV_MasterInit(INST_I2C1, &i2c1_MasterConfig0, &i2c1MasterState);
/* 初始化 I2C 主机配置
* 有关配置详细信息,请参阅 I2C 组件
*/
/* 初始化数据缓冲区 */
for (i = 0u; i < TRANSFER_SIZE; i++)
{
masterTxBuffer = array;
}
/* 发送一包数据给总线slave */
(无效)I2C_DRV_MasterSendDataBlocking(INST_I2C1,masterTxBuffer,TRANSFER_SIZE,真,OSIF_WAIT_FOREVER);
/* 检查传输是否完成且没有错误 */
for (cnt = 0U; cnt < TRANSFER_SIZE; cnt++)
{
/* 如果值不相等,则中断循环并将 isTransferOk 设置为 false */
if((masterTxBuffer[cnt] != slaveRxBuffer[cnt]))
{
isTransferOk =错误的;
休息;
}
}/* 如果值不相等,则中断循环并将 isTransferOk 设置为 false */
/* Cast isTransferOk 以避免“设置但未使用”警告 */
(void)isTransferOk;
/* 驱动程序示例结束 */
/*** Processor Expert 内部初始化。不要删除此代码!!!***/
#ifdef PEX_RTOS_INIT
PEX_RTOS_INIT(); /* 所选 RTOS 的初始化。宏由 RTOS 组件定义。*/
#endif
/*** Processor Expert 内部初始化结束。***/
/* 在这里写你的代码 */
/* 例如:for(;;) { } */
/*** 不要在这行写任何代码,否则它会在代码生成时被删除。***/
/*** RTOS 启动代码。宏 PEX_RTOS_START 由 RTOS 组件定义。不要修改此代码!!!***/
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* 启动选定的 RTOS。宏由 RTOS 组件定义。*/
#endif
/*** RTOS 启动代码结束。***/
/*** Processor Expert 主例程结束。不要修改此代码!!!***/
for(;;) {
if(exit_code != 0) {
中断;
}
}
返回退出代码;
/*** Processor Expert 主例程结束。不要在下面写代码!!!***/
} /*** 主程序结束。不要修改此文本!!!***/
/* 结束主要内容 */
/*!
** @}
*/
/*
** ######################################## ###########################
**
** 此文件由 Processor Expert 10.1 [05.21] 创建
** 用于 NXP C55 系列微控制器。
**
** ############################################## #####################
*/