[sky9x] SD Mutex again

This commit is contained in:
bsongis
2012-09-25 13:39:33 +00:00
parent b2818b6b22
commit b19386d8a7
3 changed files with 55 additions and 19 deletions
+26 -6
View File
@@ -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. */
+25 -9
View File
@@ -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;
}
+4 -4
View File
@@ -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();