工具/软件:TI C/C++编译器
大家好,我想让 HMC5883L 正常工作,但我的代码卡在检查总线是否在 while (ROM_I2CMasterBusy (I2C1_base)第一次出现时占线;,我是不是在搞什么,请帮助
#define target_in_blizzard_RB1
#define PART_TM4C123GH6PM
#include //移位
#include
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/pin_map.h"
#include "inc/tm4c123gh6m.h"
#include "inc/hw_i2c.h"
void send_start (int a、int b、int c){
ROM_I2CMasterSlaveAddrSet (I2C1_base、0x1E、false);
ROM_I2CMasterDataPut (I2C1_base、a);
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
while (ROM_I2CMasterBusy (I2C1_base));
ROM_I2CMasterDataPut (I2C1_base、b);
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (ROM_I2CMasterBusy (I2C1_base));
ROM_I2CMasterDataPut (I2C1_base、c);
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (ROM_I2CMasterBusy (I2C1_base));
}
void send_start2 (int a、int b){
ROM_I2CMasterSlaveAddrSet (I2C1_base、0x1E、false);
ROM_I2CMasterDataPut (I2C1_base、a);
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
while (ROM_I2CMasterBusy (I2C1_base));
ROM_I2CMasterDataPut (I2C1_base、b);
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (ROM_I2CMasterBusy (I2C1_base));
}
void ReadByteArray (int *arr, int cnt);
int data[6]={1、2、3、4、5、6};
int main (空)
{
ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_6);
ROM_GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_7);
ROM_I2CMasterInitExpClk (I2C1_base、SysCtlClockGet ()、false);
//“连续测量模式(HMC5883L)的初始化过程第18页
//(8平均值、默认值15Hz、正常测量)
SEND_START (0x3C、0x00、0x70);
//(gain=5、或任何其他所需的增益)
SEND_START (0x3C、0x01、0xA0);
//(连续测量模式)
SEND_START (0x3C、0x02、0x00);
ROM_SysCtlDelay (5500000);//写入时间
while (1){
SEND_start2 (0x3D、0x03);// 1.
ReadByteArray (数据、1);
}
}
空 ReadByteArray (int *arr、int cnt){
int i=1;
ROM_I2CMasterSlaveAddrSet (I2C1_base、0x1E、false);
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_start);
while (ROM_I2CMasterBusy (I2C1_base));
ARR[0]= ROM_I2CMasterDataGet (I2C1_base);//test
对于(i=1 <cnt;i++)
{
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_CONT);
//
while (ROM_I2CMasterBusy (I2C1_base));
ARR[i]= ROM_I2CMasterDataGet (I2C1_base);//接收
}
ROM_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_finish);
//
while (ROM_I2CMasterBusy (I2C1_base));
}