NXP MCU 技术论坛
直播中

张艳

7年用户 1590经验值
私信 关注
[问答]

MPC5748G使用i2c发送数据,应该将数组存储在i2c数据框中的什么位置?

嗨,我正在尝试通过 i2c 将包含数据(数字)的数组发送到另一个微控制器(stm)
我有 NPX 给出的以下示例代码:
/**************************************************** ****************************/
/* 文件名:i2c_Z4_1.c COPYRIGHT (c) NXP Semiconductors 2016 */ /
* All Rights Reserved */
/* PLATFORM: DEVKIT-MPC5748G */
/* DESCRIPtiON: Initializes the I2C_1 in master mode and I2C_2 in slave mode*/ /
* Master 发送地址和数据,Slave 接收两者 */ /
* 地址和数据*/
/* 通过上拉寄存器 (10k) 为 */
/* SCL 和 SDA 线提供 3.3V 的上拉电压 */
/* I2C_1 I2C_2 */
/* SCL: PE0: J4_16 SCL: PE9: J2_8 */
/* SDA: PE1: J4_14 SDA: PE8: J2_6 */
/*************************************** ***********************************************/
/* 作者日期变更说明 */
/* --- ------------ ------------ -------------------- */
/ * 1.0 K Shah 2016 年 3 月 31 日初始工作版本 */
/* */
/************************************ ***********************************************/
#include "derivative.h" /* 包括外设声明 */
#include "project.h"
#include "mode.h"
#include "i2c.h"

#define KEY_VALUE1 0x5AF0ul
#define KEY_VALUE2 0xA50Ful
外部无效 xcptn_xmpl(无效);
void peri_clock_gating(void); /* 配置门控/启用外设 (I2C) 时钟 */
void hw_init(void)
{
#if defined(DEBUG_SECONDARY_CORES)
uint32_t mctl = MC_ME.MCTL.R;
#if defined(TURN_ON_CPU1)
/* 在所有模式下启用核心 1 */
MC_ME.CCTL[2].R = 0x00FE;
/* 设置内核 1 的起始地址:将重置并启动 */
MC_ME.CADDR[2].R = 0x11d0000 | 0x1;
#endif
#if defined(TURN_ON_CPU2)
/* 在所有模式下启用核心 2 */
MC_ME.CCTL[3].R = 0x00FE;
/* 设置内核 2 的起始地址:将重置并启动 */
MC_ME.CADDR[3].R = 0x13a0000 | 0x1;
#endif
MC_ME.MCTL.R = (mctl & 0xffff0000ul) | KEY_VALUE1;
MC_ME.MCTL.R = mctl; /* 键值 2 总是来自 MCTL */
#endif /* defined(DEBUG_SECONDARY_CORES) */
}
/************************************ 主要的 ************ ************************/
__attribute__ ((section(".text")))
int main(void)
{
uint8_t 数据;
xcptn_xmpl(); /* 配置和启用中断 */
peri_clock_gating(); /* 配置门控/启用外设 (I2C) 时钟 */
/* 设置时钟分频器 = 最大频率,
调用 PLL_160MHz 函数,该函数:
MC_ME.ME:为模式输入模块启用所有模式
将 XOSC 连接到 PLL
PLLDIG:LOLIE=1,PLLCAL3= 0x09C3_C000,无 sigma delta,160MHz
MC_ME.DRUN_MC:配置 sysclk = PLL
模式转换:重新进入激活 PLL=sysclk & peri clks 的 DRUN
*/
initI2C_1(); /* I2C1 模块配置为主机并处于发送模式 */
initI2C_2(); /* I2C2 模块配置为从设备并处于接收模式 */
/* 发送地址 */
transmit_addr_master_I2C_1(0x01);
数据 = receive_slave_I2C_2();
如果(数据 == 1)
{
SIUL2.MSCR[PA10].B.OBE = 1;/* 垫 PA10 (10): OBE=1。EVB 低电平有效 DS4 LED */
}
while(1)
{
transmit_data_master_I2C_1('H');
数据 = receive_slave_I2C_2();
如果(数据=='H')
{
SIUL2.MSCR[PA10].B.OBE ^= 1; /* Pad PA10 (10): OBE=OBE xor 1. EVB 低电平有效 DS4 LED */
data = 0;
}
}
返回 0;
}
/********************* 主要内容结束 ************************** *************/
void peri_clock_gating() { /* 配置门控/启用外设 (I2C) 时钟 */
MC_ME.RUN_PC[0].R = 0x00000000; /* 所有 RUN 模式的门关闭时钟 */
MC_ME.RUN_PC[1].R = 0x000000FE; /* 为所有 RUN 模式配置外设时钟 */
MC_ME.PCTL[31].B.RUN_CFG = 0x1; /* I2C_1:选择外设配置 RUN_PC[1] */
MC_ME.PCTL[32].B.RUN_CFG = 0x1; /* I2C_2:选择外设配置 RUN_PC[1] */
}

我应该在哪里写我的数组以便我可以发送它?
请帮助我解释我应该将数组存储在 i2c 数据框中的什么位置。


更多回帖

发帖
×
20
完善资料,
赚取积分