On 25.01.2006, [IDC]Dragon wrote:
>> > For full quality wav pumping, our poor CPU would be pretty
>> > busy with bitswapping.
>> Could you explain why the recorded data has to be bitswapped?
>> Do the most significant byte and the least significant byte
>> have to be swapped in order to get a proper WAV stream?
> It's a shortcoming of the serial interface. It streams the
> bits in UART order (LSB first), but internal serial interfaces
> are SPI, which is MSB first. Since the order can't be
> programmed, we have to twist every byte, can't DMA it
This is only true for playback, as the CPU is hooked to the
MAS serial input. Recording uses a parallel interface, so no
> A similar problem exists for the disk I/O, here we have to
> endian swap byte pairs. Archos unfortunately wired the 16 bit
> data bus directly 1:1, not taking into account that IDE is
> little endian and the SH CPU is big endian.
Not a big issue though; the asm-optimised routines transfer
The Ondio is a different matter, as the MMC is also hooked up to
SPI. For one this makes bitswap necessary for both transfer
Another limitation for WAV playback on Ondio is that the CPU's
SPI can only do 3MBit/s (CPUCLK/4), 44.1kHz 16 bit stereo WAV
already is ~1.4MBit/s, and for playback we have two serial
transfers running in parallel (MMC->CPU and CPU->MAS).
Fortunately rockbox uses DMA for these serial transfers, and
we can drop the double bitswap if we make special provisions
in the filesystem and MMC driver
Received on Wed Jan 25 18:36:18 2006