最近在用MSP430F5529的開發板和MAX30102脈搏血氧芯片連接,向MAX30102芯片寫內容時沒問題,但是除錯發現運行到讀
取得時候,在FIFO中讀兩個位元組后,芯片就不作業了,也沒有紅光了。我沒有使用MSP430F5529的硬體IIC,而是用的模擬IIC,

運行完這里的時候本來亮著的燈滅了,而且發現是讀兩個位元組后滅的。
附上部分代碼:
bool maxim_max30102_read_fifo(uint32_t *pun_red_led,uint32_t *pun_ir_led)
{
uint32_t un_temp;
uint8_t uch_temp;
*pun_ir_led=0;
*pun_red_led=0;
char ach_i2c_data[6];
maxim_max30102_read_reg(REG_INTR_STATUS_1, &uch_temp);
maxim_max30102_read_reg(REG_INTR_STATUS_2, &uch_temp);
start();
sendbyte(I2C_WRITE_ADDR);
if(check())
{
sendbyte(REG_FIFO_DATA);
}
stop();
init();
start();
sendbyte(I2C_READ_ADDR);
if(check())
{
readnbytes(ach_i2c_data,6);
}
un_temp=ach_i2c_data[0];
un_temp<<=16;
*pun_red_led+=un_temp;
un_temp=(unsigned char)ach_i2c_data[1];
un_temp<<=8;
*pun_red_led+=un_temp;
un_temp=(unsigned char) ach_i2c_data[2];
*pun_red_led+=un_temp;
un_temp=(unsigned char)ach_i2c_data[3];
un_temp<<=16;
*pun_ir_led+=un_temp;
un_temp=(unsigned char) ach_i2c_data[4];
un_temp<<=8;
*pun_ir_led+=un_temp;
un_temp=(unsigned char)ach_i2c_data[5];
*pun_ir_led+=un_temp;
stop();
*pun_red_led&=0x03FFFF;
*pun_ir_led&=0x03FFFF;
return true;
}
char readbyte()
{
char rdata=https://bbs.csdn.net/topics/0x00,i;
uchar flag;
for(i=0;i<8;i++)
{
SDA_H;
delayus(2);
SCL_H;
SDA_IN;
delayus(2);
flag=SDA_VAL;
rdata<<=1;
if(flag)
rdata|=0x01;
SDA_OUT;
SCL_L;
delayus(2);
}
return rdata;
}
void readnbytes(char *buf,uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
buf[i]=readbyte();
delayus(1);
if(i<(n-1))
response();
else
nresponse();
}
stop();
}
uj5u.com熱心網友回復:
樓主關于msp430f5529和max30102通信和資料讀取顯示的工程可以分享一下嗎轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/140425.html
標籤:單片機/工控
下一篇:keil5問題
