Lab1Task5to7

advertisement
Over-view of Lab. 1
For more details – see the Lab. 1 web-site
There will be a 20 min prelab quiz (based on
Assignment 1 and 2) at the start of the lab. session
Print out the Lab. 1 web-pages for use as
reference during the lab. period
There will be a short 15-minute in-class
quiz at the start of the lab. period – don’t
be late
Quiz will be based on knowledge
demonstrated during assignments 1 and
2
2 /17
Tasks to be tackled









Test the provided C++ program to move audio signals
in and out of the processor
10% -- Convert the ProcessDataCPP( )code into
assembly code
15% -- Initialize the programmable flag interface
10% -- Get the mute sound operation to work (SW1)
15% -- Get the gargle sound operation to work (SW2)
15% -- Get the dancing lights function to work (C++
and provided code)
15% -- Get the volume control to work (Hard -- you
might want to leave out -- still get A- on lab)
20% -- Documented code hand in
Bonus marks available
3 /17
Task 1
Download audio-talk-through program
 If you have not already done so, download and expand
ENCM415Directory.zip file so that you have the correct directory.
structure and test driven development environment needed for
Laboratory 1.
 Download and expand the files in CPP_Talkthrough.zip into your
Lab1 directory.
 Add the CPP_Talkthrough project in your Lab. 1 directory to the
VisualDSP environment -- compile and link.
 Download the executable (.dxe) file onto the BF533 processor.
 Hook up your CD or IPOD output to the CJ2 stereo input.
 Hook up your ear-phones to the CJ3 stereo output.
 Run the CPP_Talkthrough.dxe executable and check that the talk
through program is working.
4 /17
Task 2 -- Convert ProcessDataCPP( ) to
ProcessDataASM () – Assign. 2 Q3
 In talkthrough.h. add a prototype for your assembly code function
Process_DataASM;
 In ISR.cpp change to
// call function that contains user code
#if 0
Process_DataCPP(); // Use the C++ version
#else
Process_DataASM(); // C assembly code routines especially developed
for Lab. 1
#endif
 Right-click on ProcessDataCPP.cpp entry. Use "FILE OPTIONS“ to exclude
linking
 Use PROJECT | clean project
 Add your ProcessDataASM.asm file to the project, recompile and link.
Check that your code works
 More details on the Lab. 1 web pages
5 /17
Set up for Tasks 1 and Task 2
AUDIO-IN
AUDIO-OUT
6 /17
How we are building the volume controller
SWITCHES ON FRONT PANEL
LED LIGHTS ON FRONT PANEL
PROGRAMMABLE FLAGS
LED-CONTROLREGISTER
FIO_FLAG_D Register
EBIU INTERFACE
int ReadSwitches( )
void WriteLED(int )
YOUR PROGRAM RUNNING ON THE BLACKFIN
ProcessDataASM( ) subroutine
IPOD
CD
A/D
A/D D/A Interrupt routine
D/A
EAR
PHONES
7 /17
Special “power-connector” for Blackfin
interface on logic lab. station
8 /17
Special “power-connector” for Blackfin
interface on logic lab. station
9 /17
Connect 50-pin cable to Blackfin
10 /17
Connect 50-pin cable to logic lab
 Make sure that
all 50-pin
connections are
secure and
proper.
 Power up the
logic lab.
station and
check that is
working
11 /17
Task 3 – Initialize the Programmable flag
interface – 16 I/O lines on the Blackfin
 Warning – could burn out the Blackfin processor if
done incorrectly
 You need to set (store a known value to) a number
of Blackfin internal registers
 Most important ones
 FIO_DIR – Data DIRection – 0 for input ****
 FIO_INEN – INterface ENable
 FIO_FLAG_D – Programmable FLAG Data register
12 /17
Task 4 – Read the switches on the front
pannel
 Final laboratory requirements
 SW1 connected to PF8 -- Mute button (This task)
 SW2 connected to PF9 -- Gargle button (Task 5)
 SW3 connected to PF10 -- Volume up (Task 7)
 SW4 connected to PF11 -- Volume down (Task 7)
 Build Initialize_ProgrammableFlagsASM ( )
 Modify main( ) and ProcessDataASM( ) so that MUTE-operation
works
 MUST HAVE 50 pin cable connected between logic board and
Blackfin
 Logic board power supply must be turned on
13 /17
Task 5 – Gargling operation
 Need to add a simple counter that increments by
1 every 1/44000 s
 Code is essentially Assignment 2 Q2
 Use the counter to turn the sound off and on
every ½ s
 Gargling sound is produced.
 You need to have a signed demo sheet from a
