工具/软件:TI-RTOS
您好!
我尝试使用周期性时钟来进行 I2C 采集。 首先调用 GSensorInit()来启动时钟,然后调用 GSensorStart()来启动周期性回调。 源代码如下:
空 Acc_readAcc (Int16 *pBuff)
{
uint8 txBuf[1];
int32 x、y、z;//、s;
int32 x1、y1、z1;
txBuf[0]= MPU6050_RA_ACCEL_XOUT_H;
i2cTrans.writeBuf = txBuf;
i2cTrans.writeCount = 1;
i2cTrans.readBuf = pBuff;
i2cTrans.ReadCount = 6;
i2cTrans.slaveAddress = MPU6050_ADDRESS_AD0_LOW;
I2C_transfer (handle、&i2cTrans);
}
//
//通过 I2C 进行 G 传感器控制
//
空 GSensorClock (UArg-参数)
{
int y;
int16数据[8];
Util_startClock (周期时钟);
事件|= arg;
Semaphore_post (SEM);
ACC_readAcc (data);
y =(DATA[6]/10)+ 10;//
牵引波形(y、270);
}
空 GSensorInit()
{
字符 str[20];
uint8 res=I2CInit();
sprintf (str、"I2C init=0x%x"、res);
lcd_write_string (str、lcd_page7);
Util_constructClock (&periodicClock、GSensorClock、SBP_PERIOD_EVT_PERIOD、0、false、 SBP_Periode_EVT);
}
void GSensorStart()
{
Util_startClock (周期时钟);
}
问题是、每次代码崩溃时、I2C_TRANSF()被称为 witchin Acc_readAcc ()。
我还尝试了以下代码、该代码工作正常:
void Dimetek_Loop ()
{
字符 str[25];
int16 y;
int16数据[8];
Board_PWM_STOP();
for (;;){
ACC_readAcc (data);
sprintf (str、"z=%6d"、data[2]);
lcd_write_string (str、lcd_Page2);
Task_sleep (10 * 1000 / Clock_tickPeriod);
}
}
我弄错了吗? 还是应该添加更多代码? 欢迎提出任何意见。 提前感谢。
此致、Young