#include <LPC177x_8x.h>
void FLASH_Autoselect(void);
void Flash_CFI(void);
unsigned char Flash_Read(unsigned long Source_Address);
unsigned char EMC_Write(unsigned short DQ_In, unsigned long Target_Address);
unsigned char EMC_Read(unsigned short *DQ_Out, unsigned long Source_Address);
unsigned char Flash_SinWord_Prog(unsigned long Target_Address);
unsigned char NOR_Sec_Erase(unsigned long Target_Address);
int NewmemTest(void);
void Memtest(void);
unsigned char EMC_Write_Long(unsigned long DQ_In, unsigned long Target_Address);
unsigned char SRAM_Testwrite(unsigned long DQ_In, unsigned long Target_Address);
void SRAM_Init(void);
#define SRAM_OnChip_BaseAddr 0x10000000
#define SRAM_OnChip_EndAddr 0x1000FFFF
#define Flash0_BaseAddr 0x80000000
#define Flash0_EndAddr 0x80FFFFFF
#define Flash1_BaseAddr 0x81000000
#define Flash1_EndAddr 0x81FFFFFF
#define SRAM0_BaseAddr 0x98000000
#define SRAM0_EndAddr 0x980FFFFF
#define SRAM1_BaseAddr 0x9C000000
#define SRAM1_EndAddr 0x9C0FFFFF
#define WRITE_COMPLETE 0
#define WRITE_ABORT 1
#define TIME_OUT 2
#define WRITE_SUSPEND 3
#define WRITE_NOT_COMPLETE 4
#define INVALID_ADDRESS 5
//EMC_CS2 SRAM
//P2[14]
#define SRAM_CS2_SEL LPC_IOCON->P2_14 |= 0x31
//EMC_OEN Shared
//P4[24]
#define OEN_SEL LPC_IOCON->P4_24 |= 0x31
//EMC_WEN Shared
//P4[25]
#define WEN_SEL LPC_IOCON->P4_25 |= 0x31
//EMC_BLS0 SRAM Lower Byte
//P4[26]
#define SRAM_BLS0_SEL LPC_IOCON->P4_26 |= 0x31
//EMC_BLS1 SRAM Upper Byte
//P4[27]
#define SRAM_BLS1_SEL LPC_IOCON->P4_27 |= 0x31
//Nor_Flash /CS0 pin4[30]
#define NORFLASH_CS0_SELLPC_IOCON->P4_30 |= 0x31
//Nor_Flash /CS1 pin4[31]
#define NORFLASH_CS1_SELLPC_IOCON->P4_31 |= 0x31
//Nor_Flash RY/BY pin0[4]
//Ready Busy indicates running in progress. At High Z = ready, at Vil = actively erasing/programming
#define NORFLASH_RYBY_SEL LPC_IOCON->P0_4 |= 0x218
#define NORFLASH_RYBY_IN LPC_GPIO4->DIR &= ~(0x10)
#define NORFLASH_RYBY_BIT LPC_GPIO4->PIN & 0x10
static void pinConfig_EMC(void) {
//Select slew rate and also config for EMC use = 0x31 , with pullup
LPC_IOCON->P3_0 |= 0x31; // D0 @ P3.0
LPC_IOCON->P3_1 |= 0x31; // D1 @ P3.1
LPC_IOCON->P3_2 |= 0x31; // D2 @ P3.2
LPC_IOCON->P3_3 |= 0x31; // D3 @ P3.3
LPC_IOCON->P3_4 |= 0x31; // D4 @ P3.4
LPC_IOCON->P3_5 |= 0x31; // D5 @ P3.5
LPC_IOCON->P3_6 |= 0x31; // D6 @ P3.6
LPC_IOCON->P3_7 |= 0x31; // D7 @ P3.7
LPC_IOCON->P3_8 |= 0x31; //D8 @ P3.8
LPC_IOCON->P3_9 |= 0x31; // D9 @ P3.9
LPC_IOCON->P3_10 |= 0x31; // D10 @ P3.10
LPC_IOCON->P3_11 |= 0x31; // D11 @ P3.11
LPC_IOCON->P3_12 |= 0x31; // D12 @ P3.12
LPC_IOCON->P3_13 |= 0x31; // D13 @ P3.13
LPC_IOCON->P3_14 |= 0x31; // D14 @ P3.14
LPC_IOCON->P3_15 |= 0x31; // D15 @ P3.15 //also A-1 LSB address input in byte mode
//LPC_IOCON->P4_0 |= 0x31; // A0 @ P4.0 //added in to mimic code, temporary not used
LPC_IOCON->P4_1 |= 0x31; // A1 @ P4.1
LPC_IOCON->P4_2 |= 0x31; // A2 @ P4.2
LPC_IOCON->P4_3 |= 0x31; // A3 @ P4.3
LPC_IOCON->P4_4 |= 0x31; // A4 @ P4.4
LPC_IOCON->P4_5 |= 0x31; // A5 @ P4.5
LPC_IOCON->P4_6 |= 0x31; // A6 @ P4.6
LPC_IOCON->P4_7 |= 0x31; // A7 @ P4.7
LPC_IOCON->P4_8 |= 0x31; // A8 @ P4.8
LPC_IOCON->P4_9 |= 0x31; // A9 @ P4.9
LPC_IOCON->P4_10 |= 0x31; // A10 @ P4.10
LPC_IOCON->P4_11 |= 0x31; // A11 @ P4.11
LPC_IOCON->P4_13 |= 0x31; // A13 @ P4.13
LPC_IOCON->P4_14 |= 0x31; // A14 @ P4.14
LPC_IOCON->P4_15 |= 0x31; // A15 @ P4.15
LPC_IOCON->P4_16 |= 0x31; // A16 @ P4.16
LPC_IOCON->P4_17 |= 0x31; // A17 @ P4.17
LPC_IOCON->P4_18 |= 0x31; // A18 @ P4.18
LPC_IOCON->P4_19 |= 0x31; // A19 @ P4.19
//LPC_IOCON->P4_20 |= 0x31; // A20 @ P4.20
//LPC_IOCON->P4_21 |= 0x31; // A21 @ P4.21
//LPC_IOCON->P4_22 |= 0x31; // A22 @ P4.22
//LPC_IOCON->P4_23 |= 0x31; // A23 @ P4.23
//LPC_IOCON->P5_0 |= 0x31; // A24 @ P5.0
//LPC_IOCON->P5_1 |= 0x31; // A25 @ P5.1
//NORFLASH_CS0_SEL;
//NORFLASH_CS1_SEL;
//NORFLASH_RYBY_SEL;
SRAM_CS2_SEL;
SRAM_BLS0_SEL;
SRAM_BLS1_SEL;
OEN_SEL;
WEN_SEL;
}
|