请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TDC7200 工具/软件:Code Composer Studio
您好!
我尝试 通过 SPI 与 TDC7200和 MSP430 5529lp 通信。
写入操作成功、但当我想读取我在发出任何中断之前写入的同一寄存器时。
我在示波器上只看到读取地址+命令。
现在、我的问题是、可以不中断地读取数据吗? 我的错在哪里?
我是一个新手^^希望大家能帮助我解决这个问题
代码:
#include #include /** * main.c */ uint8_t read_val; unsigned long rcv; unsigned char 数据; void SPI_init (void); void SPI_write_config1 (uint8_t、uint8_t); void SPI_WRITE_CONFIG2 (uint8_t、uint8_t); void SPI_WRITE_CONFIG3 (uint8_t、uint8_t); uint8_t SPI_WRITE_READ_TIME (uint8_t); int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 spi_init(); SPI_WRITE_CONFIG1 (0x40、0x02); //使用命令写入寄存器地址00h SPI_WRITE_CONFIG2 (0x41、0x40); SPI_WRITE_CONFIG3 (0x42、0x00); Read_val = SPI_WRITE_READ_TIME (0x00);//示例:读取寄存器地址00h } void SPI_WRITE_CONFIG1 (uint8_t 地址、uint8_t 值) { P2OUT &=(~BIT2); //选择设备 while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =地址; //将地址发送到寄存器00h while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =值; //向寄存器00h 写入命令 while (UCB0STAT 和 UCBUSY); //等待 TX 完成 P2OUT |=(BIT2); //取消选择设备 } void spi_write_config2 (uint8_t 地址、uint8_t 值) { P2OUT &=(~BIT2); //选择设备 while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =地址; //将地址发送到寄存器01h while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =值; //向寄存器01h 写入命令 while (UCB0STAT 和 UCBUSY); //等待 TX 完成 P2OUT |=(BIT2); //取消选择设备 } void spi_write_config3 (uint8_t 地址、uint8_t 值) { P2OUT &=(~BIT2); //选择设备 while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =地址; //将地址发送到寄存器01h while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =值; //向寄存器01h 写入命令 while (UCB0STAT 和 UCBUSY); //等待 TX 完成 P2OUT |=(BIT2); //取消选择器件 } void SPI_init (void) { // SPI 引脚 Auswählen // P3SEL = BIT0 + BIT1 + BIT2; P2DIR |= BIT2; // PIN2.2设置为 Chipselect P2OUT |= BIT2; // PIN2.2将芯片选择引脚设置为高电平 //配置为 SPI 寄存器// UCB0CTL1 |= UCSWRST; UCB0CTL1 |= UCSSEL_2; UCB0CTL0 = UCMST+UCMSB+UCCKPL+UCSYNC;// SPI 配置(主模式;同步模式;时钟极性;MSBfirstMode) UCB0BR0 = 0x02; //预分频 器 UCB0BR1 = 0; UCA0MCTL = 0; //无调制 UCB0CTL1 &=~UCSWRST; //禁用软件复位 } uint8_t spi_write_read_time (uint8_t 地址) { P2OUT &=(~BIT2); //选择设备 while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF 准备就绪 UCB0TXBUF =地址; //向寄存器发送 adresse + read 命令 while (!(UCB0IFG&UCTXIFG)); //等待 TXBUF 准备就绪 UCB0TXBUF = 0; //虚拟写入以读取数据 while (!(UCB0IFG&UCRXIFG)); //等待 RXBUF 准备就绪 RCV = UCB0RXBUF; P2OUT |=(BIT2); //取消选择设备 return (rcv); }
