我自己做了个板子用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就没有工作似的?
谢谢