|  | 
 
| 最近需要写个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;
 
 }
 
 这个函数有什么问题么?传输不成功,谢谢指出错误
 
 | 
 |