STR710 Demo的FlashProgrammer例程看不明白,请明白人给讲讲,谢谢!
void ExtFlash_ChipErase(void)
{
FLASH_WRITE(0x5555, 0xaaaa); //数据应该是0xaa,为什么要写成0xaaaa
FLASH_WRITE(0x2aaa, 0x5555); //数据应该是0x55,为什么要写成0x5555
FLASH_WRITE(0x5555, 0x8080); //
FLASH_WRITE(0x5555, 0xaaaa);
FLASH_WRITE(0x2aaa, 0x5555);
FLASH_WRITE(0x5555, 0x1010);
Check_Toggle_Ready(0);
}
#define FLASH_WRITE(addr, word) (*FLASH_ADDR(addr) = FLASH_DATA(word))
//为什么把写入的数据要做下面这样的变换?
#define FLASH_DATA(n) ( (n) >> 0 & 0x8000 /* D15 -> D15 */ \
| (n) >> 1 & 0x2000 /* D14 -> D13 */ \
| (n) >> 2 & 0x0800 /* D13 -> D11 */ \
| (n) >> 3 & 0x0200 /* D12 -> D9 */ \
| (n) >> 4 & 0x0080 /* D11 -> D7 */ \
| (n) >> 5 & 0x0020 /* D10 -> D5 */ \
| (n) >> 6 & 0x0008 /* D9 -> D3 */ \
| (n) >> 7 & 0x0002 /* D8 -> D1 */ \
| (n) << 7 & 0x4000 /* D7 -> D14 */ \
| (n) << 6 & 0x1000 /* D6 -> D12 */ \
| (n) << 5 & 0x0400 /* D5 -> D10 */ \
| (n) << 4 & 0x0100 /* D4 -> D8 */ \
| (n) << 3 & 0x0040 /* D3 -> D6 */ \
| (n) << 2 & 0x0010 /* D2 -> D4 */ \
| (n) << 1 & 0x0004 /* D1 -> D2 */ \
| (n) << 0 & 0x0001 /* D0 -> D0 */ ) |