int Lua_ResetTimerCount(lua_State *L) { if (lua_gettop(L) >= 1) { timer_reset_count(lua_tointeger(L,1)); } return 0; }
static int diag_sd_init(char *argv[], const char *test_name, int verbose) { int rval = 0; int slot, type; putstr("running SD "); putstr(test_name); putstr(" test ...\r\n"); putstr("press any key to terminate!\r\n"); if (strcmp(argv[0], "sd") == 0) { slot = SCARDMGR_SLOT_SD; } else if (strcmp(argv[0], "sdio") == 0) { slot = SCARDMGR_SLOT_SDIO; } else if (strcmp(argv[0], "sd2") == 0) { slot = SCARDMGR_SLOT_SD2; } else { slot = SCARDMGR_SLOT_SD; } if (strcmp(argv[1], "sd") == 0) { type = SDMMC_TYPE_SD; } else if (strcmp(argv[1], "sdhc") == 0) { type = SDMMC_TYPE_SDHC; } else if (strcmp(argv[1], "mmc") == 0) { type = SDMMC_TYPE_MMC; } else if (strcmp(argv[1], "MoviNAND") == 0) { type = SDMMC_TYPE_MOVINAND; } else { type = SDMMC_TYPE_AUTO; } timer_reset_count(TIMER2_ID); timer_enable(TIMER2_ID); rval = sdmmc_init(slot, type); timer_disable(TIMER2_ID); if (verbose) { putstr("\r\nInit takes: "); putdec(timer_get_count(TIMER2_ID)); putstr("mS\r\n"); putstr("SD clock: "); putdec(get_sd_freq_hz()); putstr("Hz\r\n"); #if (SD_HAS_SDXC_CLOCK == 1) putstr("SDXC clock: "); #if (CHIP_REV == A7S) putdec((u32)amb_get_sdio_clock_frequency(HAL_BASE_VP)); #else putdec((u32)amb_get_sdxc_clock_frequency(HAL_BASE_VP)); #endif putstr("Hz\r\n"); #endif putstr("total_secs: "); putdec(sdmmc_get_total_sectors()); putstr("\r\n"); } return rval; }
int diag_sd_write_speed(char *argv[]) { int rval = 0; int i, j; int total_secs; int sector, sectors; u8 *buf = (u8 *)DIAG_SD_BUF_START; u32 op_size; rval = diag_sd_init(argv, "Write Speed", 1); if (rval < 0) return rval; for (i = 0; i < SECTORS_PER_OP * SECTOR_SIZE / 16; i++) { for (j = 0; j < 16; j++) { buf[(i * 16) + j] = i; } } total_secs = sdmmc_get_total_sectors(); op_size = 0; timer_reset_count(TIMER2_ID); timer_enable(TIMER2_ID); for (sector = 0; sector < total_secs; sector += SECTORS_PER_OP) { if (uart_poll()) break; if ((total_secs - sector) < SECTORS_PER_OP) sectors = total_secs - sector; else sectors = SECTORS_PER_OP; rval = sdmmc_write_sector(sector, sectors, (unsigned int *)buf); if (rval < 0) { putstr("\r\nfailed at sector "); putdec(sector); putstr("\r\n"); break; } op_size += sectors; } timer_disable(TIMER2_ID); putstr("\r\nTotally write 0x"); puthex(op_size * SECTOR_SIZE); putstr(" Bytes in "); putdec(timer_get_count(TIMER2_ID)); putstr(" mS, about "); putdec(op_size * 500 / timer_get_count(TIMER2_ID)); putstr(" KB/s!\r\n\r\n"); return rval; }