大家好,
我最近开始使用 dwm1000模块,我对电路板上的 SPI 接口的工作原理有疑问,这是一个 MCU (在我的例子中是 Tiva c)和 dwm1000模块之间事务的示例
,我正在尝试读取包含0xDECA0130的寄存器地址0x00,但是由于 ARM 微控制器使用小端字节序,我应该在 总线上获得0x30 0x01 0xCA 0xDE 字节顺序。
另请注意,在整个事务中 SPICS 行应该为低电平,我正在使用 TIvaware API,下面是我初始化和发送/读取数据的方法
uint8_t DataToSend; uint32_t rxDataOne = 0x00; uint32_t rxDatatwo = 0x00; uint32_t rxDatathree = 0x00; //必须启用 SSI0外设才能使用。 SysCtlPeripheralEnable (sysctl_Periph_SSI2); //首先禁用模块以配置 SPI SSIDisable (SSI2_base); //启用端口 b SysCtlPeripheralEnable ( sysctl_Periph_GPIOB)的时钟; //将 IO 时钟设置为 SSI 时钟源 // SSIClockSet (SSIP2_SSIP2); 配置 GPIO_PINSSIP4 (SSIP_SSIPBLE_GPIO4);//配置 GPIO4 (SSIP_SSIP_SSIP4) GPIOPinConfigure (GPIO_PB7_SSI2TX); // while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI2)); GPIOPINTypeSSI (GPIO_PORTB_BASE、GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4); SSIPBET_SysCltl (SysCltl) SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、2000000、8); SSIEnable (SSI2_base); //配置数据发送到此处 DataToSend=0x00; //发送数据 SSIDataPut (SSI2_base、DataToSend); while (SSIBusy (SSI2_base); SSIDatashu (SSI2_base);SSIData&rxDataNet;SSIDataDataNet (SSatwo_base);SSI2&natwo_r&nat_dataNet (SSwo_base)
现在我怀疑这是因为我使用数据获取和数据输入来读取和写入总线,而 TIvAware API 正在对 SSIDataPut 和 SSIDataGet 函数之间的 SPICS 进行解速率。 在整个事务中、它应该被设置为低电平、然而、由于我使用2个函数来读取和写入、它在发送数据的第一个字节后将其重新变为高电平、这将解释为什么我只获得1字节数据和 不再来自模块。
如果上述内容正确,我应该修改代码,通过软件手动控制 SSI CS 引脚。是否正确?
BR、
埃萨姆。