From b19386d8a794999252ea35a6cd8b71f3f43c75d2 Mon Sep 17 00:00:00 2001 From: bsongis Date: Tue, 25 Sep 2012 13:39:33 +0000 Subject: [PATCH] [sky9x] SD Mutex again --- src/FatFs/ffconf.h | 32 ++++++++++++++++++++++++++------ src/ersky9x/diskio.c | 34 +++++++++++++++++++++++++--------- src/open9x.cpp | 8 ++++---- 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/FatFs/ffconf.h b/src/FatFs/ffconf.h index 3334e6f2d..1dddedd0b 100644 --- a/src/FatFs/ffconf.h +++ b/src/FatFs/ffconf.h @@ -9,6 +9,15 @@ #ifndef _FFCONF #define _FFCONF 6502 /* Revision ID */ +#if defined(PCBARM) && !defined(SIMU) +#ifdef __cplusplus +extern "C" { +#endif +#include "../CoOS/kernel/CoOS.h" +#ifdef __cplusplus +} +#endif +#endif /*---------------------------------------------------------------------------/ / Functions and Buffer Configurations @@ -89,8 +98,11 @@ / 1 - ASCII only (Valid for non LFN cfg.) */ - -#define _USE_LFN 1 /* 0 to 3 */ +#if defined(PCBARM) +#define _USE_LFN 2 /* 0 to 3 */ +#else +#define _USE_LFN 1 /* 0 to 3 */ +#endif #define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */ /* The _USE_LFN option switches the LFN support. / @@ -170,9 +182,13 @@ /* A header file that defines sync object types on the O/S, such as / windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */ -#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */ -#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ -#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ +#if defined(PCBARM) +#define _FS_REENTRANT 1 /* 0:Disable or 1:Enable */ +#else +#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */ +#endif +#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ +#define _SYNC_t OS_MutexID /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ /* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module. / @@ -181,8 +197,12 @@ / ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj / function must be added to the project. */ +#if defined(PCBARM) +#define _FS_SHARE 3 /* 0:Disable or >=1:Enable */ +#else +#define _FS_SHARE 2 /* 0:Disable or >=1:Enable */ +#endif -#define _FS_SHARE 0 /* 0:Disable or >=1:Enable */ /* To enable file shareing feature, set _FS_SHARE to 1 or greater. The value defines how many files can be opened simultaneously. */ diff --git a/src/ersky9x/diskio.c b/src/ersky9x/diskio.c index 0fb9c39fe..95173b064 100644 --- a/src/ersky9x/diskio.c +++ b/src/ersky9x/diskio.c @@ -87,6 +87,31 @@ uint32_t Cmd_8_resp ; uint32_t Cmd_A41_resp ; uint8_t cardType; +/*-----------------------------------------------------------------------*/ +/* Lock / unlock functions */ +/*-----------------------------------------------------------------------*/ +int ff_cre_syncobj (BYTE vol, _SYNC_t *mutex) +{ + *mutex = CoCreateMutex(); + return 1; +} + +int ff_req_grant (_SYNC_t mutex) +{ + CoEnterMutexSection(mutex); + return 1; +} + +void ff_rel_grant (_SYNC_t mutex) +{ + CoLeaveMutexSection(mutex); +} + +int ff_del_syncobj (_SYNC_t mutex) +{ + return 1; +} + /** * Configure the MCI CLKDIV in the MCI_MR register. The max. for MCI clock is * MCK/2 and corresponds to CLKDIV = 0 @@ -970,16 +995,12 @@ uint32_t sd_cmd16() #endif } -extern OS_MutexID sdMutex; - uint32_t sd_read_block(uint32_t block_no, uint32_t *data) { uint32_t result = 0; Hsmci *phsmci = HSMCI; int32_t retry; - CoEnterMutexSection(sdMutex); - if (sd_card_ready()) { sd_cmd16(); // Block size = 512, nblocks = 1 @@ -1005,7 +1026,6 @@ uint32_t sd_read_block(uint32_t block_no, uint32_t *data) /* Disable PDC */ phsmci->HSMCI_PTCR = HSMCI_PTCR_RXTDIS | HSMCI_PTCR_TXTDIS; - CoLeaveMutexSection(sdMutex); return result; } @@ -1015,8 +1035,6 @@ uint32_t sd_write_block( uint32_t block_no, uint32_t *data ) Hsmci *phsmci = HSMCI; int32_t retry; - CoEnterMutexSection(sdMutex); - if (sd_card_ready()) { // TRACE_ERROR("Sector %d ", block_no); @@ -1067,8 +1085,6 @@ uint32_t sd_write_block( uint32_t block_no, uint32_t *data ) phsmci->HSMCI_MR &= ~(uint32_t)HSMCI_MR_PDCMODE; - CoLeaveMutexSection(sdMutex); - return result; } diff --git a/src/open9x.cpp b/src/open9x.cpp index 50262bbd7..611770e53 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -62,7 +62,6 @@ OS_STK debugStack[DEBUG_STACK_SIZE]; OS_TCID audioTimer; OS_FlagID audioFlag; -OS_MutexID sdMutex; OS_MutexID audioMutex; OS_MutexID mixerMutex; #endif @@ -1057,9 +1056,11 @@ void doSplash() #if defined(SIMU) if (!main_thread_running) return; sleep(1/*ms*/); -#else - getADC_filt(); +#elif defined(PCBARM) + CoTickDelay(1); #endif + getADC_filt(); + uint16_t tsum = stickMoveValue(); if(keyDown() || (tsum!=inacSum)) return; //wait for key release @@ -3594,7 +3595,6 @@ int main(void) audioTimer = CoCreateTmr(TMR_TYPE_ONE_SHOT, 1000/(1000/CFG_SYSTICK_FREQ), 1000/(1000/CFG_SYSTICK_FREQ), audioTimerHandle); audioTaskId = CoCreateTask(audioTask, NULL, 7, &audioStack[AUDIO_STACK_SIZE-1], AUDIO_STACK_SIZE); - sdMutex = CoCreateMutex(); audioMutex = CoCreateMutex(); mixerMutex = CoCreateMutex();