Presentation is loading. Please wait.

Presentation is loading. Please wait.

Thermal arm-wrestling

Similar presentations


Presentation on theme: "Thermal arm-wrestling"— Presentation transcript:

1 Thermal arm-wrestling
Design of a video game using two programmable flags (PF) interrupts Testing using “software interrupts”

2 To be tackled today Customer requirements for a video game
Need to tackle 4 tasks at the same time – can’t afford to wait for one task to complete – must do all tasks at the same time Have certain tasks generate interrupts when they occur; rather than waiting for them to occur 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

3 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 – moves the cursor with the other sensor Game mode – two players Sensor reading is determined by the difference in the temperature NOW being sensed compared to the average temperature during the time just before the ready signal 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

4 Customer game plan Declare variables Player1_TemperatureNow
Player1_TemperatureStart Ditto player 2 While not started { Determine Player1 Temperature, Player2 temperature Set start temperatures 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 decrement cursor OTHERWISE cursor ++ Update Game screen Determine if somebody has won } Display winning message 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

5 Issues Need to continually calculate and update cursor on the display screen Need to update Display Simple Display – 5 LED lights + game underway LED LCD screen (get credit during Lab. 5) Need to measure 2 temperatures at the same time. Possibly 60 averages every second – frequency of temperature sensors is 33 Hz – 2 seconds of processing needed every 1 second if use WaitTillHigh( ) and WaitTillLow( ) function call approach MINIMUM requirements for Lab. 4 – show that you can handle each component of the game, even if the complete game is not provided. 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

6 Concept for a possible solution
Use TDD approach Main task – calculating / updating cursor and display 2nd task -- 1 sensor on PF11 – 33 Hz signal – need to measure periods of high and low signal to determine temperature. 3rd task -- Second sensor on PF10. 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 values into array. Use the core timer values to determine a temperature Discussed and tested in the next lecture class – handling the two PF signals which both cause the SAME interrupt signal 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

7 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. Do same thing for other PF interrupt Handle two PF interrupts at the same time to calculate temperature Show how we can set up the PF interrupts in hardware 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 Show we can calculate the temperature from timer reading array – calculate average of 30 on each sensor Demo final version 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

8 1 -- Build test to show we can link to new project from main( )
If using your own tests, then you may need to change include paths 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; } 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

9 1 -- Build “code” to pass the test
// Run all the required tests Connect_ThermalVideoGameTests(0x0); 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

10 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); 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

11 Issues when developing interrupt driven code
All of the following must be working for your code to work Main task Interrupt task Setting up the interrupt hardware registers Connecting up the system to external events that cause interrupts All are interlinked – making it difficult to determine what part of the code (a DEFECT) is causing a problem. Need an approach to test each component separately 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

12 Solution Software interrupt – which turns the signal coming from an external event into a signal that comes from an internal event. The internal event occurs exactly when you want it to -- rather than randomly as would happen with an external event. Later, when everything is working, connect to the hardware and test that component. PF interrupts occur via an “IVG12” core event – see hardware manual Table 4.6 Visual DSP++ help information – cause a software interrupt that produces the same internal interrupt signal as does the outside PF signals #include <signal.h> raise(ik_ivg12); The raise signal causes interrupt IVG12 to occur Question that needs answering after a “raise( )” of a software interrupt, do you have to do a “lower( )” to stop the software interrupt from continually happening? 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

13 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 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

14 Question that needed answering
After a “raise( )” of a software interrupt, do you have to do a “lower( )” to stop the software interrupt from continually happening? Attempted test to get the answer We should get just one interrupt each time around the loop if “raise( )” is cleared automatically We will get 10 interrupts with zero times around the loop if “raise( )” must be followed by lower( ) 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

15 3 -- Build test to show we can handle single PF interrupt
Same syntax as for Core timer Interrupt Actually same routine – Different names WRITE YOUR OWN CODE AROUND 5 lines Bring in the code and compare to expected solution Will have to repeat this test with the PF hardware set-up for causing interrupt 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

16 Need to simulate the time period of a Temperature Sensor input signal
HIGH LOW Generate (“raise”) software interrupts at time intervals separated by different calls to UseFixedTimeASM( ) 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

17 Errors in test !!!! Do a code review -- can you spot them?
4 -- Concept – use PF interrupt to read Core Timer Values and place in array Errors in test !!!! Do a code review -- can you spot them? 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

18 4 -- Write the code to pass the test
WRITE YOUR OWN CODE AROUND 5 lines Bring in the code and compare to expected solution 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

19 4 – Fixing the Test code error
1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

20 4B “Calculate a temperature” test
Fake the times when the up-down-up signals of temperature sensor occur Long times to make loop more accurate Expected accuracy issues Had to print out values to check YELLOW FLAG TEST TYPE – CLOSE ENOUGH BUT NEEDS MORE INVESTIGATING 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

21 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 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

22 PF registers Direction, Data, Polarity and Enable all from Lab. 2
Flag Mask registers – 14-11 Flag mask Interrupt data register – basically which PF pin caused the interrupt Flag mask Interrupt Set register – which PF pin is allowed to cause an interrupt Flag Mask Interrupt Clear register– which PF pin is no longer allowed to cause an interrupt Flag interrupt Sensitivity register (FIO_EDGE) – set for edge-sensitive Possible other system interrupt registers Global interrupt masks Peripheral interrupt masks 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

23 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 void StartPFInterruptsASM(void) already exists as register_handler(ik_ivg12, PFInterruptHandler); void StopPFSettingsASM(void) Lets just stop all interrupts When PF11 interrupt occurs – the PF11 bit in the PF data register (FIO_FLAG_D) is set – this must be cleared using FIO_FLAG_C (clear data register) Useful hint perhaps -- When PF10 interrupt occurs does the PF11 bit in the PF data register (FIO_FLAG_D) get set – so we can tell which interrupt occurred? 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

24 Tackled today Customer requirements for a video game
Need to tackle 4 tasks at the same time – can’t afford to wait for one task to complete – must do all tasks at the same time Used the core timer to measure accurate values of temperature sensor high and low times Used software interrupts (“raising an interrupt”) to simulate interrupt signals coming from the temperature sensor (PF interrupts – IVG12) Next step – understanding how to control the hardware interrupts 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada

25 Information taken from Analog Devices On-line Manuals with permission 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. 1/11/2019 Thermal Arm Wrestling -- Software PF interrupts, Copyright M. Smith, ECE, University of Calgary, Canada


Download ppt "Thermal arm-wrestling"

Similar presentations


Ads by Google