Title: TigerSHARC processor and evaluation board
1TigerSHARCprocessor and evaluation board
- Different capabilitiesDifferent functionality
2Concepts tackled
- Differences between processor and evaluation
board - Functionality present of TigerSHARC evaluation
board - Accessing the A2D and D2A in an easy way needed
for all Labs.
3Evaluation board P0 and P1
TWO TS201S processors Error messagesabout P0
and P1mean code on specific processor
4Evaluation board Link Ports
Designed for star Configuration Up to 8
processorsworking together P0 to P7
(selectableby switches on backof evaluation
board(Never tried Dontdestroy link ports)
5Audio connectors.Max input voltage around 1 V
p-pwith no DC. Too great a voltage destroys the
board Use MPEG or other players and keep Volume
down Damage and distortion issues
- JTAG ONLY AVALIABLE IN 3rd floor labs
- Higher speed communication rates than USB
(factor of 20 - 100) - ICT320 TigerSHARC
- ICT318 Blackfin (some stations).
6Buttons and LEDs splitbetween processors Much
stuff on the boardshared between
processors(but NOT all)
7Evaluation BoardArchitecture
P0 P1
8Processorscan sharememory Memory allocationdep
ends on ID
9Note labelled processor A and Brather than
processor 0 and 1
10Note labelled processor A and Brather than
processor 0 and 1
11How to use the evaluation board capability
- Read a lot in the hardware manual
- Modify some of the example programs provided in
- C\Program Files\Analog Devices\VisualDSP 3.5
32-Bit\TS\EZ-KITs - and then Read a lot in the hardware manual
12Laboratory 1 Part 2
- This makes use of the analog to digital converter
and the digital to analogue converter to provide
audio sound signals that we can process with the
high speed algorithms we develop during the
course - We will need to learn about
- Interrupts which, how many, why, how?
- A2D, D2A which, how many, why, how?
- We need to learn about all this stuff before the
end of the course but not now Now we just
want to use it
13ECE-ADI-Project
- Was asked to develop (as part of Analog Devices
University Ambassadorship) to develop
demonstration programs and place on the web - Have now developed
- SHARC ADSP-21061 (Previous 515)
- Audio project utilities
- Blackfin ADSP-BF533 (Current ENCM415 Lec. 01)
- Audio project utilities, Video Project utilities
- TigerSHARC ADSP-TS201 (Current ENCM515)
- Embedded Test Driven Development Environment
(E-TDD) - Blackfin, TigerSHARC, SHARC, Microsoft studio
- Find at http//www.enel.ucalgary.ca/People/Smith/
ECE-ADI-Project/Index/index.htm
14Using the code
- Files need See Lab. 1 Part 2
- You will need to build a project file Audio.dpj
- Also link in you code from assignment 1 --
myAssignment1.cpp - 05Labs/05FilesNeeded/05Lab1AudioProject/KnownLocat
ion1Nov04.cpp - 05Labs/05FilesNeeded/05Lab1AudioProject/main_Sound
1Jan05.cpp - 05Labs/05FilesNeeded/05Lab1AudioProject/processsou
nd1Jan05.cpp - 05Labs/05FilesNeeded/05Lab1AudioProject/examinesig
nal.cpp - 05Labs/05FilesNeeded/05Lab1AudioProject/processors
pecific1Nov04.h - 05Labs/05FilesNeeded/05Lab1AudioProject/soundsourc
eClass1Nov04.h - 05Labs/05FilesNeeded/05Lab1AudioProject/student_ad
iprocessor1Jan05.h - 05Labs/05FilesNeeded/05Lab1AudioProject/TS201Onlin
eLib1Jan05_CHAR8.dlb - 05Labs/05FilesNeeded/05Lab1AudioProject/TSXXXproce
ssorspecific1Nov04.h
15ADISoundSource sounddemo(processor,
which_soundsource,
processing_options)
- Does all the hard stuff
- Sets up interrupts
- Sets up interrupt service routine
- Sets up variety of options
- Useful things to know
- which__soundsource LOCAL_AUDIOSOURCE
MONO"Generate a local sound source output D2A - which__soundsource CODEC_AUDIOSOURCE
MONO"Uses the CODEC as sound source input A2D
and output A2D - processing_options allow you to switch quickly
between a variety of versions of functions
(Probably not used this year as the E-TDD
environment does a better job
16sounddemo.ReadSource(channel1_in, channel2_in)
- ReadSource ( )
- Provides the input sound signal from the two
channels of the A/D - This function will wait for an audio interrupt
to place the A2D values into a known location,
and then returns those values to you - In LOCAL_AUDIOSOURCE mode, This function will
wait for an audio interrupt then return audio
samples from an internal generated tune. - Note if your code to process the audio signal
is too slowly, then an interrupt (or many
interrupts) will have already occurred, and
ReadSource( ) will return immediately. There is
NO WAY to recover missed samples. You will hear
sound distortion if many samples are missed
17 sounddemo.WriteSource(leftchannel_out,
rightchannel_out)
- WriteSource( ) simply places your values into a
known location. When an interrupt occurs, these
values will be sent to the D2A automatically. - NOTE there is no check to see whether the
previous values have been sent to the D2A.
Therefore we need to write code of the form - while (ReadSource (left, Right))
- ProcessSound(left, right)
- WriteSource(left, right)
-
- WriteSource( ) will be used during Lab. 1 Part 1
18VolumeControl(channel1_in, channel2_in,
sounddemo)
- You will need earphones for the labs.
- WARNING - Depending on the quality of your
ear-phones, and the quality of your coding, it is
very simply to have a sound that is too loud and
potentially damaging to your ears. DONT start
running the code with the ear-phones on your
ears. Run the code, adjust the volume, and then
place the earphones on your ears - VolumeControl( ) is a simply way of adjusting the
output sound volume
19Interrupt Handling
- sounddemo.Stop_AudioInterrupts( )
- Your code here
- sounddemo.Start_AudioInterrupts( )
- You cant single step (debug) your code when the
interrupts are running. - Note these functions are not working at the
moment on the TigerSHARC. - However this is not a real issue as the Test
Driven Development environment provides an easier
way to test your code without the necessity of
having interrupts - Once your functions have been proven to work
(e.g. Lab. 1, Part 1), then you can add them to
the audio program (e.g. Lab. 1, Part 2). - If your code is so bad that you have to single
step through it then consider using the
equivalent of rm . and start again
20Is anything actually happening?
- if (!sounddemo.DoNotProcess())
- ProcessSound(channel1_in, channel2_in,
leftchannel_out,
rightchannel_out, sounddemo) - else
- leftchannel_out channel1_in
rightchannel_out channel2_in -
- By pressing button FLAG1 you can cause the sound
to be passed directly to the audio output without
processing (e.g. Lab. 1 Tutorial 1) - Since the evaluation board has two processors
then you will need to use FLAG1-A or
FLAG1-B depending on which processor your code is
running - Note loading the code, holding FLAG1 down while
the code starts up automatically switches between
LOCAL and CODEC input modes, so you can switch
without having to recompile each time -
21Software radio part of Lab 1Modified main( )
int main () // int source_selection
AUDIO_SOURCE_DEMO int source_selection
INTERNAL_SOFTWARE_RADIO_SO
URCE_DEMO if (source_selection
AUDIO_SOURCE_DEMO) AudioSourceDemo( ) else if
(source_selection
INTERNAL_SOFTWARE_RADIO_SOURCE_DEMO) Interna
lSoftwareRadioSourceDemo( ) else puts
("Unknown source selection") return 0
22Software Radio Demo
while (WaitAMSignal(AMsignal, sounddemo))
if (!sounddemo.DoNotProcess())
ExamineSignal(AMsignal, 0, 4000) // Incoming
signal // Choose which "radio station" you want
to hear // MultiplyByReference(AMsignal,
carrier_frequency0) // ExamineSignal(AMsignal,
0, 4000) // IFstage_low_pass_filter(AMsignal,
filter_coefficients, FILTER_LENGTH) // ExamineSig
nal(AMsignal, 0, 4000) // RectifySignal(channel1
_in, channel2_in, AMsignal) // ExamineSignal(cha
nnel1_in, 0, 4000) // Audio_low_pass_filter(
channel1_in, channel2_in, leftchannel_out, //
rightchannel_out,
filter_coefficients, filter_coefficients,
FILTER_LENGTH) // ExamineSignal(leftchannel_out,
0, 4000) // DCremoval(leftchannel_out,
rightchannel_out) // ExamineSignal(leftchannel_o
ut, 0, 4000)
23Software Radio Demo
while (WaitAMSignal(AMsignal, sounddemo))
if (!sounddemo.DoNotProcess())
// ExamineSignal(AMsignal, 0, 4000) //
Incoming signal // Choose which "radio station"
you want to hear MultiplyByReference(AMsignal,
carrier_frequency0) ExamineSignal(AMsignal,
0, 4000) // IFstage_low_pass_filter(AMsignal,
filter_coefficients, FILTER_LENGTH) // ExamineSig
nal(AMsignal, 0, 4000) // RectifySignal(channel1
_in, channel2_in, AMsignal) // ExamineSignal(cha
nnel1_in, 0, 4000) // Audio_low_pass_filter(
channel1_in, channel2_in, leftchannel_out, //
rightchannel_out,
filter_coefficients, filter_coefficients,
FILTER_LENGTH) // ExamineSignal(leftchannel_out,
0, 4000) // DCremoval(leftchannel_out,
rightchannel_out) // ExamineSignal(leftchannel_o
ut, 0, 4000)
24Software Radio Demo
while (WaitAMSignal(AMsignal, sounddemo))
if (!sounddemo.DoNotProcess())
// ExamineSignal(AMsignal, 0, 4000) //
Incoming signal // Choose which "radio station"
you want to hear MultiplyByReference(AMsignal,
carrier_frequency0) // ExamineSignal(AMsignal,
0, 4000) IFstage_low_pass_filter(AMsignal,
filter_coefficients, FILTER_LENGTH) ExamineSigna
l(AMsignal, 0, 4000) // RectifySignal(channel1_i
n, channel2_in, AMsignal) // ExamineSignal(chann
el1_in, 0, 4000) // Audio_low_pass_filter(ch
annel1_in, channel2_in, leftchannel_out, //
rightchannel_out,
filter_coefficients, filter_coefficients,
FILTER_LENGTH) // ExamineSignal(leftchannel_out,
0, 4000) // DCremoval(leftchannel_out,
rightchannel_out) // ExamineSignal(leftchannel_o
ut, 0, 4000)
25Software Radio Demo
while (WaitAMSignal(AMsignal, sounddemo))
if (!sounddemo.DoNotProcess())
// ExamineSignal(AMsignal, 0, 4000) //
Incoming signal // Choose which "radio station"
you want to hear MultiplyByReference(AMsignal,
carrier_frequency0) // ExamineSignal(AMsignal,
0, 4000) IFstage_low_pass_filter(AMsignal,
filter_coefficients, FILTER_LENGTH) // ExamineSig
nal(AMsignal, 0, 4000) RectifySignal(channel1_i
n, channel2_in, AMsignal) // ExamineSignal(chann
el1_in, 0, 4000) Audio_low_pass_filter(chan
nel1_in, channel2_in, leftchannel_out,
rightchannel_out, filter_coefficients,
filter_coefficients, FILTER_LENGTH) ExamineSigna
l(leftchannel_out, 0, 4000) // DCremoval(left
channel_out, rightchannel_out) // ExamineSignal(
leftchannel_out, 0, 4000)
26Software Radio Demo
while (WaitAMSignal(AMsignal, sounddemo))
if (!sounddemo.DoNotProcess())
// ExamineSignal(AMsignal, 0, 4000) //
Incoming signal // Choose which "radio station"
you want to hear MultiplyByReference(AMsignal,
carrier_frequency0) // ExamineSignal(AMsignal,
0, 4000) IFstage_low_pass_filter(AMsignal,
filter_coefficients, FILTER_LENGTH) // ExamineSig
nal(AMsignal, 0, 4000) RectifySignal(channel1_i
n, channel2_in, AMsignal) // ExamineSignal(chann
el1_in, 0, 4000) Audio_low_pass_filter(chan
nel1_in, channel2_in, leftchannel_out,
rightchannel_out, filter_coefficients,
filter_coefficients, FILTER_LENGTH) // ExamineSig
nal(leftchannel_out, 0, 4000) DCremoval(left
channel_out, rightchannel_out) ExamineSignal(le
ftchannel_out, 0, 4000)
27Concepts tackled
- Differences between processor and evaluation
board - Functionality present of TigerSHARC evaluation
board - Accessing the A2D and D2A in an easy way needed
for all Labs.