|
楼主 |
发表于 2022-10-19 14:07:47
|
显示全部楼层
#define NOR_FLASH_ADDR ((uint32_t)0x64000000)
#define ADDR_SHIFT(A) (NOR_FLASH_ADDR + (2 * (A)))
#define NOR_WRITE(Address, Data) (*(__IO uint16_t *)(Address) = (Data))
/*
*********************************************************************************************************
* 函 数 名: NOR_WriteHalfWord
* 功能说明: 半字编程. 编程前执行解锁命令序列。编程完毕后,自动退到读取模式。半字编程可以是随机地址。
* 编程前需要保证存储单元是全0xFF状态。可以重复编程相同的数据。
* 形 参: _uiWriteAddr : 偏移地址[0, 16*1024*1024 - 2]; 编程地址必须为偶数
* _usData : 数据 16Bit
*
* 返 回 值: NOR_SUCCESS, NOR_ERROR, NOR_TIMEOUT
*********************************************************************************************************
*/
uint8_t NOR_WriteHalfWord(uint32_t _uiWriteAddr, uint16_t _usData)
{
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
NOR_WRITE(ADDR_SHIFT(0x0555), 0x00A0);
NOR_WRITE(NOR_FLASH_ADDR + _uiWriteAddr, _usData);
return (NOR_GetStatus(Program_Timeout));
}
硬汉哥,为啥这里第四个NOR_WRITE写入的地址不需要左移一位,既然是16位数据线,地址不应该都是左移一位么 |
|