|
我現(xiàn)在驅(qū)動一塊TFT LCD,需要使用到SPI+DMA,并且需要同時使用SPI+DMA發(fā)送8bit和16bit數(shù)據(jù)。
初始化配置的是SPI+DMA的8bit發(fā)送,現(xiàn)在需要發(fā)送16bit,采用的是把兩個8bit拼接的方法,這也是網(wǎng)上很多人用的
一種方法,大概是這么實現(xiàn)的:
先定義一個數(shù)組
uint8_t sendBuff[2]; //數(shù)組中的元素是8bit,共兩個元素,發(fā)送16bit數(shù)據(jù)的時候需要拼接這兩個元素
void senddata16(uint16_t data16)
{
sendBuff[0] = data16 >>8; //---------------1
sendBuff[1] = data16; //--------------------2
//DMA依次搬運以上1,2數(shù)據(jù)就可以實現(xiàn)16bit發(fā)送
DMA_Cmd(Enable);
}
主要上面這兩個1,2拼接方法不太理解,為什么這樣拼接一下就可以實現(xiàn)發(fā)送16bit數(shù)據(jù)?
比如data16=0x4A33, 右移8位變成0x004A, 不還是16位嗎?把0x004A賦給sendBuff[0], 因為這是8位數(shù)組,所以把16bit的0x004A賦值后,
高8位0x00被切斷了?實際上只是把0x4A賦給了數(shù)組?
下面的sendBuff[1] = data16; 相當(dāng)于sendBuff[1] = 0x4A33; 把16bit數(shù)據(jù)直接賦值給8位數(shù)組?所以sendBuff[1] 最終的值是什么?
這幾個實在不太理解,希望得到專家的幫助,感謝
|
|