mirror of
https://gitee.com/seekfree/TC264_Library.git
synced 2026-06-04 03:32:56 +00:00
V1.2.10
增加IMU963RA九轴模块驱动文件
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,3 +1,5 @@
|
||||
V1.2.10
|
||||
<20><><EFBFBD><EFBFBD>IMU963RA<52><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
V1.2.9
|
||||
ɾ<><C9BE>SEEKFREE_IPS200_PARALLEL8<4C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEEKFREE_IPS200<30><30><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><EFBFBD>spi<70>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>cs<63><73><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7>spi<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "SEEKFREE_MT9V03X.h"
|
||||
#include "SEEKFREE_ICM20602.h"
|
||||
#include "SEEKFREE_MPU6050.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
#include "SEEKFREE_MMA8451.h"
|
||||
#include "SEEKFREE_L3G4200D.h"
|
||||
#include "SEEKFREE_WIRELESS.h"
|
||||
|
||||
@@ -0,0 +1,364 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_gpio.h"
|
||||
#include "zf_spi.h"
|
||||
#include "SEEKFREE_IIC.h"
|
||||
#include "SEEKFREE_IMU963RA.h"
|
||||
|
||||
int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
#define imu963ra_write_acc_gyro_register(reg,data) simiic_write_reg(IMU963RA_DEV_ADDR, reg, data)
|
||||
#define imu963ra_read_acc_gyro_register(reg) simiic_read_reg (IMU963RA_DEV_ADDR, reg, SIMIIC)
|
||||
#define imu963ra_read_acc_gyro_registers(reg,data,len) simiic_read_regs(IMU963RA_DEV_ADDR, reg, data, len, SIMIIC)
|
||||
#else
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_write_acc_gyro_register(uint8 reg, uint8 data)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_W;
|
||||
dat[1] = data;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_read_acc_gyro_register(uint8 reg)
|
||||
{
|
||||
uint8 dat[2];
|
||||
|
||||
dat[0] = reg | IMU963RA_SPI_R;
|
||||
dat[1] = 0;
|
||||
|
||||
spi_mosi(IMU963RA_SPI,IMU963RA_CS_PIN,dat,dat,2,1);
|
||||
|
||||
return dat[1];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// @param data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void imu963ra_read_acc_gyro_registers(uint8 *data, uint32 len)
|
||||
{
|
||||
spi_mosi(IMU963RA_SPI, IMU963RA_CS_PIN, data, data, len, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_write_mag_register(uint8 addr, uint8 reg, uint8 data)
|
||||
{
|
||||
addr = addr << 1;
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_read_mag_register(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
//<2F>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
|
||||
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
|
||||
{
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA<52><41>ΪIIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_connect_mag(uint8 addr, uint8 reg)
|
||||
{
|
||||
addr = addr << 1;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>8λ<38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_acc_gyro_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 imu963ra_mag_self_check (void)
|
||||
{
|
||||
uint8 dat = 0;
|
||||
// uint16 timeout_count = 0;
|
||||
|
||||
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
||||
{
|
||||
// if(timeout_count++ > IMU963RA_TIMEOUT_COUNT)
|
||||
// return 1;
|
||||
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_acc (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, &buf.dat[0], 7);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_A | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_acc_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_acc_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_acc_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡIMU963RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_gyro (void)
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_OUTX_L_G | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_gyro_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_gyro_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_gyro_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage: ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void imu963ra_get_mag (void)
|
||||
{
|
||||
uint8 temp_status;
|
||||
struct
|
||||
{
|
||||
uint8 reg;
|
||||
uint8 dat[6];
|
||||
}buf;
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
|
||||
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
|
||||
if(0x01 & temp_status)
|
||||
{
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, &buf.dat[0], 6);
|
||||
#else
|
||||
buf.reg = IMU963RA_SENSOR_HUB_1 | IMU963RA_SPI_R;
|
||||
imu963ra_read_acc_gyro_registers(&buf.reg, 7);
|
||||
#endif
|
||||
|
||||
imu963ra_mag_x = (int16)(((uint16)buf.dat[1]<<8 | buf.dat[0]));
|
||||
imu963ra_mag_y = (int16)(((uint16)buf.dat[3]<<8 | buf.dat[2]));
|
||||
imu963ra_mag_z = (int16)(((uint16)buf.dat[5]<<8 | buf.dat[4]));
|
||||
}
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><>ʼ<EFBFBD><CABC> IMU963RA
|
||||
// @param void
|
||||
// @return uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 imu963ra_init (void)
|
||||
{
|
||||
|
||||
systick_delay_ms(STM0, 10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC
|
||||
simiic_delay_set(IMU963RA_SOFT_IIC_DELAY);
|
||||
simiic_init();
|
||||
#else
|
||||
spi_init(IMU963RA_SPI, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, IMU963RA_CS_PIN, 0, 10*1000*1000);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
||||
|
||||
#endif
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x4C); // <20><><EFBFBD>ü<EFBFBD><C3BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>̡<EFBFBD>8G<38>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>104hz <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>Ϣ<EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//IMU963RA_CTRL1_XL<58>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x40 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x48 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x4C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x44 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x6C); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD>̡<EFBFBD>2000dps<70>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>416hz
|
||||
//ICM20602_GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x62 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x60 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <09><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x68 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x6C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x61 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 2);
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
|
||||
systick_delay_ms(STM0, 2);
|
||||
|
||||
if(imu963ra_mag_self_check())
|
||||
{
|
||||
//zf_log(0, "IMU963RA mag self check error.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100hz <20><><EFBFBD><EFBFBD>ģʽ
|
||||
//IMU963RA_MAG_ADDR<44>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
|
||||
|
||||
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
|
||||
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
|
||||
|
||||
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
systick_delay_ms(STM0, 20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2022,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file zf_device_imu963ra
|
||||
* @company <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <20><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <20>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software ADS v1.5.2
|
||||
* @Target core TC264
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2022-05-04
|
||||
* @note <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
|
||||
* SCL/SPC <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
* SDA/DSI <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
||||
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#ifndef _SEEKFREE_IMU963RA_h
|
||||
#define _SEEKFREE_IMU963RA_h
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
|
||||
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SOFT_IIC_DELAY (20) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
//#define IMU963RA_SCL_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SCL <20>궨<EFBFBD><EAB6A8>
|
||||
//#define IMU963RA_SDA_PIN <20>鿴 SEEKFREE_IIC.h <20><> SEEKFREE_SDA <20>궨<EFBFBD><EAB6A8>
|
||||
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
|
||||
#else
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#define IMU963RA_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
|
||||
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_CS_PIN (SPI0_CS2_P20_13 ) // Ӳ<><D3B2> CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
|
||||
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
|
||||
#endif
|
||||
|
||||
//#define IMU963RA_TIMEOUT_COUNT 0x00FF // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
|
||||
#define IMU963RA_DEV_ADDR 0x6B // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SPI_W 0x00
|
||||
#define IMU963RA_SPI_R 0x80
|
||||
|
||||
#define IMU963RA_FUNC_CFG_ACCESS 0x01
|
||||
#define IMU963RA_PIN_CTRL 0x02
|
||||
#define IMU963RA_S4S_TPH_L 0x04
|
||||
#define IMU963RA_S4S_TPH_H 0x05
|
||||
#define IMU963RA_S4S_RR 0x06
|
||||
#define IMU963RA_FIFO_CTRL1 0x07
|
||||
#define IMU963RA_FIFO_CTRL2 0x08
|
||||
#define IMU963RA_FIFO_CTRL3 0x09
|
||||
#define IMU963RA_FIFO_CTRL4 0x0A
|
||||
#define IMU963RA_COUNTER_BDR_REG1 0x0B
|
||||
#define IMU963RA_COUNTER_BDR_REG2 0x0C
|
||||
#define IMU963RA_INT1_CTRL 0x0D
|
||||
#define IMU963RA_INT2_CTRL 0x0E
|
||||
#define IMU963RA_WHO_AM_I 0x0F
|
||||
#define IMU963RA_CTRL1_XL 0x10
|
||||
#define IMU963RA_CTRL2_G 0x11
|
||||
#define IMU963RA_CTRL3_C 0x12
|
||||
#define IMU963RA_CTRL4_C 0x13
|
||||
#define IMU963RA_CTRL5_C 0x14
|
||||
#define IMU963RA_CTRL6_C 0x15
|
||||
#define IMU963RA_CTRL7_G 0x16
|
||||
#define IMU963RA_CTRL8_XL 0x17
|
||||
#define IMU963RA_CTRL9_XL 0x18
|
||||
#define IMU963RA_CTRL10_C 0x19
|
||||
#define IMU963RA_ALL_INT_SRC 0x1A
|
||||
#define IMU963RA_WAKE_UP_SRC 0x1B
|
||||
#define IMU963RA_TAP_SRC 0x1C
|
||||
#define IMU963RA_D6D_SRC 0x1D
|
||||
#define IMU963RA_STATUS_REG 0x1E
|
||||
#define IMU963RA_OUT_TEMP_L 0x20
|
||||
#define IMU963RA_OUT_TEMP_H 0x21
|
||||
#define IMU963RA_OUTX_L_G 0x22
|
||||
#define IMU963RA_OUTX_H_G 0x23
|
||||
#define IMU963RA_OUTY_L_G 0x24
|
||||
#define IMU963RA_OUTY_H_G 0x25
|
||||
#define IMU963RA_OUTZ_L_G 0x26
|
||||
#define IMU963RA_OUTZ_H_G 0x27
|
||||
#define IMU963RA_OUTX_L_A 0x28
|
||||
#define IMU963RA_OUTX_H_A 0x29
|
||||
#define IMU963RA_OUTY_L_A 0x2A
|
||||
#define IMU963RA_OUTY_H_A 0x2B
|
||||
#define IMU963RA_OUTZ_L_A 0x2C
|
||||
#define IMU963RA_OUTZ_H_A 0x2D
|
||||
#define IMU963RA_EMB_FUNC_STATUS_MAINPAGE 0x35
|
||||
#define IMU963RA_FSM_STATUS_A_MAINPAGE 0x36
|
||||
#define IMU963RA_FSM_STATUS_B_MAINPAGE 0x37
|
||||
#define IMU963RA_STATUS_MASTER_MAINPAGE 0x39
|
||||
#define IMU963RA_FIFO_STATUS1 0x3A
|
||||
#define IMU963RA_FIFO_STATUS2 0x3B
|
||||
#define IMU963RA_TIMESTAMP0 0x40
|
||||
#define IMU963RA_TIMESTAMP1 0x41
|
||||
#define IMU963RA_TIMESTAMP2 0x42
|
||||
#define IMU963RA_TIMESTAMP3 0x43
|
||||
#define IMU963RA_TAP_CFG0 0x56
|
||||
#define IMU963RA_TAP_CFG1 0x57
|
||||
#define IMU963RA_TAP_CFG2 0x58
|
||||
#define IMU963RA_TAP_THS_6D 0x59
|
||||
#define IMU963RA_INT_DUR2 0x5A
|
||||
#define IMU963RA_WAKE_UP_THS 0x5B
|
||||
#define IMU963RA_WAKE_UP_DUR 0x5C
|
||||
#define IMU963RA_FREE_FALL 0x5D
|
||||
#define IMU963RA_MD1_CFG 0x5E
|
||||
#define IMU963RA_MD2_CFG 0x5F
|
||||
#define IMU963RA_S4S_ST_CMD_CODE 0x60
|
||||
#define IMU963RA_S4S_DT_REG 0x61
|
||||
#define IMU963RA_I3C_BUS_AVB 0x62
|
||||
#define IMU963RA_INTERNAL_FREQ_FINE 0x63
|
||||
#define IMU963RA_INT_OIS 0x6F
|
||||
#define IMU963RA_CTRL1_OIS 0x70
|
||||
#define IMU963RA_CTRL2_OIS 0x71
|
||||
#define IMU963RA_CTRL3_OIS 0x72
|
||||
#define IMU963RA_X_OFS_USR 0x73
|
||||
#define IMU963RA_Y_OFS_USR 0x74
|
||||
#define IMU963RA_Z_OFS_USR 0x75
|
||||
#define IMU963RA_FIFO_DATA_OUT_TAG 0x78
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_L 0x79
|
||||
#define IMU963RA_FIFO_DATA_OUT_X_H 0x7A
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_L 0x7B
|
||||
#define IMU963RA_FIFO_DATA_OUT_Y_H 0x7C
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_L 0x7D
|
||||
#define IMU963RA_FIFO_DATA_OUT_Z_H 0x7E
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
#define IMU963RA_SENSOR_HUB_1 0x02
|
||||
#define IMU963RA_SENSOR_HUB_2 0x03
|
||||
#define IMU963RA_SENSOR_HUB_3 0x04
|
||||
#define IMU963RA_SENSOR_HUB_4 0x05
|
||||
#define IMU963RA_SENSOR_HUB_5 0x06
|
||||
#define IMU963RA_SENSOR_HUB_6 0x07
|
||||
#define IMU963RA_SENSOR_HUB_7 0x08
|
||||
#define IMU963RA_SENSOR_HUB_8 0x09
|
||||
#define IMU963RA_SENSOR_HUB_9 0x0A
|
||||
#define IMU963RA_SENSOR_HUB_10 0x0B
|
||||
#define IMU963RA_SENSOR_HUB_11 0x0C
|
||||
#define IMU963RA_SENSOR_HUB_12 0x0D
|
||||
#define IMU963RA_SENSOR_HUB_13 0x0E
|
||||
#define IMU963RA_SENSOR_HUB_14 0x0F
|
||||
#define IMU963RA_SENSOR_HUB_15 0x10
|
||||
#define IMU963RA_SENSOR_HUB_16 0x11
|
||||
#define IMU963RA_SENSOR_HUB_17 0x12
|
||||
#define IMU963RA_SENSOR_HUB_18 0x13
|
||||
#define IMU963RA_MASTER_CONFIG 0x14
|
||||
#define IMU963RA_SLV0_ADD 0x15
|
||||
#define IMU963RA_SLV0_SUBADD 0x16
|
||||
#define IMU963RA_SLV0_CONFIG 0x17
|
||||
#define IMU963RA_SLV1_ADD 0x18
|
||||
#define IMU963RA_SLV1_SUBADD 0x19
|
||||
#define IMU963RA_SLV1_CONFIG 0x1A
|
||||
#define IMU963RA_SLV2_ADD 0x1B
|
||||
#define IMU963RA_SLV2_SUBADD 0x1C
|
||||
#define IMU963RA_SLV2_CONFIG 0x1D
|
||||
#define IMU963RA_SLV3_ADD 0x1E
|
||||
#define IMU963RA_SLV3_SUBADD 0x1F
|
||||
#define IMU963RA_SLV3_CONFIG 0x20
|
||||
#define IMU963RA_DATAWRITE_SLV0 0x21
|
||||
#define IMU963RA_STATUS_MASTER 0x22
|
||||
|
||||
#define IMU963RA_MAG_ADDR 0x0D //7λIIC<49><43>ַ
|
||||
#define IMU963RA_MAG_OUTX_L 0x00
|
||||
#define IMU963RA_MAG_CONTROL1 0x09
|
||||
#define IMU963RA_MAG_CONTROL2 0x0A
|
||||
#define IMU963RA_MAG_FBR 0x0B
|
||||
#define IMU963RA_MAG_CHIP_ID 0x0D
|
||||
|
||||
|
||||
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z;
|
||||
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z;
|
||||
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z;
|
||||
|
||||
void imu963ra_get_acc (void);
|
||||
void imu963ra_get_gyro (void);
|
||||
void imu963ra_get_mag (void);
|
||||
|
||||
uint8 imu963ra_init (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user