From 58f8d8a051580add16ede4c74ae5e24e5f4bb45e Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 19 Aug 2013 14:07:53 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6180 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/ARMCM3-STM32F107-FATFS/main.c | 375 ------------------------------------ 1 file changed, 375 deletions(-) delete mode 100644 demos/ARMCM3-STM32F107-FATFS/main.c (limited to 'demos/ARMCM3-STM32F107-FATFS/main.c') diff --git a/demos/ARMCM3-STM32F107-FATFS/main.c b/demos/ARMCM3-STM32F107-FATFS/main.c deleted file mode 100644 index 15e51c4a0..000000000 --- a/demos/ARMCM3-STM32F107-FATFS/main.c +++ /dev/null @@ -1,375 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include - -#include "ch.h" -#include "hal.h" -#include "test.h" -#include "shell.h" -#include "evtimer.h" -#include "chprintf.h" - -#include "ff.h" - -/*===========================================================================*/ -/* Card insertion monitor. */ -/*===========================================================================*/ - -#define POLLING_INTERVAL 10 -#define POLLING_DELAY 10 - -/** - * @brief Card monitor timer. - */ -static VirtualTimer tmr; - -/** - * @brief Debounce counter. - */ -static unsigned cnt; - -/** - * @brief Card event sources. - */ -static EventSource inserted_event, removed_event; - -/** - * @brief Insertion monitor timer callback function. - * - * @param[in] p pointer to the @p BaseBlockDevice object - * - * @notapi - */ -static void tmrfunc(void *p) { - BaseBlockDevice *bbdp = p; - - chSysLockFromIsr(); - if (cnt > 0) { - if (blkIsInserted(bbdp)) { - if (--cnt == 0) { - chEvtBroadcastI(&inserted_event); - } - } - else - cnt = POLLING_INTERVAL; - } - else { - if (!blkIsInserted(bbdp)) { - cnt = POLLING_INTERVAL; - chEvtBroadcastI(&removed_event); - } - } - chVTSetI(&tmr, MS2ST(POLLING_DELAY), tmrfunc, bbdp); - chSysUnlockFromIsr(); -} - -/** - * @brief Polling monitor start. - * - * @param[in] p pointer to an object implementing @p BaseBlockDevice - * - * @notapi - */ -static void tmr_init(void *p) { - - chEvtInit(&inserted_event); - chEvtInit(&removed_event); - chSysLock(); - cnt = POLLING_INTERVAL; - chVTSetI(&tmr, MS2ST(POLLING_DELAY), tmrfunc, p); - chSysUnlock(); -} - -/*===========================================================================*/ -/* FatFs related. */ -/*===========================================================================*/ - -/** - * @brief FS object. - */ -FATFS MMC_FS; - -/** - * MMC driver instance. - */ -MMCDriver MMCD1; - -/* FS mounted and ready.*/ -static bool_t fs_ready = FALSE; - -/* Maximum speed SPI configuration (18MHz, CPHA=0, CPOL=0, MSb first).*/ -static SPIConfig hs_spicfg = {NULL, GPIOA, GPIOA_SPI3_CS_MMC, 0}; - -/* Low speed SPI configuration (281.250kHz, CPHA=0, CPOL=0, MSb first).*/ -static SPIConfig ls_spicfg = {NULL, GPIOA, GPIOA_SPI3_CS_MMC, - SPI_CR1_BR_2 | SPI_CR1_BR_1}; - -/* MMC/SD over SPI driver configuration.*/ -static MMCConfig mmccfg = {&SPID3, &ls_spicfg, &hs_spicfg}; - -/* Generic large buffer.*/ -uint8_t fbuff[1024]; - -static FRESULT scan_files(BaseSequentialStream *chp, char *path) { - FRESULT res; - FILINFO fno; - DIR dir; - int i; - char *fn; - -#if _USE_LFN - fno.lfname = 0; - fno.lfsize = 0; -#endif - res = f_opendir(&dir, path); - if (res == FR_OK) { - i = strlen(path); - for (;;) { - res = f_readdir(&dir, &fno); - if (res != FR_OK || fno.fname[0] == 0) - break; - if (fno.fname[0] == '.') - continue; - fn = fno.fname; - if (fno.fattrib & AM_DIR) { - path[i++] = '/'; - strcpy(&path[i], fn); - res = scan_files(chp, path); - if (res != FR_OK) - break; - path[--i] = 0; - } - else { - chprintf(chp, "%s/%s\r\n", path, fn); - } - } - } - return res; -} - -/*===========================================================================*/ -/* Command line related. */ -/*===========================================================================*/ - -#define SHELL_WA_SIZE THD_WA_SIZE(2048) -#define TEST_WA_SIZE THD_WA_SIZE(256) - -static void cmd_mem(BaseSequentialStream *chp, int argc, char *argv[]) { - size_t n, size; - - (void)argv; - if (argc > 0) { - chprintf(chp, "Usage: mem\r\n"); - return; - } - n = chHeapStatus(NULL, &size); - chprintf(chp, "core free memory : %u bytes\r\n", chCoreStatus()); - chprintf(chp, "heap fragments : %u\r\n", n); - chprintf(chp, "heap free total : %u bytes\r\n", size); -} - -static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) { - static const char *states[] = {THD_STATE_NAMES}; - Thread *tp; - - (void)argv; - if (argc > 0) { - chprintf(chp, "Usage: threads\r\n"); - return; - } - chprintf(chp, " addr stack prio refs state time\r\n"); - tp = chRegFirstThread(); - do { - chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s %lu\r\n", - (uint32_t)tp, (uint32_t)tp->p_ctx.r13, - (uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1), - states[tp->p_state], (uint32_t)tp->p_time); - tp = chRegNextThread(tp); - } while (tp != NULL); -} - -static void cmd_test(BaseSequentialStream *chp, int argc, char *argv[]) { - Thread *tp; - - (void)argv; - if (argc > 0) { - chprintf(chp, "Usage: test\r\n"); - return; - } - tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), - TestThread, chp); - if (tp == NULL) { - chprintf(chp, "out of memory\r\n"); - return; - } - chThdWait(tp); -} - -static void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) { - FRESULT err; - uint32_t clusters; - FATFS *fsp; - - (void)argv; - if (argc > 0) { - chprintf(chp, "Usage: tree\r\n"); - return; - } - if (!fs_ready) { - chprintf(chp, "File System not mounted\r\n"); - return; - } - err = f_getfree("/", &clusters, &fsp); - if (err != FR_OK) { - chprintf(chp, "FS: f_getfree() failed\r\n"); - return; - } - chprintf(chp, - "FS: %lu free clusters, %lu sectors per cluster, %lu bytes free\r\n", - clusters, (uint32_t)MMC_FS.csize, - clusters * (uint32_t)MMC_FS.csize * (uint32_t)MMCSD_BLOCK_SIZE); - fbuff[0] = 0; - scan_files(chp, (char *)fbuff); -} - -static const ShellCommand commands[] = { - {"mem", cmd_mem}, - {"threads", cmd_threads}, - {"test", cmd_test}, - {"tree", cmd_tree}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseSequentialStream *)&SD3, - commands -}; - -/*===========================================================================*/ -/* Main and generic code. */ -/*===========================================================================*/ - -/* - * Red LEDs blinker thread, times are in milliseconds. - */ -static WORKING_AREA(waThread1, 128); -static msg_t Thread1(void *arg) { - - (void)arg; - chRegSetThreadName("blinker"); - while (TRUE) { - palTogglePad(IOPORT3, GPIOC_LED_STATUS1); - chThdSleepMilliseconds(fs_ready ? 125 : 500); - } - return 0; -} - -/* - * MMC card insertion event. - */ -static void InsertHandler(eventid_t id) { - FRESULT err; - - (void)id; - /* - * On insertion MMC initialization and FS mount. - */ - if (mmcConnect(&MMCD1)) { - return; - } - err = f_mount(0, &MMC_FS); - if (err != FR_OK) { - mmcDisconnect(&MMCD1); - return; - } - fs_ready = TRUE; -} - -/* - * MMC card removal event. - */ -static void RemoveHandler(eventid_t id) { - - (void)id; - mmcDisconnect(&MMCD1); - fs_ready = FALSE; -} - -/* - * Application entry point. - */ -int main(void) { - static const evhandler_t evhndl[] = { - InsertHandler, - RemoveHandler - }; - Thread *shelltp = NULL; - struct EventListener el0, el1; - - /* - * System initializations. - * - HAL initialization, this also initializes the configured device drivers - * and performs the board-specific initializations. - * - Kernel initialization, the main() function becomes a thread and the - * RTOS is active. - */ - halInit(); - chSysInit(); - - /* - * Activates the serial driver 3 using the driver default configuration. - */ - sdStart(&SD3, NULL); - - /* - * Shell manager initialization. - */ - shellInit(); - - /* - * Initializes the MMC driver to work with SPI2. - */ - mmcObjectInit(&MMCD1); - mmcStart(&MMCD1, &mmccfg); - - /* - * Activates the card insertion monitor. - */ - tmr_init(&MMCD1); - - /* - * Creates the blinker thread. - */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); - - /* - * Normal main() thread activity, in this demo it does nothing except - * sleeping in a loop and listen for events. - */ - chEvtRegister(&inserted_event, &el0, 0); - chEvtRegister(&removed_event, &el1, 1); - while (TRUE) { - if (!shelltp) - shelltp = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO); - else if (chThdTerminated(shelltp)) { - chThdRelease(shelltp); /* Recovers memory of the previous shell. */ - shelltp = NULL; /* Triggers spawning of a new shell. */ - } - chEvtDispatch(evhndl, chEvtWaitOne(ALL_EVENTS)); - } - return 0; -} -- cgit v1.2.3