diff --git a/FatFs_SPI/sd_driver/sd_spi.c b/FatFs_SPI/sd_driver/sd_spi.c index 3c90390..148b723 100644 --- a/FatFs_SPI/sd_driver/sd_spi.c +++ b/FatFs_SPI/sd_driver/sd_spi.c @@ -88,7 +88,7 @@ bool sd_spi_transfer(sd_card_t *pSD, const uint8_t *tx, uint8_t *rx, uint8_t sd_spi_write(sd_card_t *pSD, const uint8_t value) { // TRACE_PRINTF("%s\n", __FUNCTION__); - u_int8_t received = SPI_FILL_CHAR; + uint8_t received = SPI_FILL_CHAR; #if 0 int num = spi_write_read_blocking(pSD->spi->hw_inst, &value, &received, 1); myASSERT(1 == num); diff --git a/i2s.c b/i2s.c index d73c2da..af034f2 100644 --- a/i2s.c +++ b/i2s.c @@ -28,6 +28,9 @@ extern int *logical_track_to_sector; extern bool *is_data_track; extern mutex_t mechacon_mutex; +void select_sens(uint8_t new_sens); +void set_sens(uint8_t what, bool new_value); + char SCExData[][44] = { {1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0}, @@ -53,7 +56,7 @@ void i2s_data_thread() { sd_card_t *pSD; int bytes; char buf[128]; - ushort *cd_samples[SECTOR_CACHE]; + uint16_t *cd_samples[SECTOR_CACHE]; uint16_t CD_scrambling_key[1176] = { 0 }; int key = 1; int logical_track = 0; @@ -182,6 +185,7 @@ void i2s_data_thread() { latched >>= 8; latched |= c << 16; } + select_sens(latched >> 20); gpio_put(SENS, SENS_data[latched >> 20]); mutex_exit(&mechacon_mutex); } @@ -223,7 +227,7 @@ void i2s_data_thread() { } abort_psnee: - gpio_put(SCEX_DATA, 1); + gpio_put(SCEX_DATA, 0); psneeTimer = time_us_64(); printf("-SCEX\n"); } @@ -290,8 +294,9 @@ void i2s_data_thread() { buffer_for_dma = (buffer_for_dma + 1) % 2; sector_sending = sector_loaded[buffer_for_dma]; - dma_hw->ch[channel].read_addr = pio_samples[buffer_for_dma]; + dma_hw->ch[channel].read_addr = (uint32_t)pio_samples[buffer_for_dma]; dma_channel_start(channel); } } } + diff --git a/main.c b/main.c index 0e5fc96..715b874 100644 --- a/main.c +++ b/main.c @@ -37,6 +37,7 @@ volatile uint sector_sending = -1; volatile uint sector_for_track_update = 0; volatile uint64_t subq_start_time = 0; volatile uint64_t sled_timer = 0; +volatile uint8_t current_sens; volatile int num_logical_tracks = 0; int *logical_track_to_sector; bool *is_data_track; @@ -53,6 +54,18 @@ bool SENS_data[16] = { 0,0,0 }; +void select_sens(uint8_t new_sens) +{ + current_sens = new_sens; +} + +void set_sens(uint8_t what, bool new_value) +{ + SENS_data[what] = new_value; + if (what == current_sens) { + gpio_put(SENS, new_value); + } +} void initialize() { set_sys_clock_pll(948000000, 7, 1); // 135428571 Hz, 67714286 Hz PS1 clock @@ -71,7 +84,7 @@ void initialize() { gpio_init(LRCK); gpio_set_dir(SCEX_DATA, GPIO_OUT); - gpio_put(SCEX_DATA, 1); + gpio_put(SCEX_DATA, 0); gpio_set_dir(SENS, GPIO_OUT); gpio_set_dir(LMTSW, GPIO_OUT); gpio_set_dir(XLAT, GPIO_IN); @@ -150,6 +163,7 @@ int main() { latched >>= 8; latched |= c << 16; } + select_sens(latched >> 20); gpio_put(SENS, SENS_data[latched >> 20]); mutex_exit(&mechacon_mutex); } @@ -225,7 +239,7 @@ int main() { if ((track - original_track) >= count_track) { original_track = track; - SENS_data[SENS_COUT] = !SENS_data[SENS_COUT]; + set_sens(SENS_COUT, !SENS_data[SENS_COUT]); } } } else if (sled_move_direction == SLED_MOVE_REVERSE) { @@ -236,7 +250,7 @@ int main() { sector_for_track_update = sector; if ((original_track - track) >= count_track) { original_track = track; - SENS_data[SENS_COUT] = !SENS_data[SENS_COUT]; + set_sens(SENS_COUT, !SENS_data[SENS_COUT]); } } } else if (SENS_data[SENS_GFS]) { diff --git a/utils.c b/utils.c index 8229163..aef18ca 100644 --- a/utils.c +++ b/utils.c @@ -3,29 +3,8 @@ #include "utils.h" -extern inline int tobcd(int in) { - if (in > 99) { - return 0x99; - } else { - return (in / 10) << 4 | (in % 10); - } -} -extern inline uint32_t reverseBits(uint32_t num, int bits) { - uint32_t NO_OF_BITS = bits; - uint32_t reverse_num = 0; - int i; - for (i = 0; i < NO_OF_BITS; i++) { - if ((num & (1 << i))) - reverse_num |= 1 << ((NO_OF_BITS - 1) - i); - } - return reverse_num; -} - -extern inline int track_to_sector(int track) { - return pow(track, 2) * 0.00031499 + track * 9.357516535; -} - -extern inline int sectors_per_track(int track) { - return round(track * 0.000616397 + 9); -} \ No newline at end of file +extern inline int tobcd(int in); +extern inline uint32_t reverseBits(uint32_t num, int bits); +extern inline int track_to_sector(int track); +extern inline int sectors_per_track(int track); diff --git a/utils.h b/utils.h index f7edadc..468e292 100644 --- a/utils.h +++ b/utils.h @@ -1,9 +1,32 @@ #ifndef UTILS_H_INCLUDED #define UTILS_H_INCLUDED +#include +#include "stdlib.h" -extern inline int tobcd(int in); -extern inline uint32_t reverseBits(uint32_t num, int bits); -extern inline int track_to_sector(int track); -extern inline int sectors_per_track(int track); +inline int tobcd(int in) { + if (in > 99) { + return 0x99; + } else { + return (in / 10) << 4 | (in % 10); + } +} +inline uint32_t reverseBits(uint32_t num, int bits) { + uint32_t NO_OF_BITS = bits; + uint32_t reverse_num = 0; + int i; + for (i = 0; i < NO_OF_BITS; i++) { + if ((num & (1 << i))) + reverse_num |= 1 << ((NO_OF_BITS - 1) - i); + } + return reverse_num; +} + +inline int track_to_sector(int track) { + return pow(track, 2) * 0.00031499 + track * 9.357516535; +} + +inline int sectors_per_track(int track) { + return round(track * 0.000616397 + 9); +} #endif \ No newline at end of file