Thermal arm-wrestling

Slides:



Advertisements
Similar presentations
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.
Advertisements

Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Lab 3 Details. Lab 3 Develop a bio-feedback system based on a PWM (pulse width modulated) thermal sensor Use temperature setting to control the delays.
6/2/2015 Labs in ENCM415. Laboratory 2 PF control, Copyright M. Smith, ECE, University of Calgary, Canada 1 Temperature Sensor Laboratory 2 Part 2 – Developing.
Thermal arm-wrestling Design of a video game using two programmable flags (PF) interrupts Tutorial on handling 2 Hardware interrupts from an external device.
Building a simple loop using Blackfin assembly code M. Smith, Electrical and Computer Engineering, University of Calgary, Canada.
Specialized Video (8-bit) and Vector (16-bit) Instructions on the Blackfin There is always a “MAKE-UP-YOUR-QUESTION-AND-ANSWER-IT” Question on a Dr. Smith.
Developing a bicycle speed-o-meter Part 2 A comparison between the Analog Devices ADSP-BF533 (Blackfin) and Motorola MC68332.
Lab. 2 – More details – Tasks 4 to 6 1. What concepts are you expected to understand after the Lab. 2 is finished? 2. How do you demonstrate that you have.
Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Core Timer Code Development How you could have done the Take- Home Quiz using a test driven development (TDD) approach.
Specialized Video (8-bit) and Vector (16-bit) Instructions on the Blackfin Expand on these ideas for Q9 question and answer on the final.
LCD programming Design and implementation details on the way to a valid SPI-LCD interface driver.
A look at interrupts What are interrupts and why are they needed in an embedded system? Equally as important – how are these ideas handled on the Blackfin.
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.
Timers and Timing Signals Tutorial. 6/18/2015 Timer Control Copyright M. Smith, ECE, University of Calgary, Canada 2 / 31 Temperature Sensor -- Lab 3.
Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Laboratory 1 – ENCM415 Familiarization with the Analog Devices’ VisualDSP++ Integrated Development Environment.
Microprocessor or Microcontroller Not just a case of “you say tomarto and I say tomayto” M. Smith, ECE University of Calgary, Canada.
Developing a bicycle speed-o-meter Midterm Review.
Peripherals and their Control An overview of industrially available “peripheral devices” that use “pulse-width modulation” for information passing. Review.
A Play Core Timer Interrupts Acted by the Human Microcontroller Ensemble from ENCM511.
Lab. 2 Overview Move the tasks you developed in Lab. 1 into the more controllable TTCOS operating system Manual control of RC car.
Moving Arrays -- 1 Completion of ideas needed for a general and complete program Final concepts needed for Final Review for Final – Loop efficiency.
Blackfin Array Handling Part 1 Making an array of Zeros void MakeZeroASM(int foo[ ], int N);
Multi-threaded projects Services and Drivers Alternate ways of doing Labs 1, 2, 3 and 4.
Handling multiple input signals Version #2 – co-operative scheduler Version #3 – pre-emptive scheduler.
Building a simple loop using Blackfin assembly code If you can handle the while-loop correctly in assembly code on any processor, then most of the other.
Lab. 1 – GPIO Pin control Using information ENEL353 and ENCM369 text books combined with Blackfin DATA manual.
A Play Core Timer Interrupts Acted by the Human Microcontroller Ensemble from ENCM415.
“Lab. 5” – Updating Lab. 3 to use DMA Test we understand DMA by using some simple memory to memory DMA Make life more interesting, since hardware is involved,
Developing Tasks to use with a co-operative scheduler Ideas for Assignment 2 Lab. 2, 3 and 4 Review for Midterm on Lab. 2 Ideas of defects, errors and.
Developing a bicycle speed-o-meter
Moving Arrays -- 1 Completion of ideas needed for a general and complete program Final concepts needed for Final Review for Final – Loop efficiency.
A Play Core Timer Interrupts
SPI Compatible Devices
DMA example Video image manipulation
The planned and expected
Handling Arrays Completion of ideas needed for a general and complete program Final concepts needed for Final.
Lab. 2 – More details – Later tasks
Moving Arrays -- 1 Completion of ideas needed for a general and complete program Final concepts needed for Final Review for Final – Loop efficiency.
Moving Arrays -- 2 Completion of ideas needed for a general and complete program Final concepts needed for Final DMA.
Thermal arm-wrestling
Using Arrays Completion of ideas needed for a general and complete program Final concepts needed for Final.
A Play Lab. 2 Task 8 Core Timer Interrupts
Moving Arrays -- 2 Completion of ideas needed for a general and complete program Final concepts needed for Final DMA.
Handling Arrays Completion of ideas needed for a general and complete program Final concepts needed for Final.
Expand on these ideas for Q9 question and answer on the final
General purpose timers
Thermal arm-wrestling
Concept of TDD Test Driven Development
Explaining issues with DCremoval( )
Lab. 1 – GPIO Pin control Using information ENEL353 and ENCM369 text books combined with Blackfin DATA manual.
Independent timers build into the processor Basis for Lab. 2
Input Laboratory: GPIO Pin control needed to have the Blackfin accept your commands Re-uses information from ENEL353 and ENCM369 courses and text books.
Handling Arrays Completion of ideas needed for a general and complete program Final concepts needed for Final.
DMA example Video image manipulation
Developing a bicycle speed-o-meter
Blackfin Timers Independent timers build into the processor
Independent timers build into the processor
Developing a bicycle speed-o-meter
Lab. 2 Overview Move the tasks you developed in Lab. 1 into the more controllable TTCOS operating system.
Developing a bicycle speed-o-meter
Thermal arm-wrestling
Building a simple loop using Blackfin assembly code
Developing a bicycle speed-o-meter Part 2
Mistakes, Errors and Defects
Developing a reliable communication between Blackfin and Slave device
Post Lab Quiz 3 Review Assignment 2 Help
Presentation transcript:

