DCS_TEAM / Mbed 2 deprecated Chemical_Sensor_DMA

Dependencies:   mbed

Dependents:   DCS_FINAL_CODE

Fork of Chemical_Sensor_DMA by Jared Baxter

Committer:
baxterja
Date:
Thu Oct 29 17:15:20 2015 +0000
Revision:
2:3771b3195c7b
Accessible Sample folder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
baxterja 2:3771b3195c7b 1 #include "quad.h"
baxterja 2:3771b3195c7b 2
baxterja 2:3771b3195c7b 3 void quad_init() {
baxterja 2:3771b3195c7b 4
baxterja 2:3771b3195c7b 5 // Enable clock for FTM2
baxterja 2:3771b3195c7b 6 SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK; // there are two of them for some reason
baxterja 2:3771b3195c7b 7 SIM_SCGC6 |= SIM_SCGC6_FTM2_MASK; //
baxterja 2:3771b3195c7b 8
baxterja 2:3771b3195c7b 9 // Enable clock for PortB
baxterja 2:3771b3195c7b 10 SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;
baxterja 2:3771b3195c7b 11
baxterja 2:3771b3195c7b 12 //enable the counter
baxterja 2:3771b3195c7b 13 FTM2_MODE |= FTM_MODE_WPDIS_MASK; // unlock write protection on certain FTM bits and registers
baxterja 2:3771b3195c7b 14 FTM2_MODE |= FTM_MODE_FTMEN_MASK;
baxterja 2:3771b3195c7b 15
baxterja 2:3771b3195c7b 16 //enable the counter to run in the BDM mode
baxterja 2:3771b3195c7b 17 FTM2_CONF |= FTM_CONF_BDMMODE(3);
baxterja 2:3771b3195c7b 18
baxterja 2:3771b3195c7b 19 //load the Modulo register and counter initial value
baxterja 2:3771b3195c7b 20 FTM2_MOD = 4095;
baxterja 2:3771b3195c7b 21 FTM2_CNTIN = 0;
baxterja 2:3771b3195c7b 22
baxterja 2:3771b3195c7b 23 //configuring FTM for quadrature mode
baxterja 2:3771b3195c7b 24 FTM2_QDCTRL = 0;
baxterja 2:3771b3195c7b 25 FTM2_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; // enable Quadrature decoding
baxterja 2:3771b3195c7b 26 FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; // select phase A and phase B decoding mode (this is what the angle encoder uses)
baxterja 2:3771b3195c7b 27 FTM2_QDCTRL |= FTM_QDCTRL_PHAPOL_MASK; // change direction of counting by changing the phase of input A (for some reason QUADIR wouldn't work)
baxterja 2:3771b3195c7b 28
baxterja 2:3771b3195c7b 29
baxterja 2:3771b3195c7b 30 // start the timer clock, source is the external clock
baxterja 2:3771b3195c7b 31 FTM2_SC |= FTM_SC_CLKS(3);
baxterja 2:3771b3195c7b 32
baxterja 2:3771b3195c7b 33 //configuring the input pins:
baxterja 2:3771b3195c7b 34 PORTB_PCR18 = PORT_PCR_MUX(6); // FTM2_QD_PHA (PTB18) ALT6
baxterja 2:3771b3195c7b 35 PORTB_PCR19 = PORT_PCR_MUX(6); // FTM2_QD_PHB (PTB19) ALT6
baxterja 2:3771b3195c7b 36
baxterja 2:3771b3195c7b 37 // Enable write protection
baxterja 2:3771b3195c7b 38 FTM2_MODE |= FTM_MODE_WPDIS_MASK; // Lock write protection on certain FTM bits and registers
baxterja 2:3771b3195c7b 39
baxterja 2:3771b3195c7b 40 }
baxterja 2:3771b3195c7b 41
baxterja 2:3771b3195c7b 42 int32_t quad_read() {
baxterja 2:3771b3195c7b 43 int angle = FTM2_CNT;
baxterja 2:3771b3195c7b 44 if(angle > 2048) angle -= 4096;
baxterja 2:3771b3195c7b 45 return angle; // this is the register with the counter in it.
baxterja 2:3771b3195c7b 46 }
baxterja 2:3771b3195c7b 47
baxterja 2:3771b3195c7b 48 void quad_update(int value) {
baxterja 2:3771b3195c7b 49 if(value < 0) value = value + 4096; // convert back to raw form (both absolute angle and relative angle are actually integers between 0-4095)
baxterja 2:3771b3195c7b 50 FTM2_CNTIN = value; // change reset value to desired value
baxterja 2:3771b3195c7b 51 FTM2_CNT = 0; // writing anything to FTM_CNT loads FTM2_CNTIN into FTM_CNT;
baxterja 2:3771b3195c7b 52 FTM2_CNTIN = 0; // change reset value back to 0
baxterja 2:3771b3195c7b 53 }
baxterja 2:3771b3195c7b 54
baxterja 2:3771b3195c7b 55 void quad_invert(){
baxterja 2:3771b3195c7b 56 FTM2_QDCTRL &= ~FTM_QDCTRL_PHAPOL_MASK; // change direction of counting by changing the phase of input A
baxterja 2:3771b3195c7b 57 }