Presentation is loading. Please wait.

Presentation is loading. Please wait.

Over-view of Lab. 1 See the Lab. 1 web-site and latter lecture notes for more details.

Similar presentations


Presentation on theme: "Over-view of Lab. 1 See the Lab. 1 web-site and latter lecture notes for more details."— Presentation transcript:

1 Over-view of Lab. 1 See the Lab. 1 web-site and latter lecture notes for more details

2 Radio controlled – voice activated robotic car “term” project Set-up the processor to control the board A/D and D/A; allows capture and play-back sound. Set-up the processor so that we can read general purpose input lines (GPIO -- switches) so we send various different commands. Use the digital signal processing (DSP) part of Blackfin processor to run canned (meaning written by somebody else) frequency analysis program to recognize voice commands Use the analysis of the sounds to output control values to a radio transmitter and control the car. 2 /17

3 3 /17 Main Code – pseudo code for the “voice controlled car” main( ) { // red – means canned – green means done in Lab. 1 Launch the Analog Devices audio “echo” program – a background interrupt-driven task that is given to you – you will modify this code InitFlashASM( ); // Activate the system Flash memory without // stopping audio program which uses the Flash interface too // This enables you to write to the LED’s InitializePFInterfaceASM( ); // Activate the Push-button controller // This enables you to read switches SW1, SW2, SW3, SW4 Launch “VDK multi-threads” (separate processes) to control various processes // The VDK O/S is provided as part of the VDSP IDE Thread 1 – Store batches of sound for analysis Thread 2 – Analyze previous stored sound for “commands” Thread 3 – Use previous commands to send commands to control the car Thread 4 – Check evaluation buttons for “options” Thread 5 etc

4 4 /17 Another possible project using the same code ideas We want to build a audio controller  Audio in captured using audio A/D (CODEC)  Audio out generated using audio D/A (CODEC)  Manipulate the sound quality  Push buttons to control audio controller operations – e.g. graphics equalizer  LED lights to display operation results and sound volume level (dancing lights)

5 5 /17 Main Code – pseudo code for the “audio controller” main( ) { Launch the Analog Devices audio “echo” program – a background interrupt-driven task that is given to you – you will modify this code InitFlashASM( ); // Activate the system Flash memory without stopping // the audio program which uses the Flash interface too InitializePFInterfaceASM( ); // Activate the Push-button controller Wait for button1 to be pressed and released (ReadButtonASM() ), then play the sound at half-volume. Wait for button2 to be pressed and released, play the sound at normal volume When button3 is pressed -- Generate the extremely fascinating (but completely useless) dancing lights which change with the audio stream volume level Wait for button4 to be pressed and released, quit the program (turn off the sound and stop the processor) }

6 6 /17 If we wanted to get fancy we could do the following to the Talkthrough program Gargling operation Need to add a simple counter that increments by 1 every 1/44000 s (each time that an audio sample is obtained) Use the counter to turn the sound off and on every ½ s Gargling sound is produced rather than just “turning the sound off” For more details – see Lab. 1 from 2006.

7 7 /17 Lab. 1 – Key project interfacing Microcontroller I/O demonstration Your group must come into the laboratory class prepared to be able to demonstrate all of the following by the end of class period  You will make use of some of the code developed during the assignments. (Note assignments may be due AFTER the laboratory) Initialize the push-button controller interface  Read, and use, a value provided by the push-button controller. Initialize the Flash LED display interface (so that it works)  Write a value to the LED display  Read, and use, a value stored in the LED display, so you can test that you are getting the correct answer  Demonstrate tests to show that these operations work as required OPTIONAL “ENCM511 Project club” Each laboratory will provide you with enough interface information to get a component of the voice-activated radio control car to work. Extra hours of work will needed to write and test the necessary C++ code to make the interfaces operate correctly – but that can be split amongst those interested.

8 8 /17 Lab. Task – Does my ADSP-BF533 board work? Download audio-talk-through program If you have not already done so, download and expand ENCM511Directory2008.zip file (used in assignment 1) so that you have the correct directory. structure and test driven development environment needed for Laboratory 1. ENCM511Directory2008.zip Download and expand the files in 08CPP_Talkthrough.zip into your AudioDemo directory.08CPP_Talkthrough.zip Build an AudioDemo Blackfin project in your AudioDemo directory and add the (provided) files into the project -- 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 AudioDemo.dxe executable and check that the talk through program is working. This task demonstrated your ability to build VDSP Blackfin projects and run the code. The AudioDemo code (running in a multithread environment) forms the basis of the (optional) voice-activate radio-controlled car project.

9 Tasks of Laboratory 1 Basic Task – develop the LED interface  Initialize the Flash memory using the Blackfin external bus interface unit (EBIU) (ASM)  Initialize the Flash memory controller of the Blackfin Evaluation Board LED’s (ASM) Task (mainly in C++) that use the LED interface  Develop a simple counter (in C++) and display value  Write a C++ routine to write morse code values into an array  Write a routine to transfer the morse code values to the LED’s (first in C++, then ASM) homepage.ntlworld.com/dmitrismirnov/morse-tab1.JPG 9 /17

10 10 /17 Task – Initialize the Programmable flag interface – 16 GPIO 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 internal registers in the Blackfin processor core.  Other processors need equivalent GPIO control methods Most important registers  FIO_DIR – Data DIRection – 0 for input ****  FIO_INEN – INterface ENable  FIO_FLAG_D – Programmable FLAG Data register

11 11 /17 Why do you need to know how to do read (load) and write (store) on internal registers? Flag Direction register (FIO_DIR)  Used to determine if the PF bit is to be used for input or output -- WARNING SMOKE POSSIBLE ISSUE  USE equivalent of AND instruction from ENCM369 to clear bits PF11 to PF8 to 0 for input, leave all other bits unchanged in values.

12 12 /17 Registers used to control PF pins Flag Input Enable Register  Only activate the pins you want to use (saves power in telecommunications situation)  USE OR instruction from ENCM369 to enable (activate) pins PF11 to PF8 for input, leave all other bits in register unchanged

13 13 /17 Registers used to control PF pins Flag Data register (FIO_FLAG_D)  Used to read the PF bits (1 or 0)  Need to read pins PF11 to PF8, ignore all other pins values. This requires AND and SHIFT instructions from ENCM369.

14 14 /17 Task – Setting up the programmable flag interface Follow the instructions carefully  FIO_DIR – direction register – write 0’s to bits 8, 9, 10, 11 – leave other bits unchanged (READ/AND/WRITE operations)  FIO_INEN – input enable register – write 1’s to bits 8, 9, 10, 11 – leave other bits unchanged (READ/OR/WRITE operations)  Other GPIO registers write 0’s to bits 8, 9, 10, 11 – leave other bits unchanged (READ/AND/WRITE operations) There is a test program that will enable you to check your code – provide a screen dump of test result.

15 15 /17 Task – Read the switches on the front panel Transfer the information to the LEDs so you can demonstrate correct operations Build Initialize_ProgrammableFlagsASM ( )  MUST HAVE 50 pin cable connected between logic board and Blackfin for the switch values to be read correctly – otherwise always reads “1”  Logic board power supply must be turned on (or will read 1 always) What we could do – “Simple optical transmitter”  Place a “light sensitive detector” in front of the LED on a “second” station.  Use the output of the detector as the input instead of the switch  Capture the light code signals  Print out the “morse” code transmissions on the screen of the “first” station – very basic optical transmission

16 16 /17 #include.global _ReadGPIOFlags; _ReadGPIOFlags: // Make an address register “point” to // the GPIO Flag register to read switches P1.L = lo (FIO_FLAG_D); P1.H = hi (FIO_FLAG_D); // Read the “16” bit flag register value and return // the value for the C++ code to use R0 = W[P1] (Z); // convert 16 to 32 bits _ReadGPIOFlags.END: RTS; Must use W [ ] read since the manual shows that FIO_FLAG_D register is 16-bits Must use W[P1] (Z) zero-extend as this adds 16 zeros to the 16 bits from FIO_FLAG_D register to make 32-bits to place into R0 extern “C” int ReadGPIOFlags( )

17 Using that assembly code from C++ extern “C” int ReadGPIOFlags( ); int ReadPushButtonSwitches(void) { InitializeGPIORegisters( ); // Lab. 1 int GPIOFlagValues = ReadGPIOFlags( ); // Must happen AFTER Init( ) int maskToRemoveUnwantedBits = 0x0F00; // Review of ENCM369 – AND operation & and NOT && int wantedGPIOFlagValues = GPIOFlagValues & maskToRemoveUnwantedBits; return (wantedGPIOFlagValues >> 8); } Returns 1 if switch 1 pressed, returns 2 if switch 2 pressed, Returns 4 if switch 3 pressed, returns 8 if switch 4 pressed, Returns 5 if switch 1 and switch 3 are pressed at the same time 17 /17 SW4 SW2 SW3 SW1

18 Controlling a radio controlled car A L F R Switch 2 pressed means go forward for 1/ 2 s Switch 1 means turn right Switch 3 means turn left Switch 4 means accept command Thus pressing switches 2, 2, 1 with 2, 2, 2, 3 with 2, 2, 2, 0, 0, 0, 0 Would cause the car to go down an “S” 18 /17

19 Store the commands to control a car #define STOP 0 int storeCommands[20]; int numberStopCommands = 0; int count = 0; while (numberStopCommands < 4) { command = GetValidCommand( ); if (command == STOP) { numberStopCommands ++; } else { numberStopCommands = 0; } storeCommands[count++] = command; } 19 /17

20 Get a valid command to control a car #define SWITCH4 0x8 #define ACCEPTCOMMAND SWITCH4 int GetValidCommand( ) { int command = ReadPushButtonSwitches( ); while ( (command & ACCEPTCOMMAND) != ACCEPTCOMMAND} { command = ReadPushButtonSwitches( ); } // Get here when somebody pushes switch 4 // Explain why it is a logical error if we just exit this code here return command; } 20 /17

21 21 /21 Task -- Tests There will be software tests (E-TDD) to allow you to demonstrate that your code works correctly Note there are test executables (.dxe) available to test out your equipment  This code can be used to test the switches and the LED interface on your board. SwitchToLED.dxeSwitchToLED.dxe  This is the final version of my code for the “fancy” audio controller DrSmithAudioController.dxeDrSmithAudioController.dxe


Download ppt "Over-view of Lab. 1 See the Lab. 1 web-site and latter lecture notes for more details."

Similar presentations


Ads by Google