home *** CD-ROM | disk | FTP | other *** search
- Building a DSP board, Part Six: SM5805s, leave the driving to us
- ----------------------------------------------------------------
-
- This is the sixth in a series on how I went about building
- a dual Motorola DSP56000 sampling board.
-
- The SM5805 plays a major role in my board. It provides the signals
- for driving the S/Hs, the DACs, the ADCs, and the 56000 itself.
- We'll start on the input side of things and step thru all of the
- signals that it generates.
-
- Here's a diagram of the signals that apply...
-
- Processor (clock) output:
- ---+ +-------
- LRCK +---------------------------------------------------------------+
- (left-right clock)
- ---+ +-------------------------------+
- WDCK +-------------------------------+ +-------
- (word clock)
-
- SM5805 output:
- ---+ +---------------+
- SH +-----------------------------------------------+ +-------
- (sample/hold mode control)
- +-+ +-+
- CC ---+ +-------------------------------------------------------------+ +-----
- (ADC convert command)
- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +
- BBC ----++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++-++--------------++-++-+
- (bit rate clock)
-
- ADC output:
-
- DINL |ms|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2|ls |ms|
- (left channel data)
-
- DINR |ms|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2|ls |ms|
- (right channel data)
- +------------------------------------------------+ +-------
- STATUS--+ +--------------+
- (convert done)
-
- Data to 56000:
- +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
- OBCK -+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
- (bit rate clock)
-
- DOL |msb| 15| 14| 13| 12| 11| 10| 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |lsb|msb| 15
- (from SM5805 - merged bitstream) left channel at t-1 rt chan
-
-
- After going thru the analog filters, the first thing that must be done
- to the signal is sampling and holding. The reason the signal must be
- held is that our ADC (like most 16bit ADCs today) uses successive approximation
- to determine the analog value. It has a DAC inside. It tries a DAC value,
- and if the analog signal is bigger, it increases the DAC value and tries the
- comparison again. Remember that it is almost impossible to match the value
- exactly, so it keeps retrying until it is within +/- 1/2 DAC step. If
- the analog value wasn't held, the ADC might never converge.
-
- Okay, look at the SH and CC signals. When SH is high, the sample/hold
- lets the output signal float. When low, it clamps the analog value.
- So, the SM5805 tells the s/h to hold the signal and then tells the ADCs to
- sample the signal. BBC is the bit rate clock used to tell the ADCs to
- get the next bit of serial data out the door. The first pulse on BBC
- tells the ADC we are ready, and the next pulses clock out all 16 bits.
- Note that these are not the 16 bits that go out the SM5805 in the merged
- bitstream. The SM5805 uses the samples from t-1/2 (remember, the output
- is decimated) and t-1 and t-n/2 all the way to n = 121 (it uses a 121st
- order FIR filter) to generate the output at t.
-
- The output is clocked by OBCK (this can be generated from the master
- clock) for the bitrate, and LRCK and WDCK for the left/right channel
- designation and the word clock. LRCK is the oversampling sample rate
- and WDCK is twice that value.
-
- The DAC side of things works almost completely the same way, except
- that the merged bitstream is the input to the SM5805 and the oversampling
- bitstream is the output. In other words, the SM5805 is interpolating.
- Another small difference is that the oversampling bitstream completely
- fills the time taken by the word clock, instead of just a portion.
- The sample/holds hold the signal during the time that the output from the
- DACs might have spikes.
-
- BTW, I think I calculated that the highest (final, i.e. no oversampling)
- sampling rate using my methods is about 52 kHz, so it will work with
- DAT players.
-
- Next: Serial Loader Bootstrap. Let's boot this puppy and run with it!
-
-