ToneCore DSP Developer Kit Guide
- So you want to design your own effects?
- Signal Processing for Dummies
- Assembly Programming
- Program Flow
- Delay Pedal Example
- Debug Interfaces
- Using the Simulator
- Prototyping in Python
- Developing under Linux (or OS X)
- Code Library
Note: this page is a work in progress.
This page is intended to help new users of the Line6 ToneCore DSP Developer Kit get up to speed. You should also read the TCDDK FAQ and Getting Started pages as well. And if you get stuck go ask questions in the Line6 forum.
Unless you're already a DSP developer of some sort you're going to find yourself stretched with this kit. But hang in there, it's really not as hard as it seems at first.
Here's what is under the hood:
- Freescale DSP56364 24-bit DSP processor @ 100 MHz.
- 1.5 Kwords program RAM
- 1 Kwords X RAM
- 0.75 Kwords Y RAM
- 512 KB external SRAM (accessible via DMA or normal move instructions). The SRAM is mapped to address 0x20000 in both X and Y memory spaces.
- DAC/ADC/other audio glue logic to get samples in and out of the DSP. Sample frequency is 39.0625 kHz.
- Some regular CPU that deals with loading your program from flash and updating the GUI. You can ignore this CPU entirely for most effects.
Note that 100 MHz/39.0625 kHz = 2560 CPU cycles per audio sample (assuming a mono effect and optimized code). This is quite a bit of horsepower.
Here we'll discuss briefly how to think about an effect and basic building blocks. We'll keep it simple because most people don't have a background in signal processing.
The analog waveform from your guitar is sampled into a series of digital waveform points. This is done using an ADC. Beyond the ADC the audio data is equivalent to a WAV file on your PC or a captured recording in your PC's recording software. On the output side of the effect is a DAC which converts back to an analog signal.
Once in the digital domain we can modify the signal easily using a processor. In our case we are using a specialized DSP processor. Because of the sheer amount of data involved (2 channels * 24 bits * 39.0625 kHz = ~19Mbps) and the sensitivity of the human ear to latency, we tend to act on the data one sample at a time. As an example, say you made an effect that merely reduced the signal by 6 dB. You would take each sample from the ADC, divide it by 2, and then output it. And you would repeat this for each sample. To bypass the effect you would merely output the input sample without dividing. Easy enough, right?
Many effects use input or output samples from the past to compute the effect. Obvious examples of this are delay and reverb effects. You can hear the past input samples in a delay effect clearly if the delay is long enough. So one basic building block you'll be using is a delay memory. On the TCDDK this comes in the form of the external memory. You can store up to ~4.5 seconds of samples there which is plenty for delay/reverb type effects. It convenient to use the external memory as a circular buffer.