|
最近需要写个c6748用spi传输16位的数据,根据创龙提供的SPI_DAC_AD5724V2例程里的SpiTransfer函数修改了自己的函数。因为原函数是传输8位,我想改成一个带变量的可以传输16位数据的函数,但是不成功,不知道错在哪里,初学者请赐教!例程函数如下省略其他函数
unsigned int tx_len;
unsigned int rx_len;
unsigned char tx_data[256];
unsigned char rx_data[256];
unsigned char *p_tx;
unsigned char *p_rx;
int SpiTransfer(void)
{
p_tx = &tx_data[0];
p_rx = &rx_data[0];
while(tx_len)
{
tx_len--;
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), (1<<2));
SPITransmitData1(SOC_SPI_1_REGS, *(p_tx+tx_len));
while( (HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & 0x80000000 ) );
rx_data[2-tx_len] = SPIDataReceive(SOC_SPI_1_REGS);
}
SPIDat1Config(SOC_SPI_1_REGS, (SPI_DATA_FORMAT0), (1<<2));
return ((rx_data[0]<<16) | (rx_data[1]<<8) | (rx_data[2]));
}
自己改之后的函数如下:
//SPIx 读写一个两个字节
//TxData:要写入的双字节
//返回值:读取到的双字节
signed short SPIx_ReadWriteBytes(signed short TxData)
{
signed short RxData;
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), (1<<7));
SPITransmitData1(SOC_SPI_1_REGS, TxData);
while( (HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & 0x80000000 ) );
RxData = SPIDataReceive(SOC_SPI_1_REGS);
SPIDat1Config(SOC_SPI_1_REGS, (SPI_DATA_FORMAT0), (1<<7));
return RxData;
}
这个函数有什么问题么?传输不成功,谢谢指出错误
|
|