This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/1.Cabin/1.Software/STM32_AD7606/VM_App/VM_Sram.c

99 lines
4.0 KiB
C
Raw Normal View History

#include "VM_Sram.h"
#include "delay.h"
u8 Sram_Buf[50000] __attribute__((at(0X68000000)));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_HandleTypeDef SRAM_Handler; //SRAM<41><4D><EFBFBD><EFBFBD>
//SRAM<41><4D>ʼ<EFBFBD><CABC>
void SRAM_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
FSMC_NORSRAM_TimingTypeDef FSMC_ReadWriteTim;
__HAL_RCC_FSMC_CLK_ENABLE(); //ʹ<><CAB9>FSMCʱ<43><CAB1>
__HAL_RCC_GPIOD_CLK_ENABLE(); //ʹ<><CAB9>GPIODʱ<44><CAB1>
__HAL_RCC_GPIOE_CLK_ENABLE(); //ʹ<><CAB9>GPIOEʱ<45><CAB1>
__HAL_RCC_GPIOF_CLK_ENABLE(); //ʹ<><CAB9>GPIOFʱ<46><CAB1>
__HAL_RCC_GPIOG_CLK_ENABLE(); //ʹ<><CAB9>GPIOGʱ<47><CAB1>
//PD0,1,4,5,8~15
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8|\
GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|\
GPIO_PIN_14|GPIO_PIN_15;
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD><ECB8B4>
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
GPIO_Initure.Alternate=GPIO_AF12_FSMC; //<2F><><EFBFBD><EFBFBD>ΪFSMC
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
//PE0,1,7~15
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|\
GPIO_PIN_10| GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|\
GPIO_PIN_15;
HAL_GPIO_Init(GPIOE,&GPIO_Initure);
//PF0~5,12~15
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|\
GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
HAL_GPIO_Init(GPIOF,&GPIO_Initure);
//PG0~5,10
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10;
HAL_GPIO_Init(GPIOG,&GPIO_Initure);
SRAM_Handler.Instance=FSMC_NORSRAM_DEVICE;
SRAM_Handler.Extended=FSMC_NORSRAM_EXTENDED_DEVICE;
SRAM_Handler.Init.NSBank=FSMC_NORSRAM_BANK3; //ʹ<><CAB9>NE3
SRAM_Handler.Init.DataAddressMux=FSMC_DATA_ADDRESS_MUX_DISABLE; //<2F><>ַ/<2F><><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><DFB2><EFBFBD><EFBFBD><EFBFBD>
SRAM_Handler.Init.MemoryType=FSMC_MEMORY_TYPE_SRAM; //SRAM
SRAM_Handler.Init.MemoryDataWidth=FSMC_NORSRAM_MEM_BUS_WIDTH_16; //16λ<36><CEBB><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
SRAM_Handler.Init.BurstAccessMode=FSMC_BURST_ACCESS_MODE_DISABLE; //<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>Ч,<2C>˴<EFBFBD>δ<EFBFBD>õ<EFBFBD>
SRAM_Handler.Init.WaitSignalPolarity=FSMC_WAIT_SIGNAL_POLARITY_LOW; //<2F>ȴ<EFBFBD><C8B4>źŵļ<C5B5><C4BC><EFBFBD>,<2C><><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_Handler.Init.WaitSignalActive=FSMC_WAIT_TIMING_BEFORE_WS; //<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ڵȴ<DAB5><C8B4><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>ǵȴ<C7B5><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>ʹ<EFBFBD><CAB9>NWAIT
SRAM_Handler.Init.WriteOperation=FSMC_WRITE_OPERATION_ENABLE; //<2F><EFBFBD><E6B4A2>дʹ<D0B4><CAB9>
SRAM_Handler.Init.WaitSignal=FSMC_WAIT_SIGNAL_DISABLE; //<2F>ȴ<EFBFBD>ʹ<EFBFBD><CAB9>λ,<2C>˴<EFBFBD>δ<EFBFBD>õ<EFBFBD>
SRAM_Handler.Init.ExtendedMode=FSMC_EXTENDED_MODE_DISABLE; //<2F><>дʹ<D0B4><CAB9><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD><CAB1>
SRAM_Handler.Init.AsynchronousWait=FSMC_ASYNCHRONOUS_WAIT_DISABLE; //<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>µĵȴ<C4B5><C8B4>ź<EFBFBD>,<2C>˴<EFBFBD>δ<EFBFBD>õ<EFBFBD>
SRAM_Handler.Init.WriteBurst=FSMC_WRITE_BURST_DISABLE; //<2F><>ֹͻ<D6B9><CDBB>д
SRAM_Handler.Init.ContinuousClock=FSMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
//FMC<4D><43>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
FSMC_ReadWriteTim.AddressSetupTime=0x00; //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ADDSET<45><54>Ϊ1<CEAA><31>HCLK 1/168M=6ns*16=96ns
FSMC_ReadWriteTim.AddressHoldTime=0x00; //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ADDHLD<4C><44>ģʽ<41>õ<EFBFBD>
FSMC_ReadWriteTim.DataSetupTime=0x03; //<2F><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ8<CEAA><38>HCLK =6*1=6ns
FSMC_ReadWriteTim.BusTurnAroundDuration=0X00;
FSMC_ReadWriteTim.AccessMode=FSMC_ACCESS_MODE_A;//ģʽA
HAL_SRAM_Init(&SRAM_Handler,&FSMC_ReadWriteTim,&FSMC_ReadWriteTim);
}
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ(WriteAddr+Bank1_SRAM3_ADDR)<29><>ʼ,<2C><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>n<EFBFBD><6E><EFBFBD>ֽ<EFBFBD>.
//pBuffer:<3A>ֽ<EFBFBD>ָ<EFBFBD><D6B8>
//WriteAddr:Ҫд<D2AA><D0B4><EFBFBD>ĵ<EFBFBD>ַ
//n:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
void FSMC_SRAM_WriteBuffer(u8 *pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)
{
*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;
WriteAddr++;
pBuffer++;
}
}
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ((WriteAddr+Bank1_SRAM3_ADDR))<29><>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>ֽ<EFBFBD>.
//pBuffer:<3A>ֽ<EFBFBD>ָ<EFBFBD><D6B8>
//ReadAddr:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
//n:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
void FSMC_SRAM_ReadBuffer(u8 *pBuffer,u32 ReadAddr,u32 n)
{
for(;n!=0;n--)
{
*pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);
ReadAddr++;
}
}