NANO130_H2Press/User/ebi_sram.c

94 lines
3.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*********************************************************************************************************
*
* 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"
// ³õʼ»¯Òý½Å
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);
// ÔÊÐíÍâÉèʱÖÓ
CLK_EnableModuleClock(EBI_MODULE);
}
// ´ò¿ªÉ豸ºÍÔÊÐíÖжÏ
void SRAM_Open()
{
// ´ò¿ªEBI
EBI_Open(0, EBI_BUSWIDTH_8BIT, EBI_TIMING_VERYFAST, 0, 0);
}
// ·ÖÅäÀ©Õ¹ÄÚ´æ
// ±¾º¯ÊýÖ»ÄÜÔÚ³õʼ´úÂëÀïµ÷Óã¨Èç¹ûÔÚÈÎÎñÀïµ÷ÓÿÉÄܻᵼÖ³åÍ»£©
void *SRAM_Alloc(uint32_t size)
{
static uint32_t SRAM_Base = 0;
void *p = 0;
// 4×Ö½Ú¶ÔÆë
if(size % 4)
size += (4 - size % 4);
// ¼ì²é´óС
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;
}