Thermal arm-wrestling Design of a video game using two programmable flags (PF) interrupts Hardware interrupts

Problem to be solved Customer game concept I WIN YOU WIN Has two sensors and a ready signal At the ready signal – the two players have to use bio-feedback to move the cursor into the winning area Three play modes One person player – moves the cursor with one sensor One person player – controls the cursor with two sensors sort of EXO-Sketch mode Game mode – two players Sensor reading is determined by the difference in temperature NOW compared to the temperature at the ready signal 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Customer game plan Player1_TemperatureNow, and Player1_TemperatureStart Ditto player 2 While not started { Determine Player1 Temperature, Player2 temperature Update Game Screen with start information } Cursor is centered – update Game screen While nobody has won { Determine Player1 Temperature, Player2 temperature Determine Player1, player2 difference in temperature if player1 difference larger then cursor- - else cursor ++ Update Game screen Determine if somebody has won } Display winning message 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Concept Use TDD approach Main task – calculating / updating cursor and display 2nd task -- 1 sensor on PF10 – 33 Hz signal – need to measure periods of high and low signal to determine temperature. 3rd task -- Second sensor on PF11. Long term goal -- average of 30 values every second. That’s 2 seconds of processing every second if done by normal programming Possible solution – use the PF signals to generate interrupts on high/low and low/high transitions and read core time value. Use the core timer values to determine a temperature Discussed and tested in this class – handling the two PF signals which both cause the SAME interrupt signal 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Redesigned Tests needed Show we can link thermal test code to main( ) Show CoreTimer and LED functions are still working. Show we can handle a single PF interrupt (software interrupt) Show we can use a single PF interrupt to calculate a temperature. Show how we can set up the PF11 interrupt in hardware Do same thing for other PF10 interrupt Handle two PF interrupts at the same time to calculate temperature Demo full solution using LED display to show cursor movement – but code so that can upgrade to more lights or LCD screen when becomes available. Show we can store a series of time readings in an array DONE FOR SOFTWARE INTERRUPTS Demo simplified final version Show we can calculate the temperature from timer reading array – calculate average of 30 on each sensor 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

1 -- Build test to show we can link to new project from main( ) Attempt to track down the reason for Tests being run when not planned int Connect_ThermalVideoGameTests(int level); static bool valid_test_request = false; static int wanted_test_level = 0; int Connect_ThermalVideoGameTests(int level) { valid_test_request = true; wanted_test_level = level; } 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

2 -- Build test to show Core Timer and LED functions are still working Activate the Core Timer test code from before Activate LED test code from before (Lab. 2). Show only failed tests // Run all the required tests Connect_ClassTimerDemo(0xFF); Connect_ThermalVideoGameTests(0x0); Connect_instructortestsLED_Lab2Part1(0xFF); 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Issues when developing interrupt driven code All of the following must work for your code to work Main task Interrupt task Setting up the interrupt hardware registers Connecting to external events that cause interrupts All are interlinked – making it difficult to determine what part of the code (a DEFECT) is causing the problem One approach is to first test the main task with “software interrupts” so that the “uncontrollable” external event becomes a “controllable” internal event – “raise(ik_ivg12)” from <signal.h> 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

3 – Test for handling a single PF interrupt using a software interrupt test Similar to Core timer Interrupt Syntax “raise( )” forces a software interrupt of type ik_ivg12 (PF) Will need to worry about hardware setup later 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

4 – Fixing the Test code error 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

4B Calculate a temperature test Fake the down-up-down of temperature Sensor Long times to make loop more accurate Expected accuracy issues Had to print 0ut values to check 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

5 – Need to handle the “true PF registers” to generate a hardware interrupt Functions needed unsigned long int SetPFInterruptsASM( ??) Returns old interrupt settings Set new settings void StartPFInterruptsASM(???) void StopPFSettingsASM(???) Hardware information Chapter 14 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

