最近在使用STM32的FSMC與FPGA做并行通信總線控制,做一下總結
1,利用FSMC讀取寫入16位資料時的封裝函數如下,不這樣使用的話在與FPGA進行通信的過程中可能會出現不可預知的錯誤。
#define Bank1_SRAM3_ADDR ((u32)(0x68000000))
/*在指定位址(WriteAddr+Bank1_SRAM3_ADDR)開始,連續寫入n個位元組.
pBuffer:位元組指針
WriteAddr:要寫入的位址
n:要寫入的位元組數
*/
void FSMC_writeBuffer(u16* buf,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)
{
*(vu16*)(Bank1_SRAM3_ADDR+WriteAddr*2)=*pBuffer;
WriteAddr++;
pBuffer++;
}
}
/*在指定位址(WriteAddr+Bank1_SRAM3_ADDR)開始,連續讀出n個位元組.
pBuffer:位元組指針
ReadAddr:讀的起始位址
n:要讀出的位元組數
*/
void FSMC_readBuffer(u16* pBuffer,u32 ReadAddr,u32 n)
{
for(;n!=0;n--)
{
*pBuffer++=*(vu16*)(Bank1_SRAM3_ADDR+ReadAddr*2);
ReadAddr++;
}
}