Template for LPC1768

Dependencies:   Gimbal MLX90620 Socket lwip-eth lwip-sys lwip mbed-rtos mbed

Fork of EkkoEye by EkkoSense

Committer:
gardnmc
Date:
Thu Apr 14 13:02:29 2016 +0000
Revision:
54:aaf6b5ceedd8
Parent:
53:72f350a6d09c
libs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike 53:72f350a6d09c 1 /*
Mike 53:72f350a6d09c 2 * CoreISR.cpp
Mike 53:72f350a6d09c 3 *
Mike 53:72f350a6d09c 4 * Created on: 12 Mar 2016
Mike 53:72f350a6d09c 5 * Author: mike
Mike 53:72f350a6d09c 6 */
Mike 53:72f350a6d09c 7 #include "mbed.h"
Mike 53:72f350a6d09c 8 #include "CGimbal.h"
Mike 53:72f350a6d09c 9 #include "base.h"
Mike 53:72f350a6d09c 10
Mike 53:72f350a6d09c 11
Mike 53:72f350a6d09c 12 extern int mgTick;
Mike 53:72f350a6d09c 13 extern CGimbal * pGimbal;
Mike 53:72f350a6d09c 14 extern DigitalIn xHome;
Mike 53:72f350a6d09c 15 extern DigitalIn yHome;
Mike 53:72f350a6d09c 16 extern Serial pc;
Mike 53:72f350a6d09c 17
Mike 53:72f350a6d09c 18
Mike 53:72f350a6d09c 19
Mike 53:72f350a6d09c 20 /*
Mike 53:72f350a6d09c 21 * Core Stepper Timer, called every 20 us
Mike 53:72f350a6d09c 22 */
Mike 53:72f350a6d09c 23 void Pulse()
Mike 53:72f350a6d09c 24 {
Mike 53:72f350a6d09c 25
Mike 53:72f350a6d09c 26 mgTick++;
Mike 53:72f350a6d09c 27
Mike 53:72f350a6d09c 28 // If m_TickCount (every 20us) has incremented to the defined step interval (1000us) then action may need to be taken
Mike 53:72f350a6d09c 29 if (pGimbal->m_TickCount > pGimbal->m_StepInterval)
Mike 53:72f350a6d09c 30 {
Mike 53:72f350a6d09c 31 if (pGimbal->m_TickCount & 0x01) // First (rising) edge of the pulse
Mike 53:72f350a6d09c 32 {
Mike 53:72f350a6d09c 33 if (pGimbal->m_xPulses) // Still need to move along x?
Mike 53:72f350a6d09c 34 {
Mike 53:72f350a6d09c 35 if (xHome) // Are we clear of the x Limit switch?
Mike 53:72f350a6d09c 36 {
Mike 53:72f350a6d09c 37 pGimbal->m_pXStepPin->write(1);
Mike 53:72f350a6d09c 38 }
Mike 53:72f350a6d09c 39 }
Mike 53:72f350a6d09c 40 if (pGimbal->m_yPulses) // Still need to move along y?
Mike 53:72f350a6d09c 41 {
Mike 53:72f350a6d09c 42 if (yHome) // Are we clear of the y Limit switch?
Mike 53:72f350a6d09c 43 {
Mike 53:72f350a6d09c 44 pGimbal->m_pYStepPin->write(1);
Mike 53:72f350a6d09c 45 }
Mike 53:72f350a6d09c 46 }
Mike 53:72f350a6d09c 47 pGimbal->m_TickCount++;
Mike 53:72f350a6d09c 48 }
Mike 53:72f350a6d09c 49 else
Mike 53:72f350a6d09c 50 { // Second (falling) edge of the pulse
Mike 53:72f350a6d09c 51 if (pGimbal->m_xPulses)
Mike 53:72f350a6d09c 52 {
Mike 53:72f350a6d09c 53 // This x pulse has been completed
Mike 53:72f350a6d09c 54 pGimbal->m_pXStepPin->write(0);
Mike 53:72f350a6d09c 55 pGimbal->m_xPulses --;
Mike 53:72f350a6d09c 56 }
Mike 53:72f350a6d09c 57 if (pGimbal->m_yPulses)
Mike 53:72f350a6d09c 58 {
Mike 53:72f350a6d09c 59 // This y pulse has been completed
Mike 53:72f350a6d09c 60 pGimbal->m_pYStepPin->write(0);
Mike 53:72f350a6d09c 61 pGimbal->m_yPulses --;
Mike 53:72f350a6d09c 62 }
Mike 53:72f350a6d09c 63 // Regardless of whether only x or only y falling edge was actioned, the window is now closed
Mike 53:72f350a6d09c 64 pGimbal->m_TickCount=0;
Mike 53:72f350a6d09c 65 }
Mike 53:72f350a6d09c 66 }
Mike 53:72f350a6d09c 67 else
Mike 53:72f350a6d09c 68 {
Mike 53:72f350a6d09c 69 pGimbal->m_TickCount++;
Mike 53:72f350a6d09c 70 }
Mike 53:72f350a6d09c 71
Mike 53:72f350a6d09c 72 }
Mike 53:72f350a6d09c 73