Issue 118 fixed

Another fix for SDcard setup on ersky9x board which should be quicker to initialize.
This commit is contained in:
bsongis
2012-08-28 13:39:22 +00:00
parent 839ee83a6b
commit 0c43ff8882
6 changed files with 56 additions and 50 deletions
+10 -4
View File
@@ -76,7 +76,7 @@ const char * audioFilenames[] = {
#endif
};
uint32_t sdAvailableAudioFiles;
uint32_t sdAvailableAudioFiles = (1 << AU_TADA);
#if defined(SDCARD)
// TODO enable the assert when it's C++
@@ -91,14 +91,16 @@ void retrieveAvailableAudioFiles()
assert(sizeof(sdAvailableAudioFiles)*8 > AU_FRSKY_FIRST);
#endif
sdAvailableAudioFiles = 0;
uint32_t availableAudioFiles = 0;
for (uint32_t i=0; i<AU_FRSKY_FIRST; i++) {
strcpy(filename+sizeof(SYSTEM_SOUNDS_PATH), audioFilenames[i]);
strcat(filename+sizeof(SYSTEM_SOUNDS_PATH), SOUNDS_EXT);
if (f_stat(filename, &info) == FR_OK)
sdAvailableAudioFiles |= ((uint32_t)1 << i);
availableAudioFiles |= ((uint32_t)1 << i);
}
sdAvailableAudioFiles = availableAudioFiles;
}
}
@@ -168,8 +170,11 @@ extern uint16_t Sine_values[];
uint8_t pcmCodec;
uint32_t pcmFreq = 8000;
#ifndef SIMU
void audioTask(void* pdata)
{
sdInit();
while (1) {
CoWaitForSingleFlag(audioFlag, 0);
@@ -178,6 +183,7 @@ void audioTask(void* pdata)
}
}
#endif
#define WAV_BUFFER_SIZE 512
uint16_t wavSamplesArray[3*WAV_BUFFER_SIZE];
@@ -474,7 +480,7 @@ void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id)
printf("playFile(\"%s\")\n", filename); fflush(stdout);
#endif
if (!sd_card_mounted())
if (!CardIsConnected() || (Card_state != SD_ST_MOUNTED && Card_state != SD_ST_STARTUP))
return;
CoEnterMutexSection(audioMutex);
+16
View File
@@ -497,6 +497,22 @@
#define CardIsConnected() ( (PIOB->PIO_PDSR & PIO_PB7) == 0 )
// States for initialising card
#define SD_ST_ERR -1
#define SD_ST_STARTUP 0
#define SD_ST_EMPTY 1
#define SD_ST_INIT1 2
#define SD_ST_INIT2 3
#define SD_ST_IDLE 4
#define SD_ST_READY 5
#define SD_ST_IDENT 6
#define SD_ST_STBY 7
#define SD_ST_TRAN 8
#define SD_ST_DATA 9
#define SD_ST_MOUNTED 10
extern int32_t Card_state;
/*
#define BOARD_PSRAM_PINS PIN_EBI_DATA_BUS, PIN_EBI_NCS0, PIN_EBI_NRD, PIN_EBI_NWE, \
PIN_EBI_PSRAM_ADDR_BUS, PIN_EBI_PSRAM_NBS, PIN_EBI_A1
+14 -31
View File
@@ -66,23 +66,10 @@
/** SDIO Combo, with SDHC embedded (0xB) */
#define CARD_SDHCCOMBO (CARD_TYPE_bmSDIO|CARD_SDHC)
// States for initialising card
#define SD_ST_ERR -1
#define SD_ST_EMPTY 0
#define SD_ST_INIT1 1
#define SD_ST_INIT2 2
#define SD_ST_IDLE 3
#define SD_ST_READY 4
#define SD_ST_IDENT 5
#define SD_ST_STBY 6
#define SD_ST_TRAN 7
#define SD_ST_DATA 8
#define SD_ST_MOUNTED 9
uint32_t Card_ID[4] ;
uint32_t Card_SCR[2] ;
uint32_t Card_CSD[4] ;
int32_t Card_state = SD_ST_EMPTY ;
int32_t Card_state = SD_ST_STARTUP ;
uint32_t Sd_128_resp[4] ;
uint32_t Sd_rca ;
uint32_t Cmd_8_resp ;
@@ -814,6 +801,9 @@ void retrieveAvailableAudioFiles();
void sdPoll10mS()
{
if (Card_state == SD_ST_STARTUP)
return;
if (!CardIsConnected()) {
Card_state = SD_ST_EMPTY;
Sd_rca = 0;
@@ -879,52 +869,45 @@ void sdInit()
Sd_rca = 0;
sdErrorCount = 0;
Card_state = SD_ST_EMPTY;
if (!CardIsConnected())
if (!CardIsConnected()) {
Card_state = SD_ST_EMPTY;
return;
}
Card_state = SD_ST_INIT1;
sdCmd0();
Card_state = SD_ST_INIT2;
sdCmd8(1);
Card_state = SD_ST_IDLE;
sdMemInit(1, &Cmd_A41_resp);
Card_state = SD_ST_READY;
uint8_t retry;
for (retry=0; retry<10; retry++) {
if (!sdCmd2()) break;
CoTickDelay(1); // 2ms
}
if (retry == 10)
if (retry == 10) {
Card_state = SD_ST_READY;
return;
Card_state = SD_ST_IDENT;
}
for (retry=0; retry<10; retry++) {
if (!sdCmd3()) break;
CoTickDelay(1); // 2ms
}
if (retry == 10)
if (retry == 10) {
Card_state = SD_ST_IDENT;
return;
}
Card_state = SD_ST_STBY;
sdCmd9();
sdCmd7(); // Select Card
Card_state = SD_ST_TRAN;
sdAcmd51();
sdAcmd6(); // Set bus width to 4 bits, and speed to 9 MHz
// Should check the card can do this ****
Card_state = SD_ST_DATA;
f_mount(0, &g_FATFS_Obj);
retrieveAvailableAudioFiles();
Card_state = SD_ST_MOUNTED;
}
-1
View File
@@ -745,7 +745,6 @@ void menuProcTrainer(uint8_t event)
}
}
extern uint32_t Card_state;
void menuProcDiagVers(uint8_t event)
{
SIMPLE_MENU(STR_MENUVERSION, menuTabDiag, e_Vers, 1);
+15 -13
View File
@@ -2234,7 +2234,7 @@ char userDataDisplayBuf[TELEM_SCREEN_BUFFER_SIZE];
ACTIVE_MIXES_TYPE activeMixes;
#endif
int32_t sum_chans512[NUM_CHNOUT] = {0};
inline void doMixerCalculations(uint16_t tmr10ms, uint8_t tick10ms)
inline void doMixerCalculations(tmr10ms_t tmr10ms, uint8_t tick10ms)
{
#ifdef BOLD_FONT
activeMixes = 0;
@@ -2347,11 +2347,11 @@ inline void doMixerCalculations(uint16_t tmr10ms, uint8_t tick10ms)
val += RESX;
val /= (RESX/16); // calibrate it
static uint16_t s_time_tot;
static tmr10ms_t s_time_tot;
static uint8_t s_cnt_1s;
static uint16_t s_sum_1s;
#if defined(THRTRACE)
static uint16_t s_time_trace;
static tmr10ms_t s_time_trace;
static uint16_t s_cnt_10s;
static uint16_t s_sum_10s;
#endif
@@ -2359,7 +2359,7 @@ inline void doMixerCalculations(uint16_t tmr10ms, uint8_t tick10ms)
s_cnt_1s++;
s_sum_1s += val;
if ((uint16_t)(tmr10ms - s_time_tot) >= 100) { // 1sec
if ((tmr10ms_t)(tmr10ms - s_time_tot) >= 100) { // 1sec
s_time_tot += 100;
s_timeCumTot += 1;
@@ -2371,7 +2371,7 @@ inline void doMixerCalculations(uint16_t tmr10ms, uint8_t tick10ms)
s_cnt_10s += s_cnt_1s;
s_sum_10s += s_sum_1s;
if ((uint16_t)(tmr10ms - s_time_trace) >= 1000) {// 10sec
if ((tmr10ms_t)(tmr10ms - s_time_trace) >= 1000) {// 10sec
s_time_trace += 1000;
val = s_sum_10s / s_cnt_10s;
s_sum_10s = 0;
@@ -2531,7 +2531,7 @@ void perMain()
{
static tmr10ms_t lastTMR;
tmr10ms_t tmr10ms = get_tmr10ms();
uint8_t tick10ms = (tmr10ms > lastTMR ? tmr10ms - lastTMR : 1);
uint8_t tick10ms = (tmr10ms >= lastTMR ? tmr10ms - lastTMR : 1);
lastTMR = tmr10ms;
#if defined(PCBSTD) || defined(SIMU)
@@ -2747,7 +2747,7 @@ ISR(TIMER5_COMPA_vect, ISR_NOBLOCK) // mixer interrupt
static tmr10ms_t lastTMR;
tmr10ms_t tmr10ms = get_tmr10ms();
uint8_t tick10ms = (tmr10ms > lastTMR ? tmr10ms - lastTMR : 1);
uint8_t tick10ms = (tmr10ms >= lastTMR ? tmr10ms - lastTMR : 1);
lastTMR = tmr10ms;
if (s_current_protocol < PROTO_NONE) {
@@ -3121,11 +3121,7 @@ inline void open9xInit(OPEN9X_INIT_ARGS)
if (g_eeGeneral.backlightMode != e_backlight_mode_off) backlightOn(); // on Tx start turn the light on
if (!UNEXPECTED_SHUTDOWN()) {
#if defined(PCBARM)
lcd_clear();
refreshDisplay();
sdInit();
#elif 0
#if 0
// defined(PCBSTD) && defined(VOICE) && !defined(SPLASH)
lcd_clear();
lcd_putsAtt(20, 28, PSTR("Open9x..."), DBLSIZE);
@@ -3136,6 +3132,12 @@ inline void open9xInit(OPEN9X_INIT_ARGS)
doSplash();
#if defined(PCBARM)
while (Card_state == SD_ST_STARTUP) {
CoTickDelay(1); // 2ms
}
#endif
#if !defined(PCBARM)
checkLowEEPROM();
#endif
@@ -3181,7 +3183,7 @@ void mixerTask(void * pdata)
static tmr10ms_t lastTMR;
tmr10ms_t tmr10ms = get_tmr10ms();
uint8_t tick10ms = (tmr10ms > lastTMR ? tmr10ms - lastTMR : 1);
uint8_t tick10ms = (tmr10ms >= lastTMR ? tmr10ms - lastTMR : 1);
lastTMR = tmr10ms;
if (s_current_protocol < PROTO_NONE) {
+1 -1
View File
@@ -394,5 +394,5 @@ FRESULT f_getcwd (TCHAR *path, UINT sz_path)
return FR_OK;
}
uint32_t Card_state = 8;
int32_t Card_state = SD_ST_MOUNTED;
#endif