Custom version for NXP cup car

Dependents:   NXPCUPcar

Fork of FRDM-TFC by Eli Hughes

Committer:
Clarkk
Date:
Thu Jun 01 13:16:37 2017 +0000
Revision:
9:0c6d78c56091
Parent:
3:23cce037011f
Few changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emh203 1:6f37253dab87 1
emh203 1:6f37253dab87 2 #include "mbed.h"
emh203 1:6f37253dab87 3
emh203 1:6f37253dab87 4 /** @file test.h*/
emh203 1:6f37253dab87 5
emh203 1:6f37253dab87 6 /**
emh203 1:6f37253dab87 7 * @defgroup FRDM-TFC_API FRDM-TFC_API
emh203 1:6f37253dab87 8 *
emh203 1:6f37253dab87 9 * @{
emh203 1:6f37253dab87 10 */
emh203 1:6f37253dab87 11
emh203 1:6f37253dab87 12
emh203 1:6f37253dab87 13 /**
emh203 1:6f37253dab87 14
emh203 1:6f37253dab87 15 @addtogroup FRDM-TFC_API
emh203 1:6f37253dab87 16
emh203 1:6f37253dab87 17 @{
emh203 1:6f37253dab87 18
emh203 1:6f37253dab87 19 Resources used by the TFC Library\n
emh203 1:6f37253dab87 20
emh203 1:6f37253dab87 21 I/O:\n
emh203 1:6f37253dab87 22 -------------------------------------------------------------------------------------------------\n
emh203 1:6f37253dab87 23
emh203 1:6f37253dab87 24 PTB0 (Servo Channel 0 - TPM1)\n
emh203 1:6f37253dab87 25 PTB1 (Servo Channel 1 - TPM1)\n
emh203 1:6f37253dab87 26 \n
emh203 1:6f37253dab87 27 PTB8 (Battery LED0)\n
emh203 1:6f37253dab87 28 PTB9 (Battery LED1)\n
emh203 1:6f37253dab87 29 PTB10 (Battery LED2)\n
emh203 1:6f37253dab87 30 PTB11 (Battery LED3)\n
emh203 1:6f37253dab87 31 \n
emh203 1:6f37253dab87 32 PTD7 (Camera SI)\n
emh203 1:6f37253dab87 33 PTE0 (Camera CLK)\n
emh203 1:6f37253dab87 34 PTD5 (Camera A0 - ADC_SE6b)\n
emh203 1:6f37253dab87 35 PTD6 (Camera A1 - ADC_SE7b)\n
emh203 1:6f37253dab87 36 \n
emh203 1:6f37253dab87 37 PTE2 DIP Switch 0\n
emh203 1:6f37253dab87 38 PTE3 DIP Switch 1\n
emh203 1:6f37253dab87 39 PTE4 DIP Switch 2\n
emh203 1:6f37253dab87 40 PTE5 DIP Switch 3\n
emh203 1:6f37253dab87 41
emh203 1:6f37253dab87 42 PTC13 Pushbutton SW1\n
emh203 1:6f37253dab87 43 PTC17 Pushbutton SW2\n
emh203 1:6f37253dab87 44
emh203 1:6f37253dab87 45 PTC3 H-Bridge A - 1 FTM0_CH3\n
emh203 1:6f37253dab87 46 PTC4 H-Bridge A - 2 FTM0_CH4\n
emh203 1:6f37253dab87 47 PTC1 H-Bridge B - 1 FTM0_CH1\n
emh203 1:6f37253dab87 48 PTC2 H-Bridge B - 2 FTM0_CH2\n
emh203 1:6f37253dab87 49
emh203 1:6f37253dab87 50 PTE21 H-Bridge Enable\n
emh203 1:6f37253dab87 51 PTE20 H-Bridge Fault\n
emh203 1:6f37253dab87 52
emh203 1:6f37253dab87 53 PTE23 H-Bridge A - IFB\n
emh203 1:6f37253dab87 54 PTE22 H-Bridge B - IFB\n
emh203 1:6f37253dab87 55
emh203 1:6f37253dab87 56 }
emh203 1:6f37253dab87 57 */
emh203 1:6f37253dab87 58
emh203 1:6f37253dab87 59
emh203 1:6f37253dab87 60
emh203 1:6f37253dab87 61 #ifndef _TFC_H
emh203 1:6f37253dab87 62 #define _TFC_H
emh203 1:6f37253dab87 63
emh203 1:6f37253dab87 64 #define TFC_HBRIDGE_EN_LOC (uint32_t)(1<<21)
emh203 1:6f37253dab87 65 #define TFC_HBRIDGE_FAULT_LOC (uint32_t)(1<<20)
emh203 1:6f37253dab87 66
emh203 1:6f37253dab87 67 #define TFC_HBRIDGE_ENABLE PTE->PSOR = TFC_HBRIDGE_EN_LOC
emh203 1:6f37253dab87 68 #define TFC_HBRIDGE_DISABLE PTE->PCOR = TFC_HBRIDGE_EN_LOC
emh203 1:6f37253dab87 69
emh203 1:6f37253dab87 70 #define TFC_DIP_SWITCH0_LOC ((uint32_t)(1<<2))
emh203 1:6f37253dab87 71 #define TFC_DIP_SWITCH1_LOC ((uint32_t)(1<<3))
emh203 1:6f37253dab87 72 #define TFC_DIP_SWITCH2_LOC ((uint32_t)(1<<4))
emh203 1:6f37253dab87 73 #define TFC_DIP_SWITCH3_LOC ((uint32_t)(1<<5))
emh203 1:6f37253dab87 74
emh203 1:6f37253dab87 75 #define TFC_PUSH_BUTT0N0_LOC ((uint32_t)(1<<13))
emh203 1:6f37253dab87 76 #define TFC_PUSH_BUTT0N1_LOC ((uint32_t)(1<<17))
emh203 1:6f37253dab87 77
emh203 1:6f37253dab87 78 #define TFC_BAT_LED0_LOC ((uint32_t)(1<<11))
emh203 1:6f37253dab87 79 #define TFC_BAT_LED1_LOC ((uint32_t)(1<<10))
emh203 1:6f37253dab87 80 #define TFC_BAT_LED2_LOC ((uint32_t)(1<<9))
emh203 1:6f37253dab87 81 #define TFC_BAT_LED3_LOC ((uint32_t)(1<<8))
emh203 1:6f37253dab87 82
emh203 1:6f37253dab87 83 #define TAOS_CLK_HIGH PTE->PSOR = (1<<1)
emh203 1:6f37253dab87 84 #define TAOS_CLK_LOW PTE->PCOR = (1<<1)
emh203 1:6f37253dab87 85 #define TAOS_SI_HIGH PTD->PSOR = (1<<7)
emh203 1:6f37253dab87 86 #define TAOS_SI_LOW PTD->PCOR = (1<<7)
emh203 1:6f37253dab87 87
Clarkk 9:0c6d78c56091 88 #define ADC_MASK_CAPTURE_POT_0 1
Clarkk 9:0c6d78c56091 89 #define ADC_MASK_CAPTURE_POT_1 2
Clarkk 9:0c6d78c56091 90 #define ADC_MASK_CAPTURE_BATTERY_LEVEL 4
Clarkk 9:0c6d78c56091 91 #define ADC_MASK_CAPTURE_MOTOR_CURRENT 8
Clarkk 9:0c6d78c56091 92 #define ADC_MASK_CAPTURE_LINE_SCAN 16
Clarkk 9:0c6d78c56091 93 #define ADC_MASK_CAPTURE_ALL 31
emh203 1:6f37253dab87 94
emh203 1:6f37253dab87 95 /**
emh203 1:6f37253dab87 96
emh203 1:6f37253dab87 97 @addtogroup FRDM-TFC_API
emh203 1:6f37253dab87 98 @{
emh203 1:6f37253dab87 99 */
emh203 1:6f37253dab87 100
emh203 1:6f37253dab87 101 /**Macro to turn on LED 0 in the battery indicator array*/
emh203 1:6f37253dab87 102 #define TFC_BAT_LED0_ON PTB->PSOR = TFC_BAT_LED0_LOC
emh203 1:6f37253dab87 103 /** Macro to turn on LED 1 in the battery indicator array*/
emh203 1:6f37253dab87 104 #define TFC_BAT_LED1_ON PTB->PSOR = TFC_BAT_LED1_LOC
emh203 1:6f37253dab87 105 /** Macro to turn on LED 2 in the battery indicator array*/
emh203 1:6f37253dab87 106 #define TFC_BAT_LED2_ON PTB->PSOR = TFC_BAT_LED2_LOC
emh203 1:6f37253dab87 107 /** Macro to turn on LED 3 in the battery indicator array*/
emh203 1:6f37253dab87 108 #define TFC_BAT_LED3_ON PTB->PSOR = TFC_BAT_LED3_LOC
emh203 1:6f37253dab87 109
emh203 1:6f37253dab87 110
emh203 1:6f37253dab87 111 /** Macro to turn off LED 0 in the battery indicator array*/
emh203 1:6f37253dab87 112 #define TFC_BAT_LED0_OFF PTB->PCOR = TFC_BAT_LED0_LOC
emh203 1:6f37253dab87 113 /** Macro to turn off LED 1 in the battery indicator array*/
emh203 1:6f37253dab87 114 #define TFC_BAT_LED1_OFF PTB->PCOR = TFC_BAT_LED1_LOC
emh203 1:6f37253dab87 115 /** Macro to turn off LED 2 in the battery indicator array*/
emh203 1:6f37253dab87 116 #define TFC_BAT_LED2_OFF PTB->PCOR = TFC_BAT_LED2_LOC
emh203 1:6f37253dab87 117 /** Macro to turn off LED 3 in the battery indicator array*/
emh203 1:6f37253dab87 118 #define TFC_BAT_LED3_OFF PTB->PCOR = TFC_BAT_LED3_LOC
emh203 1:6f37253dab87 119
emh203 1:6f37253dab87 120
emh203 1:6f37253dab87 121 /** Macro to toggle LED 0 in the battery indicator array*/
emh203 1:6f37253dab87 122 #define TFC_BAT_LED0_TOGGLE PTB->PTOR = TFC_BAT_LED0_LOC
emh203 1:6f37253dab87 123 /** Macro to toggle LED 1 in the battery indicator array*/
emh203 1:6f37253dab87 124 #define TFC_BAT_LED1_TOGGLE PTB->PTOR = TFC_BAT_LED1_LOC
emh203 1:6f37253dab87 125 /** Macro to toggle LED 2 in the battery indicator array*/
emh203 1:6f37253dab87 126 #define TFC_BAT_LED2_TOGGLE PTB->PTOR = TFC_BAT_LED2_LOC
emh203 1:6f37253dab87 127 /** Macro to toggle LED 3 in the battery indicator array*/
emh203 1:6f37253dab87 128 #define TFC_BAT_LED3_TOGGLE PTB->PTOR = TFC_BAT_LED3_LOC
emh203 1:6f37253dab87 129
emh203 1:6f37253dab87 130
emh203 1:6f37253dab87 131 /** Macro to read the state of the pushbutton SW1*/
emh203 1:6f37253dab87 132 #define TFC_PUSH_BUTTON_0_PRESSED ((PTC->PDIR&TFC_PUSH_BUTT0N0_LOC)>0)
emh203 1:6f37253dab87 133 /** Macro to read the state of the pushbutton SW1*/
emh203 1:6f37253dab87 134 #define TFC_PUSH_BUTTON_1_PRESSED ((PTC->PDIR&TFC_PUSH_BUTT0N1_LOC)>0)
emh203 1:6f37253dab87 135
emh203 1:6f37253dab87 136 /** Macro to read the state of switch 0 in the 4 position DIP switch*/
emh203 1:6f37253dab87 137 #define TFC_DIP_SWITCH_0_ON ((TFC_GetDIP_Switch()&0x01)>0)
emh203 1:6f37253dab87 138
emh203 1:6f37253dab87 139 /** Macro to read the state of switch 1 in the 4 position DIP switch*/
emh203 1:6f37253dab87 140 #define TFC_DIP_SWITCH_1_ON ((TFC_GetDIP_Switch()&0x02)>0)
emh203 1:6f37253dab87 141
emh203 1:6f37253dab87 142 /** Macro to read the state of switch 2 in the 4 position DIP switch*/
emh203 1:6f37253dab87 143 #define TFC_DIP_SWITCH_2_ON ((TFC_GetDIP_Switch()&0x04)>0)
emh203 1:6f37253dab87 144
emh203 1:6f37253dab87 145 /** Macro to read the state of switch 3 in the 4 position DIP switch*/
emh203 1:6f37253dab87 146 #define TFC_DIP_SWITCH_3_ON ((TFC_GetDIP_Switch()&0x08)>0)
emh203 1:6f37253dab87 147
emh203 1:6f37253dab87 148
emh203 1:6f37253dab87 149 /** Initialized the TFC API. Call before using any other API calls.
emh203 1:6f37253dab87 150 *
emh203 1:6f37253dab87 151 */
emh203 1:6f37253dab87 152 void TFC_Init();
emh203 1:6f37253dab87 153
emh203 1:6f37253dab87 154 /** ServoTicker will increment once every servo cycle.
emh203 1:6f37253dab87 155 * It can be used to synchronize events to the start of a servo cycle. ServoTicker is a volatile uint32_t and is updated in the TPM1 overlflow interrupt. This means you will see ServoTicker increment on the rising edge of the servo PWM signal
emh203 1:6f37253dab87 156 *
emh203 1:6f37253dab87 157 */
emh203 1:6f37253dab87 158 extern volatile uint32_t TFC_ServoTicker;
emh203 1:6f37253dab87 159
emh203 1:6f37253dab87 160
emh203 1:6f37253dab87 161 /** Gets the state of the 4-positiomn DIP switch on the FRDM-TFC
emh203 1:6f37253dab87 162 *
emh203 1:6f37253dab87 163 * @returns The lower 4-bits of the return value map to the 4-bits of the DIP switch
emh203 1:6f37253dab87 164 */
emh203 1:6f37253dab87 165 uint8_t TFC_GetDIP_Switch();
emh203 1:6f37253dab87 166
emh203 1:6f37253dab87 167
emh203 1:6f37253dab87 168 /** Reads the state of the pushbuttons (SW1, SW2) on the FRDM-TFC
emh203 1:6f37253dab87 169 * @param Index Selects the pushbutton (0 for SW1 and 1 for SW2)
emh203 1:6f37253dab87 170 * @returns A non-zero value if the button is pushed
emh203 1:6f37253dab87 171 */
emh203 1:6f37253dab87 172 uint8_t TFC_ReadPushButton(uint8_t Index);
emh203 1:6f37253dab87 173
emh203 1:6f37253dab87 174
emh203 1:6f37253dab87 175 /** Controls the 4 battery level LEDs on the FRDM-TFC boards.
emh203 1:6f37253dab87 176 *
emh203 1:6f37253dab87 177 * @param Value The lower 4-bits of the parameter maps to the 4 LEDs.
emh203 1:6f37253dab87 178 */
emh203 1:6f37253dab87 179 void TFC_SetBatteryLED(uint8_t Value);
emh203 1:6f37253dab87 180
emh203 1:6f37253dab87 181
emh203 1:6f37253dab87 182 /** Sets the servo channels
emh203 1:6f37253dab87 183 *
emh203 1:6f37253dab87 184 * @param ServoNumber Which servo channel on the FRDM-TFC to use (0 or 1). 0 is the default channel for steering
emh203 1:6f37253dab87 185 * @param Position Angle setting for servo in a normalized (-1.0 to 1.0) form. The range of the servo can be changed with the InitServos function.
emh203 1:6f37253dab87 186 * This is called in the TFC constructor with some useful default values--> 20mSec period, 0.5mS min and 2.0mSec max. you may need to adjust these for your own particular setup.
emh203 1:6f37253dab87 187 */
emh203 1:6f37253dab87 188 void TFC_SetServo(uint8_t ServoNumber, float Position);
emh203 1:6f37253dab87 189
emh203 1:6f37253dab87 190 /** Initializes TPM for the servoes. It also sets the max and min ranges
emh203 1:6f37253dab87 191 *
emh203 1:6f37253dab87 192 * @param ServoPulseWidthMin Minimum pulse width (in seconds) for the servo. The value of -1.0 in SetServo is mapped to this pulse width. I.E. .001
emh203 1:6f37253dab87 193 * @param ServoPulseWidthMax Maximum pulse width (in seconds) for the servo. The value of +1.0 in SetServo is mapped to this pulse width. I.E. .002
emh203 1:6f37253dab87 194 * @param ServoPeriod Period of the servo pulses (in seconds). I.e. .020 for 20mSec
emh203 1:6f37253dab87 195 */
emh203 1:6f37253dab87 196
emh203 1:6f37253dab87 197 void TFC_InitServos(float ServoPulseWidthMin, float ServoPulseWidthMax, float ServoPeriod);
emh203 1:6f37253dab87 198
emh203 1:6f37253dab87 199
emh203 1:6f37253dab87 200 /** Initialized TPM0 to be used for generating PWM signals for the the dual drive motors. This method is called in the TFC constructor with a default value of 4000.0Hz
emh203 1:6f37253dab87 201 *
emh203 1:6f37253dab87 202 * @param SwitchingFrequency PWM Switching Frequency in floating point format. Pick something between 1000 and 9000. Maybe you can modulate it and make a tune.
emh203 1:6f37253dab87 203 */
emh203 1:6f37253dab87 204 void TFC_InitMotorPWM(float SwitchingFrequency);
emh203 1:6f37253dab87 205
emh203 1:6f37253dab87 206 /** Sets the PWM value for each motor.
emh203 1:6f37253dab87 207 *
emh203 1:6f37253dab87 208 * @param MotorA The PWM value for HBridgeA. The value is normalized to the floating point range of -1.0 to +1.0. -1.0 is 0% (Full Reverse on the H-Bridge) and 1.0 is 100% (Full Forward on the H-Bridge)
emh203 1:6f37253dab87 209 * @param MotorB The PWM value for HBridgeB. The value is normalized to the floating point range of -1.0 to +1.0. -1.0 is 0% (Full Reverse on the H-Bridge) and 1.0 is 100% (Full Forward on the H-Bridge)
emh203 1:6f37253dab87 210 */
emh203 1:6f37253dab87 211 void TFC_SetMotorPWM(float MotorA ,float MotorB);
emh203 1:6f37253dab87 212
emh203 1:6f37253dab87 213 /** Reads the potentiometers
emh203 1:6f37253dab87 214 *
emh203 1:6f37253dab87 215 * @param Channel Selects which pot is read. I.e. 0 for POT0 or 1 for POT1
emh203 1:6f37253dab87 216 * @returns Pot value from -1.0 to 1.0
emh203 1:6f37253dab87 217 */
emh203 1:6f37253dab87 218 float TFC_ReadPot(uint8_t Channel);
emh203 1:6f37253dab87 219
Clarkk 9:0c6d78c56091 220
Clarkk 9:0c6d78c56091 221 uint16_t TFC_ReadBatteryVoltageRaw();
Clarkk 9:0c6d78c56091 222 uint16_t TFC_ReadMotACurrentRaw();
Clarkk 9:0c6d78c56091 223 uint16_t TFC_ReadMotBCurrentRaw();
Clarkk 9:0c6d78c56091 224
Clarkk 9:0c6d78c56091 225
emh203 1:6f37253dab87 226 /** Gets the current battery voltage
emh203 1:6f37253dab87 227 *
emh203 1:6f37253dab87 228 * @returns Battery voltage in floating point form.
emh203 1:6f37253dab87 229 */
emh203 1:6f37253dab87 230 float TFC_ReadBatteryVoltage();
emh203 1:6f37253dab87 231
Clarkk 9:0c6d78c56091 232 /** Gets motor A current
Clarkk 9:0c6d78c56091 233 *
Clarkk 9:0c6d78c56091 234 * @returns Current value in amps in floating point form.
Clarkk 9:0c6d78c56091 235 */
Clarkk 9:0c6d78c56091 236 float TFC_ReadMotACurrent();
emh203 1:6f37253dab87 237
Clarkk 9:0c6d78c56091 238 /** Gets motor B current
Clarkk 9:0c6d78c56091 239 *
Clarkk 9:0c6d78c56091 240 * @returns Current value in amps in floating point form.
Clarkk 9:0c6d78c56091 241 */
Clarkk 9:0c6d78c56091 242 float TFC_ReadMotBCurrent();
emh203 3:23cce037011f 243
emh203 3:23cce037011f 244 /** Sets the Battery level indiciate
emh203 3:23cce037011f 245 *
emh203 3:23cce037011f 246 * @param BattLevel A number betwween 0 and 4. This will light the bar from left to right with the specifified number of segments.
emh203 3:23cce037011f 247 *
emh203 3:23cce037011f 248 */
emh203 3:23cce037011f 249 void TFC_SetBatteryLED_Level(uint8_t BattLevel);
emh203 3:23cce037011f 250
Clarkk 9:0c6d78c56091 251 /** Stop camera exposure
Clarkk 9:0c6d78c56091 252 *
Clarkk 9:0c6d78c56091 253 */
Clarkk 9:0c6d78c56091 254 void TFC_StopCameraExposure();
Clarkk 9:0c6d78c56091 255
Clarkk 9:0c6d78c56091 256 /** Start ADC convertion of all analog inputs
Clarkk 9:0c6d78c56091 257 *
Clarkk 9:0c6d78c56091 258 * @param mask The mask of convertions to perform
Clarkk 9:0c6d78c56091 259 */
Clarkk 9:0c6d78c56091 260 void TFC_StartDataAcquisition(uint8_t mask);
emh203 3:23cce037011f 261
emh203 1:6f37253dab87 262 /** Pointer to two channels of line scan camera data. Each channel is 128 points of uint8_t's. Note that the underlying implementation is ping-pong buffer These pointers will point to the
emh203 1:6f37253dab87 263 *inactive buffer.
emh203 1:6f37253dab87 264 *
emh203 1:6f37253dab87 265 */
emh203 1:6f37253dab87 266
emh203 3:23cce037011f 267 extern volatile uint16_t * TFC_LineScanImage0;
emh203 3:23cce037011f 268 extern volatile uint16_t * TFC_LineScanImage1;
emh203 3:23cce037011f 269
emh203 1:6f37253dab87 270
emh203 1:6f37253dab87 271 /** This flag will increment when a new frame is ready. Check for a non zero value (and reset to zero!) when you want to read the camera(s)
emh203 1:6f37253dab87 272 *
emh203 1:6f37253dab87 273 */
emh203 1:6f37253dab87 274
emh203 3:23cce037011f 275 extern volatile uint8_t TFC_LineScanImageReady;
Clarkk 9:0c6d78c56091 276 extern volatile uint8_t TFC_Pot0Ready;
Clarkk 9:0c6d78c56091 277 extern volatile uint8_t TFC_Pot1Ready;
Clarkk 9:0c6d78c56091 278 extern volatile uint8_t TFC_BatteryVoltageReady;
Clarkk 9:0c6d78c56091 279 extern volatile uint8_t TFC_MotorCurrentReady;
emh203 3:23cce037011f 280
Clarkk 9:0c6d78c56091 281 extern FunctionPointer TFC_ConvertionReadyCallback;
emh203 1:6f37253dab87 282
emh203 1:6f37253dab87 283 /** @} */
emh203 1:6f37253dab87 284
emh203 1:6f37253dab87 285
emh203 1:6f37253dab87 286 #endif