工具/软件:
您好:
我正在尝试通过 SPI 通信读取 adxl345的器件 ID。
它应该是11100101、但结果是11110010。
我认为它是向右移动的。
这是我的代码。
void readFromSPI (Uint16 _reg_address、int num、Uint16 _buff[])
{
uint16 _address = 0x0080 |_reg_address;
//如果读取多字节:设置位6
if (num > 1){
_ADDRESS =_ADDRESS | 0x0040;
}
//将 Rx FIFO 指针重置为零
SPI_resetRxFIFO (SPIB_BASE);
SPI_resetTxFIFO (SPIB_BASE);
GpioDataRegs.GPACLEar.bit.GPIO27 = 1;
int i=0;
_buff[i]= SPI_transmitreceiveByteOnceMine (SPIB_BASE、8U、_address);
printf ("%d:%d\n"、i、_buff[i]);
GpioDataRegs.GPASSET.bit.GPIO27 = 1;
}
uint16_t
SPI_transmitreceiveByteOnceMine (uint32_t base、uint16_t charLength、uint16_t 数据)
{
uint16_t rxData =0;
uint16_t rxDataEmu =0;
assert (((HWREGH (BASE + SPI_O_CCR)& SPI_CCR_SPICHAR_M)+ 1)== charLength);
SPI_disableFIFO (base);//禁用 FIFO 寄存器
SPI_enableFIFO (BASE);//启用 FIFO 寄存器
//写入 SPI 发送缓冲区
//我想读的内容
SPI_writeDataBlockingFIFO (base、(data<<(16U - charLength))&0xFF00);
while (SPI_getRxFIFOStatus (base)< SPI_FIFO_RX1)
{
}
rxData = SPI_readDataBlockingFIFO (base);
//写入虚拟数据
SPI_writeDataBlockingFIFO (base、0x0000);
while (SPI_getRxFIFOStatus (base)< SPI_FIFO_RX1)
{
}
//读取数据
rxData = SPI_readDataBlockingFIFO (base);
printf ("Receive:%d\n"、rxData);
return (rxData);
}
这是 SPI 设置。
void mySPIB_init (void)
{
//在配置之前、必须将 SPI 置于复位状态
//
SPI_disableModule (SPIB_BASE);
SPI_setConfig (SPIB_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL1PHA1、
SPI_MODE_CONTROLLER、mySPI0_bitrate、mySPI0_DATAWIDTH);
SPI_setPTESignalPolarity (SPIB_BASE、SPI_PTE_ACTIVE_LOW);
SPI_disableLoopback (SPIB_BASE);
spi_setEmulationMode (SPIB_BASE、spi_emulation_stop_after_transmit);
//
// FIFO 和中断配置
//
SPI_enableFIFO (SPIB_BASE);
SPI_setFIFO InterruptLevel (SPIB_BASE、SPI_FIFO_TXEMPTY、SPI_FIFO_RX1);
SPI_clearInterruptStatus (SPIB_BASE、SPI_INT_RXFF);
SPI_enableInterrupt (SPIB_BASE、SPI_INT_RXFF);
//
//配置完成。 启用模块。
//
SPI_enableModule (SPIB_BASE);
}
我不知道问题是什么。
请帮帮我。
此致、
WooJoung Lim