168 lines
4.6 KiB
C
168 lines
4.6 KiB
C
/******************************************************************************
|
|
|
|
efsl Demo-Application for Philips LPC2138 ARM7TDMI-S
|
|
|
|
Copyright (c) 2005
|
|
Martin Thomas, Kaiserslautern, Germany <mthomas@rhrk.uni-kl.de>
|
|
|
|
*****************************************************************************/
|
|
|
|
#include <string.h>
|
|
|
|
#include "lpc214x.h"
|
|
#include "lpc_config.h"
|
|
|
|
#include "uart.h"
|
|
|
|
#include "startup.h"
|
|
#include "efs.h"
|
|
#include "ls.h"
|
|
#include "mkfs.h"
|
|
#include "interfaces/efsl_dbg_printf_arm.h"
|
|
|
|
#define rprintf efsl_debug_printf_arm
|
|
|
|
#define BAUD 115200
|
|
|
|
#define BIT(x) ((unsigned long)1<<x)
|
|
|
|
// 1st LED on Keil MCB2130
|
|
#define LED1PIN 10
|
|
#define LED1BIT BIT(LED1PIN)
|
|
#define LEDDIR IODIR0
|
|
#define LEDSET IOSET0
|
|
#define LEDCLR IOCLR0
|
|
static char LogFileName[] = "dummy.log";
|
|
|
|
/*
|
|
static void systemInit(void)
|
|
{
|
|
// --- enable and connect the PLL (Phase Locked Loop) ---
|
|
// a. set multiplier and divider
|
|
PLLCFG = MSEL | (1<<PSEL1) | (0<<PSEL0);
|
|
// b. enable PLL
|
|
PLLCON = (1<<PLLE);
|
|
// c. feed sequence
|
|
PLLFEED = PLL_FEED1;
|
|
PLLFEED = PLL_FEED2;
|
|
// d. wait for PLL lock (PLOCK bit is set if locked)
|
|
while (!(PLLSTAT & (1<<PLOCK)));
|
|
// e. connect (and enable) PLL
|
|
PLLCON = (1<<PLLE) | (1<<PLLC);
|
|
// f. feed sequence
|
|
PLLFEED = PLL_FEED1;
|
|
PLLFEED = PLL_FEED2;
|
|
|
|
// --- setup and enable the MAM (Memory Accelerator Module) ---
|
|
// a. start change by turning of the MAM (redundant)
|
|
MAMCR = 0;
|
|
// b. set MAM-Fetch cycle to 3 cclk as recommended for >40MHz
|
|
MAMTIM = MAM_FETCH;
|
|
// c. enable MAM
|
|
MAMCR = MAM_MODE;
|
|
|
|
// --- set VPB speed ---
|
|
VPBDIV = VPBDIV_VAL;
|
|
|
|
// --- map INT-vector ---
|
|
#if defined(RAM_RUN)
|
|
MEMMAP = MEMMAP_USER_RAM_MODE;
|
|
#elif defined(ROM_RUN)
|
|
MEMMAP = MEMMAP_USER_FLASH_MODE;
|
|
#else
|
|
#error RUN_MODE not defined!
|
|
#endif
|
|
}
|
|
*/
|
|
static void gpioInit(void)
|
|
{
|
|
LEDSET = BIT(LED1PIN); // set Bit = LED off (active low)
|
|
LEDDIR |= BIT(LED1PIN); // define LED-Pin as output
|
|
} static void ledToggle(void)
|
|
{
|
|
static unsigned char state = 0;
|
|
state = !state;
|
|
if (state)
|
|
LEDCLR = BIT(LED1PIN); // set Bit = LED on
|
|
else
|
|
LEDSET = BIT(LED1PIN); // set Bit = LED off (active low)
|
|
}
|
|
|
|
|
|
#if 0
|
|
static void hang(void)
|
|
{
|
|
while (1);
|
|
}
|
|
|
|
|
|
#endif /* */
|
|
EmbeddedFileSystem efs;
|
|
EmbeddedFile filer, filew;
|
|
DirList list;
|
|
unsigned short e;
|
|
unsigned char buf[513];
|
|
int main(void)
|
|
{
|
|
int ch;
|
|
int8_t res;
|
|
Initialize();
|
|
gpioInit();
|
|
uart0Init(UART_BAUD(BAUD), UART_8N1, UART_FIFO_8); // setup the UART
|
|
uart0Puts("\r\nMMC/SD Card Filesystem Test (P:LPC2148 L:EFSL)\r\n");
|
|
|
|
/* init efsl debug-output */
|
|
efsl_debug_devopen_arm(uart0Putch);
|
|
ledToggle();
|
|
rprintf("CARD init...");
|
|
if ((res = efs_init(&efs, 0)) != 0) {
|
|
rprintf("failed with %i\n", res);
|
|
}
|
|
rprintf("Press Command: d r a \n");
|
|
while (1) {
|
|
if ((ch = uart0Getch()) >= 0) {
|
|
uart0Puts("You pressed : ");
|
|
uart0Putch(ch);
|
|
uart0Puts("\r\n");
|
|
if (ch == 'M') {
|
|
rprintf("Creating FS\n");
|
|
fs_umount(&efs.myFs);
|
|
mkfs_makevfat(&efs.myPart);
|
|
}
|
|
if (ch == 'd') {
|
|
rprintf("Directory of 'root':\n");
|
|
ls_openDir(&list, &(efs.myFs), "/");
|
|
while (ls_getNext(&list) == 0) {
|
|
list.currentEntry.FileName[LIST_MAXLENFILENAME - 1] = '\0';
|
|
rprintf("%s ( %li bytes )\n", list.currentEntry.FileName, list.currentEntry.FileSize);
|
|
}
|
|
}
|
|
if (ch == 'r') {
|
|
if (file_fopen(&filer, &efs.myFs, LogFileName, 'r') == 0) {
|
|
rprintf("File %s open. Content:\n", LogFileName);
|
|
while ((e = file_read(&filer, 512, buf)) != 0) {
|
|
buf[e] = '\0';
|
|
uart0Puts((char *) buf);
|
|
} rprintf("\n");
|
|
file_fclose(&filer);
|
|
}
|
|
}
|
|
if (ch == 'a') {
|
|
if (file_fopen(&filew, &efs.myFs, LogFileName, 'a') == 0) {
|
|
rprintf("File %s open for append. Appending...", LogFileName);
|
|
strcpy((char *) buf, "Append Dummy Data to File\r\n");
|
|
if (file_write(&filew, strlen((char *) buf), buf) == strlen((char *) buf)) {
|
|
rprintf("ok\n\n");
|
|
} else {
|
|
rprintf("fail\n\n");
|
|
}
|
|
file_fclose(&filew);
|
|
fs_umount(&efs.myFs);
|
|
}
|
|
}
|
|
ledToggle();
|
|
}
|
|
}
|
|
return 0; /* never reached */
|
|
}
|