您好!
我正在尝试通过 I2C 协议与 MAX30101传感器通信。 这里、主设备是 MSP430F5438A、我的 IDE 是 Code Composer Studio。 我正在尝试从传感器获取我必须读取的样本数量。 我正在从头开始构建代码。 出于我的目的、我必须从传感器读取 WR_PTR 和 RD_PTR 数据。 我应该得到一个介于1到32之间的值、但我始终得到这两个值的0。 任何人都可以回答我的 I2C 代码部分是否正确? 如果不是、如何解决?
以下是传感器的数据表(如有必要):
datasheets.maximintegrated.com/.../MAX30101.pdf
我的代码:
void Clock_setup(){
P11DIR |= BIT2;//检查 smclk、默认为1MHz
P11SEL |= BIT2;//检查 smclk,默认为1MHz
P11DIR |= BIT0;//检查 aclk、默认值为32.8KHz
P11SEL |= BIT0;//检查 aclk,默认值为32.8KHz
}
void I2C_setup(){
P3SEL |= BIT7;// P3.1 (UCB0_SDA)、P3.2 (UCB0_SCL)// 3.7 UCB1_SDA、5.4 UCB1_SCL
P5SEL |= BIT4;
UCB1CTL1 |= UCSWRST;//复位使能
UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;//主器件+ I2C 模式+同步
UCB1CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK +仍然复位
UCB1BR0 = 10;//默认 SMCLK 1M/10 = 100KHz
UCB1BR1 = 0;//
UCB1I2CSA = MAX30101_I2C_ADDRESS;// MAX30101 7位地址0x57
UCB1CTL1 &=~UCSWRST;//复位清零
// UCB1IE |= UCTXIE + UCRXIE;//TX 和 RX 中断被启用
}
void MAX30101_setup(){
sendByte (0x08、0x40);//采样平均= 4.
sendByte (0x09、0x07);//模式=多
sendByte (0x0A、0x0F);//ADC 范围= 2048、采样率= 400、PW 控制= 411
sendByte (0x0C、0x1F);//红色脉冲振幅
sendByte (0x0D、0x1F);// IR 脉冲振幅
sendByte (0x0E、0x1F);//绿色脉冲振幅
sendByte (0x10、0x1F);//接近脉冲振幅
sendByte (0x11、0x77);//时隙01和02
sendByte (0x12、0x07);//插槽03
FIFO_CLEAR();
}
void FIFO_CLEAR (){
sendByte (0x04、0x00);// FIFO WR_PTR 清除
sendByte (0x05、0x00);// FIFO 过流计数器清零
sendByte (0x06、0x00);// FIFO RD_PTR 清除
}
