94 lines
3.3 KiB
C
94 lines
3.3 KiB
C
/*
|
||
*********************************************************************************************************
|
||
*
|
||
* 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;
|
||
}
|