| 158 | #define SPISETTING SPISettings(20000000, MSBFIRST, SPI_MODE0) |
| 159 | |
| 160 | void AudioEffectDelayExternal::read(uint32_t offset, uint32_t count, int16_t *data) |
| 161 | { |
| 162 | uint32_t addr = memory_begin + offset; |
| 163 | |
| 164 | #ifdef INTERNAL_TEST |
| 165 | while (count) { *data++ = testmem[addr++]; count--; } // testing only |
| 166 | #else |
| 167 | if (memory_type == AUDIO_MEMORY_23LC1024) { |
| 168 | addr *= 2; |
| 169 | SPI.beginTransaction(SPISETTING); |
| 170 | digitalWriteFast(SPIRAM_CS_PIN, LOW); |
| 171 | SPI.transfer16((0x03 << 8) | (addr >> 16)); |
| 172 | SPI.transfer16(addr & 0xFFFF); |
| 173 | while (count) { |
| 174 | *data++ = (int16_t)(SPI.transfer16(0)); |
| 175 | count--; |
| 176 | } |
| 177 | digitalWriteFast(SPIRAM_CS_PIN, HIGH); |
| 178 | SPI.endTransaction(); |
| 179 | } else if (memory_type == AUDIO_MEMORY_MEMORYBOARD) { |
| 180 | SPI.beginTransaction(SPISETTING); |
| 181 | while (count) { |
| 182 | uint32_t chip = (addr >> 16) + 1; |
| 183 | digitalWriteFast(MEMBOARD_CS0_PIN, chip & 1); |
| 184 | digitalWriteFast(MEMBOARD_CS1_PIN, chip & 2); |
| 185 | digitalWriteFast(MEMBOARD_CS2_PIN, chip & 4); |
| 186 | uint32_t chipaddr = (addr & 0xFFFF) << 1; |
| 187 | SPI.transfer16((0x03 << 8) | (chipaddr >> 16)); |
| 188 | SPI.transfer16(chipaddr & 0xFFFF); |
| 189 | uint32_t num = 0x10000 - (addr & 0xFFFF); |
| 190 | if (num > count) num = count; |
| 191 | count -= num; |
| 192 | addr += num; |
| 193 | do { |
| 194 | *data++ = (int16_t)(SPI.transfer16(0)); |
| 195 | } while (--num > 0); |
| 196 | } |
| 197 | digitalWriteFast(MEMBOARD_CS0_PIN, LOW); |
| 198 | digitalWriteFast(MEMBOARD_CS1_PIN, LOW); |
| 199 | digitalWriteFast(MEMBOARD_CS2_PIN, LOW); |
| 200 | SPI.endTransaction(); |
| 201 | } |
| 202 | #endif |
| 203 | } |
| 204 | |
| 205 | void AudioEffectDelayExternal::write(uint32_t offset, uint32_t count, const int16_t *data) |
| 206 | { |