firmware: query reset button in timer ISR
This commit is contained in:
parent
3ecf4954a0
commit
d00b072e5f
@ -12,6 +12,7 @@
|
|||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
#include "bits.h"
|
#include "bits.h"
|
||||||
#include "fpga_spi.h"
|
#include "fpga_spi.h"
|
||||||
|
#include "memory.h"
|
||||||
|
|
||||||
#define MAX_CARDS 1
|
#define MAX_CARDS 1
|
||||||
|
|
||||||
@ -112,6 +113,7 @@ uint8_t cmd[6]={0,0,0,0,0,0};
|
|||||||
uint8_t rsp[17];
|
uint8_t rsp[17];
|
||||||
uint8_t csd[17];
|
uint8_t csd[17];
|
||||||
uint8_t cid[17];
|
uint8_t cid[17];
|
||||||
|
diskinfo0_t di;
|
||||||
uint8_t ccs=0;
|
uint8_t ccs=0;
|
||||||
uint32_t rca;
|
uint32_t rca;
|
||||||
|
|
||||||
@ -929,6 +931,7 @@ DRESULT sdn_initialize(BYTE drv) {
|
|||||||
|
|
||||||
/* record CSD for getinfo */
|
/* record CSD for getinfo */
|
||||||
cmd_slow(SEND_CSD, rca, 0, NULL, csd);
|
cmd_slow(SEND_CSD, rca, 0, NULL, csd);
|
||||||
|
sdn_getinfo(drv, 0, &di);
|
||||||
|
|
||||||
/* record CID */
|
/* record CID */
|
||||||
cmd_slow(SEND_CID, rca, 0, NULL, cid);
|
cmd_slow(SEND_CID, rca, 0, NULL, cid);
|
||||||
@ -1057,3 +1060,55 @@ void sdn_changed() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* measure sd access time */
|
||||||
|
void sdn_gettacc(uint32_t *tacc_max, uint32_t *tacc_avg) {
|
||||||
|
uint32_t sec1 = 0;
|
||||||
|
uint32_t sec2 = 0;
|
||||||
|
uint32_t time, time_max = 0;
|
||||||
|
uint32_t time_avg = 0LL;
|
||||||
|
uint32_t numread = 16384;
|
||||||
|
int i;
|
||||||
|
int sec_step = di.sectorcount / numread - 1;
|
||||||
|
if(disk_state == DISK_REMOVED) return;
|
||||||
|
sdn_checkinit(0);
|
||||||
|
for (i=0; i < 128; i++) {
|
||||||
|
sd_offload_tgt=2;
|
||||||
|
sd_offload=1;
|
||||||
|
sdn_read(0, NULL, 0, 1);
|
||||||
|
sd_offload_tgt=2;
|
||||||
|
sd_offload=1;
|
||||||
|
sdn_read(0, NULL, i*sec_step, 1);
|
||||||
|
}
|
||||||
|
for (i=0; i < numread && sram_readbyte(SRAM_CMD_ADDR) != 0x00 && disk_state != DISK_REMOVED; i++) {
|
||||||
|
/* reset timer */
|
||||||
|
LPC_RIT->RICTRL = 0;
|
||||||
|
sd_offload_tgt=2;
|
||||||
|
sd_offload=1;
|
||||||
|
sdn_read(0, NULL, sec1, 2);
|
||||||
|
sec1 += 2;
|
||||||
|
/* start timer */
|
||||||
|
LPC_RIT->RICOUNTER = 0;
|
||||||
|
LPC_RIT->RICTRL = BV(RITEN);
|
||||||
|
sd_offload_tgt=2;
|
||||||
|
sd_offload=1;
|
||||||
|
sdn_read(0, NULL, sec2, 1);
|
||||||
|
/* read timer */
|
||||||
|
time = LPC_RIT->RICOUNTER;
|
||||||
|
/* sd_offload_tgt=2;
|
||||||
|
sd_offload=1;
|
||||||
|
sdn_read(0, NULL, sec2, 15);*/
|
||||||
|
time_avg += time/16;
|
||||||
|
if(time > time_max) {
|
||||||
|
time_max = time;
|
||||||
|
}
|
||||||
|
sec2 += sec_step;
|
||||||
|
}
|
||||||
|
time_avg = time_avg / (i+1) * 16;
|
||||||
|
sd_offload=0;
|
||||||
|
LPC_RIT->RICTRL = 0;
|
||||||
|
if(disk_state != DISK_REMOVED) {
|
||||||
|
*tacc_max = time_max/(CONFIG_CPU_FREQUENCY / 1000000)-114;
|
||||||
|
*tacc_avg = time_avg/(CONFIG_CPU_FREQUENCY / 1000000)-114;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,6 @@ DRESULT sdn_getinfo(BYTE drv, BYTE page, void *buffer);
|
|||||||
|
|
||||||
void sdn_changed(void);
|
void sdn_changed(void);
|
||||||
uint8_t* sdn_getcid(void);
|
uint8_t* sdn_getcid(void);
|
||||||
|
void sdn_gettacc(uint32_t *tacc_max, uint32_t *tacc_avg);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -44,6 +44,7 @@ uint32_t saveram_crc, saveram_crc_old;
|
|||||||
extern snes_romprops_t romprops;
|
extern snes_romprops_t romprops;
|
||||||
|
|
||||||
volatile int reset_changed;
|
volatile int reset_changed;
|
||||||
|
volatile int reset_pressed;
|
||||||
|
|
||||||
void prepare_reset() {
|
void prepare_reset() {
|
||||||
snes_reset(1);
|
snes_reset(1);
|
||||||
|
|||||||
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
extern volatile int sd_changed;
|
extern volatile int sd_changed;
|
||||||
extern volatile int reset_changed;
|
extern volatile int reset_changed;
|
||||||
|
extern volatile int reset_pressed;
|
||||||
|
|
||||||
volatile tick_t ticks;
|
volatile tick_t ticks;
|
||||||
volatile int wokefromrit;
|
volatile int wokefromrit;
|
||||||
|
|
||||||
@ -35,6 +37,7 @@ void SysTick_Handler(void) {
|
|||||||
}
|
}
|
||||||
reset_state = (reset_state << 1) | get_snes_reset() | 0xe000;
|
reset_state = (reset_state << 1) | get_snes_reset() | 0xe000;
|
||||||
if((reset_state == 0xf000) || (reset_state == 0xefff)) {
|
if((reset_state == 0xf000) || (reset_state == 0xefff)) {
|
||||||
|
reset_pressed = (reset_state == 0xf000);
|
||||||
reset_changed = 1;
|
reset_changed = 1;
|
||||||
}
|
}
|
||||||
sdn_changed();
|
sdn_changed();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user