Other Parts Discussed in Thread: MSP430F5529
主题中讨论的其他器件:MSP430F5529
工具/软件:Code Composer Studio
您好!
目前、我的高级设计团队正在利用 AFE 4400在用户手腕上进行心率测量;AFE 基于用户指南中的参考资料构建在 PCB 上。 使用用户指南中建议的设置对其进行编程后、OUT 信号显示无可用心率信息;此外、当器件磨损时、使用示波器手动探测光电二极管表明存在预期信号的一般包络。
我想知道、为了从器件中获取正确的数据、我们是否需要执行任何特定的编程序列或寄存器操作、
我们使用 MSP430F5529来处理与 AFE 的通信。
下面是用于初始化 AFE 的代码:
void init_SPI (void) { P2OUT|= BIT7; P2DIR|= BIT7; P3SEL|= BIT0 + BIT1 + BIT2; // P3.0/1/2选项选择 UCB0CTL1 |= UCSWRST;//**将状态机复位** UCB0CTL0 |= UCMST + UCSYNC + UCCKPH + UCMSB;// 3引脚8位 SPI 主器件 //时钟极性高,MSB UCB0CTL1 |= UCSSEL_2;// SMCLK UCB0BR0 = 24;///2 UCB0BR1 = 0; // //// UCB0MCTL = 0; //无调制 UCB0CTL1 &=~UCSWRST; //**初始化 USCI 状态机**// UCB0IE |= UCRXIE /*+ UCTXIE*/; //启用 USCI_B0 RX 中断 }
int spi_writeRegister (unsigned char Reg、unsigned long int DAT) { unsigned char send3 =(DAT&0x0000)>16; unsigned char send2 =(DAT&0x00FF00)>8; unsigned char send1 =(DAT&0xFF); P2OUT &=~(BIT7); while (USCI_B_SPI_isBusy (SPI_Base)=USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = Reg; while (USCI_B_SPI_isBusy (SPI_BIT_B_BUSCI_BUSCI_BUSY)= USCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUS while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = send3; while (USCI_B_SPI_isBusy (SPI_Base)= USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = send2; while (USCI_B_SPI_isBusy (SPI_Base)== USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = send1; while (USCI_B_SPI_isBusy (SPI_Base)=USCI_B_SPI_BUSY);while (USCI_B_BUSY) P2OUT |=(BIT7); 返回0; }
void SPI_read (int Reg、Serial_Type *输出) { unsigned char first; unsigned char Second; unsigned char third; out->Status =-1; P2OUT &=~(BIT7); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)= USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)= USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (USCI_B&UCTXIFG)= USCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSY (SPI_BUSY);USCI_BUSCI_BUSCI_BUSCI_B while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF =0x01; while (USCI_B_SPI_isBusy (SPI_Base)== USCI_B_SPI_BUSY); while (USCI_B_SPI_isBusy (SPI_Base)=USCI_B_SPI_BUSY) ;while (USCI_B_SPI_C0IFG)(BUSY)(UCTX_USCI_USCI)(BUSY)))(while (+ CBIFG)(while) UCB0TXBUF =寄存器; while (USCI_B_SPI_isBusy (SPI_Base)=USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF =0x00; while (USCI_B_SPI_isBusy (SPI_BIT_B_BUSCI_BUSCI_BUSY)= USCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSCI_BUS while (((UCB0IFG&UCRXIFG)==0); first = UCB0RXBUF; while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)=USCI_B_SPI_BUSY)= USCI_BUSY;BUSY while (((UCB0IFG&UCRXIFG)=0); Second = UCB0RXBUF; while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)= USCI_B_SPI_BUSY)= USCI_BUSY;while (USCI_B_B_SPI_BUSY) while (((UCB0IFG&UCRXIFG)=0); third = UCB0RXBUF; while (USCI_B_SPI_isBusy (SPI_Base)== USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)== USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)=USCI_B_SIUCTXIFG); while (USCI_B_B_CBIFG)(BUSY)(BUSY))(BUSY)(BUSY))(UCB0_UCTX_UCTX_UCT UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (SPI_Base)= USCI_B_SPI_BUSY); while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF = 0x00; while (USCI_B_SPI_isBusy (USCI_B&UCTXIFG)= USCI_BUSCI_BUSCI_BUSCI_BUSCI_BUSY (SPI_BUSY);USCI_BUSCI_BUSCI_BUSCI_B P2OUT |=(BIT7); out->received[out->i]=((first*65536)+(Second *256)+(third)); // if (out->received[out->i]) OUT->Status=0; }
void init_AFE (void) { SPI_writeRegister (0x00、8); _delay_cycles (100); SPI_writeRegister (0x01、6050); SPI_writeRegister (0x02、998); SPI_writeRegister (0x03、6000); SPI_writeRegister (0x04、7999); SPI_writeRegister (0x05、50); SPI_writeRegister (0x06、1998); SPI_writeRegister (0x07、2050); SPI_writeRegister (0x08、3998); SPI_writeRegister (0x09、2000); SPI_writeRegister (0x0A、3999); SPI_writeRegister (0x0B、4050); SPI_writeRegister (0x0C、5998); SPI_writeRegister (0x0D、4); SPI_writeRegister (0x0E、1999); SPI_writeRegister (0x0F、2004); SPI_writeRegister (0x10、3999); SPI_writeRegister (0x11、4004); SPI_writeRegister (0x12、5999); SPI_writeRegister (0x13、6004); SPI_writeRegister (0x14、7999); SPI_writeRegister (0x15、0); SPI_writeRegister (0x16、3); SPI_writeRegister (0x17、2000); SPI_writeRegister (0x18、2003); SPI_writeRegister (0x19、4000); SPI_writeRegister (0x1A、4003); SPI_writeRegister (0x1B、6000); SPI_writeRegister (0x1C、6003); SPI_writeRegister (0x1D、7999); _delay_cycles (100); SPI_writeRegister (0x22、0x01FFFF); SPI_writeRegister (0x1E、0x000702); }









