工具/软件:Code Composer Studio
你(们)好。
首先是我的所有源代码:
#include #include #include /** * main.c */ uint32_t time[5]; void spi_init (void); int t、inter_stat; void spi_write_config1 (uint8_t、uint8_t); void spi_write_config2 (uint8_t、uint8_t); void SPI_WRITE_INTERRUPT_MASK (uint8_t、uint8_t); uint8_t SPI_READ_INTERRUPT_STATUS (uint8_t); // ist unnötig kann auch im singlebyte gelesen werden und in der main so konfiguriert uint8_t spi_read_singlebyte (uint8_t); uint32_t spi_read_longbyte (uint8_t); int main (void) { uint32_t Time1_6; uint8_t i; WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 spi_init(); SPI_WRITE_CONFIG1 (0x40、0x03); //使用命令写入寄存器地址00h SPI_WRITE_CONFIG2 (0x41、0x40); //inter_stat = SPI_READ_INTERRUPT_STATUS (0x02); //SPI_WRITE_INTERRUPT_MASK (0x43、0x00); Time1_6 = SPI_READ_longbyte (0x90);// lesen der time 1_6寄存器发送自动包含 返回0; } uint32_t spi_read_longbyte (uint8_t 地址) { uint32_t y = 0; uint32_t x = 0; P2OUT &=(~BIT2); //选择设备 while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =地址; //发送地址 für ... while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF = 0; //虚拟写入以读取数据 while (!(UCB0IFG&UCRXIFG)); //等待 RXBUF 准备就绪 Y = UCB0RXBUF; x |=(y << 16); while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF = 0; //虚拟写入以读取数据 while (!(UCB0IFG&UCRXIFG)); //等待 RXBUF 准备就绪 Y = UCB0RXBUF; x |=(y << 8); while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF = 0; //虚拟写入以读取数据 while (!(UCB0IFG&UCRXIFG)); //等待 RXBUF 准备就绪 Y = UCB0RXBUF; x |= y; while (UCB0STAT 和 UCBUSY); //等待 TX 完成 P2OUT |=(BIT2); //取消选择设备 返回 x; } 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); //取消选择器件 } uint8_t spi_read_interrupt_status (uint8_t 地址) { uint8_t rcv; //uint8_t clear = 0x1F; //清除中断标志?? P2OUT &=(~BIT2); //选择设备 while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF =地址; //将地址发送到寄存器02h while (!(UCB0IFG & UCTXIFG)); //等待 TXBUF UCB0TXBUF = 0; //虚拟写入以读取数据 while (!(UCB0IFG&UCRXIFG)); //等待 RXBUF 准备就绪 RCV = UCB0RXBUF; while (UCB0STAT 和 UCBUSY); //等待 TX 完成 P2OUT |=(BIT2); //取消选择设备 返回 rcv; } void spi_write_interrupt_mask (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) { //启用 PIN aktivieren für 寄存器 Zugriff// P6DIR |=BIT5; // TDC7200 P6OUT 的输出使能引脚|=BIT5; //输出高电平使能引脚 Aktiv // SPI 引脚 Auswählen // P3SEL = BIT0 + BIT1 + BIT2; P2DIR |= BIT2; // PIN2.2设置为 Chipselect P2OUT |= BIT2; // PIN2.2将芯片选择引脚设置为高电平 // Konfigdes SPI-Registers// UCB0CTL1 |= UCSWRST; UCB0CTL1 |= UCSSEL_2; UCB0CTL0 = UCMST+UCMSB+UCCKPH+UCSYNC;// SPI 配置(MasterMode;UCB0CTL0 = UCB0BR0;UCB0BR0;UCTL0 = UCCKPHY0;UCCKTH+UCB0BR0;UCB0BR0 = UCTL //预分频 器 UCB0BR1 = 0; UCA0MCTL = 0; //无调制 UCB0CTL1 &=~UCSWRST; //禁用软件复位 // UCB0IE |= UCRXIE; //启用 USCI_B0 RX 中断 }
我尝试使用 TDC7200_basic_spi_rw 中修改的示例函 数读取时间1寄存器:uint32_t TI_TDC720x_SPILongReadReg (uint8_t addr)。
其结果是、在执行每个位移位命令后、时钟保持低电平:
之后、我尝试 在每个 y 缓冲区接收到并且全部 while (!(UCB0IFG & UCTXIFG));循环后注释掉位移位运算。 现在、我得到了一个我想要的32 clk 周期、在这里有任何中断:
我的问题是:是否可以使用此函数读取我的时间寄存器和其他只读取寄存器、如果可能、我如何解决?
如何将此函数与自动递增位一起使用?
提前感谢
问候 Ben

