我现在驱动一块TFT LCD,需要使用到SPI+DMA,并且需要同时使用SPI+DMA发送8bit和16bit数据。
初始化配置的是SPI+DMA的8bit发送,现在需要发送16bit,采用的是把两个8bit拼接的方法,这也是网上很多人用的
一种方法,大概是这么实现的:
先定义一个数组
uint8_t sendBuff[2]; //数组中的元素是8bit,共两个元素,发送16bit数据的时候需要拼接这两个元素
void senddata16(uint16_t data16)
{
sendBuff[0] = data16 >>8; //---------------1
sendBuff[1] = data16; //--------------------2
//DMA依次搬运以上1,2数据就可以实现16bit发送
DMA_Cmd(Enable);
}
主要上面这两个1,2拼接方法不太理解,为什么这样拼接一下就可以实现发送16bit数据?
比如data16=0x4A33, 右移8位变成0x004A, 不还是16位吗?把0x004A赋给sendBuff[0], 因为这是8位数组,所以把16bit的0x004A赋值后,
高8位0x00被切断了?实际上只是把0x4A赋给了数组?
下面的sendBuff[1] = data16; 相当于sendBuff[1] = 0x4A33; 把16bit数据直接赋值给8位数组?所以sendBuff[1] 最终的值是什么?
这几个实在不太理解,希望得到专家的帮助,感谢
|