void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
{
u16 i;
W25QXX_CS=0; //使能器件
SPI1_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
SPI1_ReadWriteByte((u8)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer[i]=SPI1_ReadWriteByte(0XFF); //循环读数
}
W25QXX_CS=1;
}
以上代码中的
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
SPI1_ReadWriteByte((u8)ReadAddr); 是把ReadAddr移到哪里去了啊,按道理是一出去后就没有了啊,怎么又开始移了,望大神指教啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
按位来理解吧!SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
SPI1_ReadWriteByte((u8)ReadAddr); 是把ReadAddr移到哪里去了啊,按道理是一出去后就没有了啊,怎么又开始移了,望大神指教啊
0x00 0xaa 0x55 0xff
首先 假若 ReadAddr 是一个32位的变量 值为 0x00AA55FF; 二进制表示: 00000000 10101010 01010101 11111111 共32个位
32 24 16 8
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); 这里的 (u8)((ReadAddr)>>16) 意意是把 ReadAddr的值前移16个位 变化为 二进制 00000000 00000000 00000000 10101010 然后 (u8) 将其强制转化为8位数据结构 变为 0XAA 发送出去,
但记住 这时ReadAddr的值并没有改变,依然是 原值 0X00AA55AA; 看C语言基础的书去理解 左值操作 (只取了一个 0XAA的值发送出去)SPI1_ReadWriteByte((u8)((ReadAddr)>>8)); 按上面的意思 取到的值是 0X55;
因为 ReadAddr>>8 后 结果是 00000000 00000000 10101010 01010101 强制转换为8位后, 高位不要, 只取低8位 到到0X55;
SPI1_ReadWriteByte((u8)ReadAddr); 取到的值是 0XFF; 高位都不要,只取低8位
分三次将 ReadAddr 中的24位值按8位的方式发送出去.
能理解不?
一周热门 更多>