c语言 指针混合编程,C++与C语言混合编程案例

/**

* @file    MIMXRT685S_C_Plus_Demo.cpp

* @brief   Application entry point.

*/

#include

#include "board.h"

#include "peripherals.h"

#include "pin_mux.h"

#include "clock_config.h"

#include "MIMXRT685S_cm33.h"

#include "fsl_debug_console.h"

#include "i2c_read_accel_value_transfer.h"

/* TODO: insert other include files here. */

#define ACCEL_STATUS 0x00U

#define ACCEL_XYZ_DATA_CFG 0x0EU

#define ACCEL_CTRL_REG1 0x2AU

#define ACCEL_READ_TIMES 10U

/* TODO: insert other definitions and declarations here. */

/*

* @brief   Application entry point.

*/

int main(void)

{

bool isThereAccel = false;

/* Use 16 MHz clock for the FLEXCOMM2 */

CLOCK_AttachClk(kSFRO_to_FLEXCOMM2);

/* Init board hardware. */

BOARD_InitBootPins();

BOARD_InitBootClocks();

BOARD_InitBootPeripherals();

/* Init FSL debug console. */

BOARD_InitDebugConsole();

PRINTF("\r\nC_Plus Mix C Demo-- Read Accelerometer Value\r\n");

I2C_MasterTransferCreateHandle(BOARD_ACCEL_I2C_BASEADDR, &g_m_handle, i2c_master_callback, NULL);

isThereAccel = I2C_ReadAccelWhoAmI();

/*  read the accel xyz value if there is accel device on board */

if (true == isThereAccel)

{

uint8_t databyte  = 0;

uint8_t write_reg = 0;

uint8_t readBuff[7];

int16_t x, y, z;

uint8_t status0_value = 0;

uint32_t i            = 0U;

/*  please refer to the "example FXOS8700CQ Driver Code" in FXOS8700 datasheet. */

/*  write 0000 0000 = 0x00 to accelerometer control register 1 */

/*  standby */

/*  [7-1] = 0000 000 */

/*  [0]: active=0 */

write_reg = ACCEL_CTRL_REG1;

databyte  = 0;

I2C_WriteAccelReg(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, write_reg, databyte);

/*  write 0000 0001= 0x01 to XYZ_DATA_CFG register */

/*  [7]: reserved */

/*  [6]: reserved */

/*  [5]: reserved */

/*  [4]: hpf_out=0 */

/*  [3]: reserved */

/*  [2]: reserved */

/*  [1-0]: fs=01 for accelerometer range of +/-4g range with 0.488mg/LSB */

/*  databyte = 0x01; */

write_reg = ACCEL_XYZ_DATA_CFG;

databyte  = 0x01;

I2C_WriteAccelReg(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, write_reg, databyte);

/*  write 0000 1101 = 0x0D to accelerometer control register 1 */

/*  [7-6]: aslp_rate=00 */

/*  [5-3]: dr=001 for 200Hz data rate (when in hybrid mode) */

/*  [2]: lnoise=1 for low noise mode */

/*  [1]: f_read=0 for normal 16 bit reads */

/*  [0]: active=1 to take the part out of standby and enable sampling */

/*   databyte = 0x0D; */

write_reg = ACCEL_CTRL_REG1;

databyte  = 0x0d;

I2C_WriteAccelReg(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, write_reg, databyte);

PRINTF("The accel values:\r\n");

for (i = 0; i < ACCEL_READ_TIMES; i++)

{

status0_value = 0;

/*  wait for new data are ready. */

while (status0_value != 0xff)

{

I2C_ReadAccelRegs(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, ACCEL_STATUS, &status0_value, 1);

}

/*  Multiple-byte Read from STATUS (0x00) register */

I2C_ReadAccelRegs(BOARD_ACCEL_I2C_BASEADDR, g_accel_addr_found, ACCEL_STATUS, readBuff, 7);

status0_value = readBuff[0];

x             = ((int16_t)(((readBuff[1] * 256U) | readBuff[2]))) / 4U;

y             = ((int16_t)(((readBuff[3] * 256U) | readBuff[4]))) / 4U;

z             = ((int16_t)(((readBuff[5] * 256U) | readBuff[6]))) / 4U;

PRINTF("status_reg = 0x%x , x = %5d , y = %5d , z = %5d \r\n", status0_value, x, y, z);

}

}

PRINTF("\r\nEnd of I2C example .\r\n");

while (1)

{

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值