AFE4400的SOMI脚一直没有信号输出(低电平)
我自己做了个板子用MSP430F149控制AFE4400。CLKOUT有4M的时钟输出,但是不管我怎么通过MSP430F149的SPI写和读AFE4400的寄存器始终没有看到它的SOMI脚有信号输出,更不要说ACD_RDY信号了。
我先问第一问题:我把TX_CTRL_SUP,LED_DRV_SUP,RX_DIG_SUP,RX_ANA_SUP都接3V电源。这样可以吗?
SPI 是这样设置的:
void Init_Uart0()
{
ME1 |= USPIE0; // Enable USART0 SPI mode
UCTL0 |= CHAR + SYNC + MM + SWRST; // 8-bit SPI Master **SWRST**
UTCTL0 |= CKPH + SSEL0 + STC; // ACLK, 3-pin mode
UBR00 = 0x02; // UCLK/2
UBR10 = 0x00; // 0
UMCTL0 = 0x00; // no modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 &= ~(UTXIE0 + URXIE0); //发送,接收中断不允许
IFG1 &= ~UTXIFG0; // Clear inital flag on POR
}
ACLK =8M.
当然还有一个端口输出STE信号。写AFE4400寄存器是这样的:
void MCU_afe(char adr, char DAT_H, char DAT_M, char DAT_L)
{
afe_STE_L;
TXBUF0 = adr; while (!(IFG1&UTXIFG0));
TXBUF0 = DAT_H; while (!(IFG1&UTXIFG0));
TXBUF0 = DAT_M; while (!(IFG1&UTXIFG0));
TXBUF0 = DAT_L; while (!(IFG1&UTXIFG0));
Delay_us(2);
afe_STE_H;
}
读AFE4400寄存器是这样的:
void afe_MCU(char adr, char *pt)
{
afe_STE_L;
TXBUF0 = adr; while (!(IFG1&UTXIFG0));
TXBUF0 = 0; while (!(IFG1&URXIFG0));
*(pt+0) = RXBUF0;
TXBUF0 = 0; while (!(IFG1&URXIFG0));
*(pt+1) = RXBUF0;
TXBUF0 = 0; while (!(IFG1&URXIFG0));
*(pt+2) = RXBUF0;
Delay_us(2);
afe_STE_H;
}
在写寄存器时先把地址0的寄存器写0,在读寄存器前先把地址0的寄存器写1。请问我的程序有什么问题吗?为什么似乎AFE4400就没有工作似的?
谢谢
图怎么连接的呢
Sup的那几个脚接3v是没有问题的。
建议用示波器看一下spi的时序是否正确,另外,检查硬件连接及设计是否正确。
请问一下,您的程序是全部自己写的还是有示例程序?谢谢啦
图是这样连接的。
用示波器看了SPI的时序没有问题。从我的程序中也应该看出吧?写寄存器时我首先发一个字节的地址,再发3个字节的数据。接收时先发一个字节的地址,再连续发3个字节的0。同时在每发完一个字节后取SPI接收寄存器里的内容。从示波器看SOMI信号没有任何变化。真是没有办法了。
你好。 我的程序都是自己写的。请帮忙看看是否哪里考虑不周。谢谢
程序都是自己写的。谢谢帮忙看看有什么问题。
发现用MSP430F149的SPI硬件写AFE4400寄存器似乎根本就没有写进去。但是如果自己写个利用GPIO口模拟SPI口写AFE4400寄存器就对了。也不知道为什么?利用是示波器看这两种方法的CLK和SIMO信号基本也差不多。就是GPIO模拟SPI的CLK信号窄一些。难道CLK的下降沿也起什么作用吗?
Spi的时序只需要满足数据手册中的 table1的要求即可。
建议看TI源代码。
请问你接收后AFE4400信息怎么计算血氧和心率的