| 203 | } |
| 204 | |
| 205 | void AudioEffectDelayExternal::write(uint32_t offset, uint32_t count, const int16_t *data) |
| 206 | { |
| 207 | uint32_t addr = memory_begin + offset; |
| 208 | |
| 209 | #ifdef INTERNAL_TEST |
| 210 | while (count) { testmem[addr++] = *data++; count--; } // testing only |
| 211 | #else |
| 212 | if (memory_type == AUDIO_MEMORY_23LC1024) { |
| 213 | addr *= 2; |
| 214 | SPI.beginTransaction(SPISETTING); |
| 215 | digitalWriteFast(SPIRAM_CS_PIN, LOW); |
| 216 | SPI.transfer16((0x02 << 8) | (addr >> 16)); |
| 217 | SPI.transfer16(addr & 0xFFFF); |
| 218 | while (count) { |
| 219 | int16_t w = 0; |
| 220 | if (data) w = *data++; |
| 221 | SPI.transfer16(w); |
| 222 | count--; |
| 223 | } |
| 224 | digitalWriteFast(SPIRAM_CS_PIN, HIGH); |
| 225 | SPI.endTransaction(); |
| 226 | } else if (memory_type == AUDIO_MEMORY_MEMORYBOARD) { |
| 227 | SPI.beginTransaction(SPISETTING); |
| 228 | while (count) { |
| 229 | uint32_t chip = (addr >> 16) + 1; |
| 230 | digitalWriteFast(MEMBOARD_CS0_PIN, chip & 1); |
| 231 | digitalWriteFast(MEMBOARD_CS1_PIN, chip & 2); |
| 232 | digitalWriteFast(MEMBOARD_CS2_PIN, chip & 4); |
| 233 | uint32_t chipaddr = (addr & 0xFFFF) << 1; |
| 234 | SPI.transfer16((0x02 << 8) | (chipaddr >> 16)); |
| 235 | SPI.transfer16(chipaddr & 0xFFFF); |
| 236 | uint32_t num = 0x10000 - (addr & 0xFFFF); |
| 237 | if (num > count) num = count; |
| 238 | count -= num; |
| 239 | addr += num; |
| 240 | do { |
| 241 | int16_t w = 0; |
| 242 | if (data) w = *data++; |
| 243 | SPI.transfer16(w); |
| 244 | } while (--num > 0); |
| 245 | } |
| 246 | digitalWriteFast(MEMBOARD_CS0_PIN, LOW); |
| 247 | digitalWriteFast(MEMBOARD_CS1_PIN, LOW); |
| 248 | digitalWriteFast(MEMBOARD_CS2_PIN, LOW); |
| 249 | SPI.endTransaction(); |
| 250 | } |
| 251 | #endif |
| 252 | } |
| 253 | |
| 254 | |
| 255 |
nothing calls this directly
no outgoing calls
no test coverage detected