2nd or 4th year student. Bonus if not from
department
14 /17
Gargle and Mute
int main( ) {
InitializeSwitchInterface( );
InitializeLEDInterface( );
#define SWITCHBITS 0x0F00
// Check Lab. 1 for “exact name needed”
// Looking in MIPs notes about
//
using a mask and the
//
AND bit-wise operation
//
to select “desired bits”
while (1) {
// Forever loop
int switch_value = ReadProgrammableFlagsASM( );
// if switch 1 is on – set volatile mute_on = 1;
//
other wise set mute_on = 0;
// if switch 2 is on – set volatile cause_gargle = 1;
//
other wise set cause_gargle = 0
}
15 /17
Example from Assignment 2 Help
Task 4 code --- mute button
File “interruptservice.cpp”
extern volatile boolean mute_on;
void Process_DataASM(void);
void Process_DataASM(void) {
if (mute_on = = FALSE)
MakeTheSound( );
}
EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
…….. /// Lots of good stuff
Process_DataASM( );
// Make the sound occur
…….. // Lots of more good stuff;
}
16 /17
WORRY ABOUT WHAT EX_INTERRUPT_HANDLER( ) MEANS IN LAB. 2
Task 5 code -- Gargle
File “interruptservice.cpp”
extern volatile boolean mute_on;
extern volatile boolean cause_gargle;
extern volatile int gargle_on;
void Process_DataASM(void);
void Process_DataASM(void) {
if (mute_on = = FALSE)
if (gargle_on == 0)
MakeTheSound( );
}
EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
…….. /// Lots of good stuff
Some how we want to do the following
Process_DataASM( );
// Make the sound occur
…….. // Lots of more good stuff;
}
Is cause_gargle is true – no sound for ½ s
and then sound for ½ s
Do this by changing gargle_on from 1 to 0
to 1 at ½ s intervals?
How?
17 /17
WORRY ABOUT WHAT EX_INTERRUPT_HANDLER( ) MEANS IN LAB. 2
Profound Procrastination Programming
File “interruptservice.cpp”
File “interruptservice.cpp”
extern volatile boolean mute_on;
extern volatile boolean cause_gargle;
extern volatile int gargle_on;
void Process_DataASM(void);
extern volatile boolean mute_on;
extern volatile boolean cause_gargle;
extern volatile int gargle_on;
void Process_DataASM(void);
EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
…….. /// Lots of good stuff
EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
…….. /// Lots of good stuff
Process_DataASM( );
// Make the sound occur
if (cause_gargle == TRUE)
TurnGargleOnThenOff( )
else gargle_on = 0;
…….. // Lots of more good stuff;
Process_DataASM( );
// Make the sound occur
}
…….. // Lots of more good stuff;
}
18 /17
WORRY ABOUT WHAT EX_INTERRUPT_HANDLER( ) MEANS IN LAB. 2
Profound Procrastination Programming
This interrupt routine is executed every
1 / 44000 s
For 22000 of those times we want
gargle_on
For the next 220 of those times we want
the gargle off
File “interruptservice.cpp”
extern volatile boolean mute_on;
extern volatile boolean cause_gargle;
extern volatile int gargle_on;
void Process_DataASM(void);
EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
…….. /// Lots of good stuff
So we develop a counter
if (cause_gargle == TRUE)
TurnGargleOnThenOff( )
else gargle_on = 0;
Process_DataASM( );
// Make the sound occur
…….. // Lots of more good stuff;
}
19 /17
WORRY ABOUT WHAT EX_INTERRUPT_HANDLER( ) MEANS IN LAB. 2
Profound Procrastination Programming
extern volatile int gargle_on;
void TurnGargleOnThenOff( ) {
static long int count = 0;
count = count + 1;
if (count >= 22000) {
count = 0;
File “interruptservice.cpp”
extern volatile boolean mute_on;
extern volatile boolean cause_gargle;
extern volatile int gargle_on;
void Process_DataASM(void);
EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
…….. /// Lots of good stuff
if (cause_gargle == TRUE)
TurnGargleOnThenOff( )
else gargle_on = 0;
gargle_on = 1 – gargle_on);
}
Process_DataASM( );
// Make the sound occur
}
Check task 5 web-pages to see if
TurnGargleOnThenOff( ) is to be
written in assembly code or in
C++
…….. // Lots of more good stuff;
}
20 /17
WORRY ABOUT WHAT EX_INTERRUPT_HANDLER( ) MEANS IN LAB. 2
Task 6 – LED interface and Dancing
Lights
LED interface setup code provided
Check that you can read switches and
make the values appear on the LED
Then – writing in “C++” code (interfaced to
your assembly code) – display the
amplitude (absolute value) of the sound
21 /17
Solving Lab. 1 Task 6
Dancing lights
Many different ways – you and your
partner work one out
One of the ways is to “call a C++ function”
from inside your assembly code routine
ProcessDataASM( ).
How to do that was handled in Assignment 2
and also provided in detail on the web-pages
22 /17
Task 7 – Volume control
 Writing in C++, develop the final volume control
 Note there are test codes available to test out
your equipment
 This code can be used to test the switches
and the LED interface on your board.
SwitchToLED.dxe
 This is the final version of my code for Lab.
1. DrSmithLab1Final.dxe
23 /17
Information of the marks and what needs
to be handed in
 Hand in at the start of the Thursday tutorial
 Sec. 1 – 6th October
 Sec. 2 – 13th October (Same day as planned prelab. 2 quiz)
 Note Lab.1
 Section 1 is first session – Sept 26th
 Section 2 is second session – Oct. 3rd
 THERE ARE NO LABS ON THE MONDAY OF
THANKSGIVING
 Note Lab. 2
 Section 2 is first session – Oct. 17th
 Section 1 is second session – Oct 24th
24 /17
Tasks to be tackled









Test the provided C++ program to move audio signals
in and out of the processor
10% -- Convert the ProcessDataCPP( )code into
assembly code
15% -- Initialize the programmable flag interface
10% -- Get the mute sound operation to work (SW1)
15% -- Get the gargle sound operation to work (SW2)
15% -- Get the dancing lights function to work (C++
and provided code)
15% -- Get the volume control to work (Hard -- you
might want to leave out -- still get A- on lab)
20% -- Documented code hand in
Bonus marks available
25 /17
What is currently planned for Lab. 2?
Develop a digital thermometer using LED
and print out to display the temperature
Use the digital thermometer as remote
control sensor to control the volume of
sound (from Lab. 1)
26 /17
Download