- UID
- 1029342
- 性别
- 男
|
/******************************************************************************* * Function Name : FSMC_NOR_ProgramBuffer
* Description : Writes a half-word buffer to the FSMC NOR memory. This function
* must be used only with S29GL128P NOR memory.
* Input : - pBuffer : pointer to buffer.
* - WriteAddr: NOR memory internal address from which the data * will be written.
* - NumHalfwordToWrite: number of Half words to write. * The maximum allowed value is 32 Half words (64 bytes). * Output : None
* Return : NOR_Status:The returned value can be: NOR_SUCCESS, NOR_ERROR
* or NOR_TIMEOUT
*******************************************************************************/
NOR_Status FSMC_NOR_ProgramBuffer(u16* pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)
{
u32 lastloadedaddress = 0x00;
u32 currentaddress = 0x00;
u32 endaddress = 0x00;
/* Initialize variables */
currentaddress = WriteAddr;
endaddress = WriteAddr + NumHalfwordToWrite - 1;
lastloadedaddress = WriteAddr;
/* Issue unlock command sequence */
NOR_WRITE(ADDR_SHIFT(0x005555), 0x00AA);
NOR_WRITE(ADDR_SHIFT(0x02AAA), 0x0055);
/* Write Write Buffer Load Command */
NOR_WRITE(ADDR_SHIFT(WriteAddr), 0x0025);
NOR_WRITE(ADDR_SHIFT(WriteAddr), (NumHalfwordToWrite - 1)); /* Load Data into NOR Buffer */
while(currentaddress <= endaddress)
{
/* Store last loaded address & data value (for polling) */
lastloadedaddress = currentaddress;
NOR_WRITE(ADDR_SHIFT(currentaddress), *pBuffer++);
currentaddress += 1;
}
NOR_WRITE(ADDR_SHIFT(lastloadedaddress), 0x29);
return(FSMC_NOR_GetStatus(Program_Timeout));
}
/****************************************************************************** * Function Name : FSMC_NOR_ReadHalfWord
* Description : Reads a half-word from the NOR memory.
* Input : - ReadAddr : NOR memory internal address to read from. * Output : None
* Return : Half-word read from the NOR memory
*******************************************************************************/ u16 FSMC_NOR_ReadHalfWord(u32 ReadAddr)
{
NOR_WRITE(ADDR_SHIFT(0x005555), 0x00AA);
NOR_WRITE(ADDR_SHIFT(0x002AAA), 0x0055);
NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0 );
return (*(vu16 *)((Bank1_NOR2_ADDR + ReadAddr)));
}
/******************************************************************************* * Function Name : FSMC_NOR_ReadBuffer
* Description : Reads a block of data from the FSMC NOR memory. * Input : - pBuffer : pointer to the buffer that receives the data read * from the NOR memory.
* - ReadAddr : NOR memory internal address to read from. * - NumHalfwordToRead : number of Half word to read. * Output : None
* Return : None
*******************************************************************************/ void FSMC_NOR_ReadBuffer(u16* pBuffer, u32 ReadAddr, u32
NumHalfwordToRead)
{
NOR_WRITE(ADDR_SHIFT(0x05555), 0x00AA);
NOR_WRITE(ADDR_SHIFT(0x02AAA), 0x0055);
NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0);
for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) /* while there is data to read */
{
/* Read a Halfword from the NOR */
*pBuffer++ = *(vu16 *)((Bank1_NOR2_ADDR + ReadAddr));
ReadAddr = ReadAddr + 2;
}
}
/****************************************************************************** * Function Name : FSMC_NOR_ReturnToReadMode
* Description : Returns the NOR memory to Read mode.
* Input : None
* Output : None
* Return : NOR_SUCCESS
*******************************************************************************/ NOR_Status FSMC_NOR_ReturnToReadMode(void)
博泰典藏网btdcw.com包含总结汇报、高中教育、经管营销、行业论文、计划方案、农林牧渔、外语学习、工程科技、表格模板、高等教育、旅游景点以及STM32-FSMC-NOR FLASH等内容。 |
|