PF registers Direction, Data, Polarity and Enable all from Lab. 2 Flag Mask registers – 14-11 Flag mask Interrupt data register – basically which PF pins have been set to allow to cause interrupt Flag mask Interrupt Set register – sets PF pin that is allowed to cause an interrupt, without the need for a read – or mask – write operation Flag Mask Interrupt Clear register – which PF pin is no longer allowed to cause an interrupt without the need for a read – and mask – write operation Flag interrupt Sensitivity register (FIO_EDGE) – set for edge-sensitive – also need FIO_BOTH 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

5 – Need to handle the “true PF registers” to generate a hardware interrupt unsigned long int SetPFInterruptsASM ( ushort whichPFinterrupts) Returns old interrupt settings Sets PF pins can cause edge sensitive interrupts Plan ahead -- May want to set both PF10 and PF11 interrupts later void StartPFInterruptsASM(void) already exists as register_handler(ik_ivg12, PFInterruptHandler); void StopPFSettingsASM(ushort whichPFinterrupts) Lets just stop all IVG12 interrupts When PF11 interrupt occurs – the PF11 bit in the data register (FIO_FLAG_D) is set – this must be cleared using FIO_FLAG_C (clear data register). This clears the bit without the need to do a read – and mask – write operation. 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

6 – Build a test to show that write the needed code (in ASM) to set up the PF interrupts Registers described in Chapter 14 Stop all interrupts for the moment – CLI instruction Need to set FIO_MASKA_D bits 1 Write only needed if “set” using FIO_MASK_S register Need to set FIO_POLAR for active rising edge – Lab 2 code 1 read – then mask – then 1 write Need to set FIO_INEN (R – mask – W) Need to set FIO_DIR (R – mask – W) Need to clear FIO_FLAG_D so that don’t think interrupt already happened (1W if use FIO_FLAG_C register approach)) Need to set FIO_EDGE and FIO_BOTH (2R – mask 2W) Restart interrupts – STI instruction – but with PF interrupt stopped Possibility that missing stuff since first time tried this 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

6B – Need to build a test to show that can stop interrupts Need to clear FIO_MASKA_D register bits Single write operation if use special FIO_MASKA_C bit Possibility that missing stuff since first time tried this 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

First Test for Set up PF interrupts 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Write code to satisfy tests Run the tests – complete system hang Test Level 1 Never returns 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Need to do code review After fixing the error – get this result Check code – need to return old interrupt level FIO_MASKA_D – that requires a read that I had not designed in – change the test 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Move onto setting FIO_FLAG registers 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Check Ability to turn off PF interrupts 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Test for interrupts using switches PF interrupts active NOTHING HAPPENING SYSTEM IS HUNG 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Turns out – missing stuff in set up IMASK -- Page 4-33 Global register – allows IVG12 interrupts to occur SIC_IMASK – Page 4-28 System interrupt mask – especially for peripheral devices Enabling PF Interrupt A during SetUpPFInterrupts( ) fixed the problem of getting INTO interrupts – but the function never came out BECAUSE Bit 11 of FIO_FLAG_D MUST BE CLEARED inside interrupt service routine – clearing the interrupt bit!!!!!! 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Some other interesting things uncovered during Testing I wanted to do the same test as during Software Interrupt test At each interrupt – place core timer values into an array Read through the slides yourself 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

9 -- Build test to show we store time values into an array Array “not in Blackfin memory” 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

9 -- Look under local variables window shows things on C++ stack Values look like they counting up rather than counting down Also only went around loop 5 times not 2 * 5 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Something should change 9 -- Fixed loop size, incremented COUNT / PERIOD, incremented UseFixedTimeASM( ) Something should change Still the same 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

9 -- Improve the test – initial array = 0; Prototype long int Need ulong Timer Values not zero 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

9 -- Suspicion – switch to debug mode works !!!! 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

9 -- Back to release mode DEAD CODE REMOVED NO ARRAY HANDLING 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

9 -- Need to “ScareCompiler” to use array 2 WRITE 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

10A -- Build test to show we can calculate the temperature from the timer array 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

10A – Code for splitting the array 4 errors made 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

10B – CalculateAverage( ) and CalculateTemperature( ) – Tests and code 1 syntax 2 typos 1 logical 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada

Information taken from Analog Devices On-line Manuals with permission http://www.analog.com/processors/resources/technicalLibrary/manuals/ Information furnished by Analog Devices is believed to be accurate and reliable. However, Analog Devices assumes no responsibility for its use or for any infringement of any patent other rights of any third party which may result from its use. No license is granted by implication or otherwise under any patent or patent right of Analog Devices. Copyright  Analog Devices, Inc. All rights reserved. 12/1/2018 Thermal Arm Wrestling, Copyright M. Smith, ECE, University of Calgary, Canada