NANO130_H2Press/User/ebi_sram.c

94 lines
3.3 KiB
C
Raw Permalink Normal View History

2025-04-10 14:54:41 +08:00
/*
*********************************************************************************************************
*
* LCD Driver via EBI
*
* IAR Development Kits
* on the
*
* M451
*
* Filename : ebi_sram.c
* Version : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include "includes.h"
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SRAM_Init()
{
/* EBI AD0~1 pins on PB.12~13 */
SYS->PB_H_MFP &= ~(SYS_PB_H_MFP_PB12_MFP_Msk | SYS_PB_H_MFP_PB13_MFP_Msk);
SYS->PB_H_MFP |= (SYS_PB_H_MFP_PB12_MFP_EBI_AD0 | SYS_PB_H_MFP_PB13_MFP_EBI_AD1);
/* EBI AD2~3 pins on PC.14~15 */
SYS->PC_H_MFP &= ~(SYS_PC_H_MFP_PC14_MFP_Msk | SYS_PC_H_MFP_PC15_MFP_Msk);
SYS->PC_H_MFP |= (SYS_PC_H_MFP_PC14_MFP_EBI_AD2 | SYS_PC_H_MFP_PC15_MFP_EBI_AD3);
/* EBI AD4~5 pins on PC.6~7 */
SYS->PC_L_MFP &= ~(SYS_PC_L_MFP_PC6_MFP_Msk | SYS_PC_L_MFP_PC7_MFP_Msk);
SYS->PC_L_MFP |= (SYS_PC_L_MFP_PC6_MFP_EBI_AD4 | SYS_PC_L_MFP_PC7_MFP_EBI_AD5);
/* EBI AD6~12 pins on PA.7~1 */
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA7_MFP_Msk | SYS_PA_L_MFP_PA6_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA7_MFP_EBI_AD6 | SYS_PA_L_MFP_PA6_MFP_EBI_AD7);
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA5_MFP_Msk | SYS_PA_L_MFP_PA4_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA5_MFP_EBI_AD8 | SYS_PA_L_MFP_PA4_MFP_EBI_AD9);
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA3_MFP_Msk | SYS_PA_L_MFP_PA2_MFP_Msk | SYS_PA_L_MFP_PA1_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA3_MFP_EBI_AD10 | SYS_PA_L_MFP_PA2_MFP_EBI_AD11 | SYS_PA_L_MFP_PA1_MFP_EBI_AD12);
/* EBI AD13~15 pins on PA.12~14 */
SYS->PA_H_MFP &= ~(SYS_PA_H_MFP_PA12_MFP_Msk | SYS_PA_H_MFP_PA13_MFP_Msk | SYS_PA_H_MFP_PA14_MFP_Msk);
SYS->PA_H_MFP |= (SYS_PA_H_MFP_PA12_MFP_EBI_AD13 | SYS_PA_H_MFP_PA13_MFP_EBI_AD14 | SYS_PA_H_MFP_PA14_MFP_EBI_AD15);
/* EBI nWR on PA.10, EBI nRD pin on PA.11 */
SYS->PA_H_MFP &= ~(SYS_PA_H_MFP_PA10_MFP_Msk | SYS_PA_H_MFP_PA11_MFP_Msk);
SYS->PA_H_MFP |= (SYS_PA_H_MFP_PA10_MFP_EBI_NWE | SYS_PA_H_MFP_PA11_MFP_EBI_NRE);
/* EBI ALE pin on PB.6, EBI NCS pin on PB.7 */
SYS->PB_L_MFP &= ~(SYS_PB_L_MFP_PB6_MFP_Msk | SYS_PB_L_MFP_PB7_MFP_Msk);
SYS->PB_L_MFP |= (SYS_PB_L_MFP_PB6_MFP_EBI_ALE | SYS_PB_L_MFP_PB7_MFP_EBI_NCS);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CLK_EnableModuleClock(EBI_MODULE);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void SRAM_Open()
{
// <20><><EFBFBD><EFBFBD>EBI
EBI_Open(0, EBI_BUSWIDTH_8BIT, EBI_TIMING_VERYFAST, 0, 0);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD>ڴ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ܻᵼ<DCBB>³<EFBFBD>ͻ<EFBFBD><CDBB>
void *SRAM_Alloc(uint32_t size)
{
static uint32_t SRAM_Base = 0;
void *p = 0;
// 4<>ֽڶ<D6BD><DAB6><EFBFBD>
if(size % 4)
size += (4 - size % 4);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
if(SRAM_Base + size <= SRAM_SIZE)
{
// printf("\nAlloced SRAM at 0x%08X size %04X (%d) bytes\n", EBI_BASE_ADDR + SRAM_Base, size, size);
p = (void *) (EBI_BASE_ADDR + SRAM_Base);
SRAM_Base += size;
}
else
printf("\n****** Alloc SRAM failed.\n");
return p;
}