Other Parts Discussed in Thread: MSP430G2553, AFE4300
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AFE4300 主题中讨论的其他器件:MSP430G2553、
工具/软件:Code Composer Studio
嗨、大家好、
我需要您在使用 AFE4300和 MSP430G2553时的帮助。 我对 SPI 通信进行了编程、并希望通过写入寄存器并通过 SPI 读取来对其进行测试、但它不起作用。
在这里、我的代码:
int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时
器 if (CALBC1_1MHz = 0xFF || CALDCO_1MHz = 0xFF) //如果校准常数被擦除,则捕捉 CPU
{
while (1);
}
BCSCTL1 = CALBC1_1MHz; //如果校准常数被擦除。 请勿加载、陷阱 CPU!
DCOCTL = CALDCO_1MHz; //设置 DCO 步长+调制
AFE4300_RESET_LOW; //引脚2.6是复位引脚
P2DIR |= BIT2; // AFE4300复位引脚是输出引脚
AFE4300_RESET_HIGH;
AFE4300_SPI_init ();
AFE4300_init();
uint16_t DATA_rcv[1]={0}; //通过 SPI 检查寄存器
DATA_rcv[0]= AFE4300_readRegister (BCM_DAC_FREQ);
if (0x0020 =data_rcv[0]) blink ();
}
//########################################################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_SPI_init ()
//初始化 MSP430G2553的 SPI-UCB0
//最大 CLOCKFREQUENZ 4MHz!
void AFE4300_SPI_init (void)
{
AFE4300_CS_HIGH; // SlaveSelect PIN
P2DIR |= BIT0; // SlaveSelect PIN
P1SEL |= BIT6 | BIT7 | BIT5; //选择 MISO、MOSI、SCK
P1SEL2 |= BIT6 | BIT7 | BIT5; //重新配置引脚以将其用于 SPI
UCB0CTL1 = UCSWRST; //软件复位使能
UCB0CTL0 |= UCMST + UCMSB + UCCKPH + UCSYNC; //主模式、MSB 优先、时钟相位1、3引脚 SPI、同步模式(时钟极性0、SPIMODE1)
UCB0CTL1 |= UCSSEL_2; // SMCLK 作为带有 UCSSEL_2位的模块的源时钟
UCB0BR0 |= 0x02; //位时钟预分频器低字节
UCB0BR1 = 0; //位时钟预分频器高字节
UCB0CTL1 &=~UCSWRST; //初始化 USCI 状态机
}//############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_init()
//初始化 AFE4300
void AFE4300_init (void)
{
AFE4300_reset (); //重置 AFE4300
__delay_cycles (delay_1ms);
AFE4300_WRITE(BCM_DAC_FREQ,0x0020); //设置 BCM 激励电流源的频率(现在:32kHz)
AFE4300_WRITE (MISSC1_register、0x0000);
AFE4300_WRITE (MISSC2_register、0xFFFF);
AFE4300_WRITE (MISSC3_register、 0x0030);
AFE4300_WRITE (device_control_1、0x600E); //身体成分测量前端断电位和前端(PDB)
AFE4300_WRITE (DEVICE_CONTINL_2、0x1800)加电; // IQ_DEMOD_CLK 必须是 BCM_DAC_FREQ 的四倍(IQ_DEMOD_CLK = fCLK /(IQ_DEMOD_CLK_DIV_FAC)= BCM_DAC_FREQ×4)(现在:分频器为8)
AFE4300_WRITE (ADC_CONTINL_REGISTER_1、0x41C0); // ADC_DATA_RATE:128SPS 和 ADC_PD 以及 ADC_MEAS_MODE:差分(为 ADC_CONV_MODE 设置位15)
AFE4300_WRITE (ADC_CONTINL_REGISTER_2、0x0063); //身体成分测量前端的输出(OUTP_FILT/OUTM_FILT)
AFE4300_WRITE(体重秤_控制、0x0000); //未使用
AFE4300_WRITE (ISW_Matrix、0x0000); //所有开关打开(内部多路复用器)
AFE4300_WRITE (VSW_Matrix、0x0000); //所有开关打开(内部多路复用器)
//AFE4300_WRITE (IQ_MODE_ENABLE、0x800); //为 Iq 设置位11 (0:全波整流器模式)
AFE4300_WRITE (IQ_MODE_ENABLE、0x000); //将位11设置为 IQ (0:全波整流器模式)
__delay_cycles (delay_1ms);}//############################################################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_RESET ()
//重置 AFE4300 (重置以使所有内部寄存器达到其默认状态)
//重置器件是通过在电源稳定5ms 后在 RST 线路中应用超过20ns 的零脉冲来完成
的 void AFE4300_reset (void)
{
AFE4300_reset_low; //对复位引脚应用零
__delay_cycles (delay_10ms); //等待
AFE4300_RESET_HIGH; //对复位引脚施加电压
}//############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_WRITE()
//通过 SPI 写入 AFE4300的寄存器
//
@ addr :寄存
器的地址//@数据 :无符号8位数据
空 AFE4300_write (uint8_t addr、uint16_t data)
{
uint8_t firstByte =(uint16_t)(data >> 8);
uint8_t secondByte =(uint16_t) data;
AFE4300_CS_low; //从器件选择引脚低电平、启动 SPI 传输
AFE4300_SPI_transmit (addr); //发送地址
AFE4300_SPI_transmit (firstByte); //将数据发送到地址
AFE4300_SPI_transmit (第二字节);
AFE4300_CS_HIGH; //从器件选择引脚高电平、结束 SPI 传输
__delay_cycles (delay_1us); //等待
}//############################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_SPI_Transmit ()
//通过 SPI 发送和接收
//
@数据:将被传输
的无符号8位数据无符号字符 AFE4300_SPI_transmit (无符号字符数据)
{
UCB0TXBUF =数据; //发送数据
while (UCB0STAT & UCBUSY);
返回 UCB0RXBUF; //返回接收的数据-->接收数据缓冲
区}
//########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_readRegister ()
//读取 AFE4300
uint16_t AFE4300_readRegister (uint8_t address)
的寄存器{
address = address & 0x1F; //低5位指定实际地址
=地址| 0x20; //地址的第6位是读取(1)和写入(0)位
AFE4300_CS_LOW;
AFE4300_SPI_transmit (address);
uint8_t ReceiveFirst = AFE4300_SPI_transmit (0x00);
uint8_t spieSecond = AFE4300_SPI_transmit (0x00);
< AFE4300_spiReceive2_e2<AFE4300_spiReceive_e2<AFE4300_e2<_spiReceive2<= AFE4300_spiReceive2</e2< //将收到的两个字节合并到一
个无符号整型返回接收器中;
}//##############
####################################################################################################################################################################################################################################################################################################################################################################################################################
// AFE4300_Read_ResultRegister ()
//读取 AFE4300
uint16_t AFE4300_Read_ResultRegister ()
{
返回 AFE4300_readRegister (ADC_DATA_RESULT);
}
请帮帮我。
当我尝试比较发送和读取的数据时、不会发生任何情况(LED 应闪烁)
此致、
Simon