more formatting fixes, commenting, and added static to the ISR helpers
diff --git a/gyro_board/src/usb/analog.c b/gyro_board/src/usb/analog.c
index c328189..cbbee63 100644
--- a/gyro_board/src/usb/analog.c
+++ b/gyro_board/src/usb/analog.c
@@ -7,13 +7,15 @@
// ****************************************************************************
#include "FreeRTOS.h"
-/* Scheduler includes. */
-#include "FreeRTOS.h"
#include "queue.h"
#include "task.h"
#include "analog.h"
+// How long (in ms) to wait after a falling edge on the bottom indexer sensor
+// before reading the indexer encoder.
+static const int kBottomFallDelayTime = 32;
+
void analog_init(void) {
// b[1:0] CAN RD1 p0.0
// b[3:2] CAN TD1 p0.1
@@ -79,7 +81,7 @@
// DIP1 P2.13
// DIP2 P0.11
// DIP3 P0.10
-#define readGPIO(gpio,chan) ((((gpio)->FIOPIN) >> (chan)) & 1)
+#define readGPIO(gpio, chan) ((((gpio)->FIOPIN) >> (chan)) & 1)
inline int readGPIO_inline(int major, int minor) {
switch (major) {
case 0:
@@ -97,10 +99,10 @@
return -1;
} else if (channel < 7) {
int chan = channel + 3;
- return readGPIO(GPIO0,chan);
+ return readGPIO(GPIO0, chan);
} else if (channel < 13) {
int chan = channel - 7;
- return readGPIO(GPIO2,chan);
+ return readGPIO(GPIO2, chan);
}
return -1;
}
@@ -116,19 +118,18 @@
return readGPIO(GPIO0, 10);
default:
return -1;
-
}
}
-//ENC0A 1.20
-//ENC0B 1.23
-//ENC1A 2.11
-//ENC1B 2.12
-//ENC2A 0.21
-//ENC2B 0.22
-//ENC3A 0.19
-//ENC3B 0.20
+// ENC0A 1.20
+// ENC0B 1.23
+// ENC1A 2.11
+// ENC1B 2.12
+// ENC2A 0.21
+// ENC2B 0.22
+// ENC3A 0.19
+// ENC3B 0.20
-#define ENC(gpio,a,b) readGPIO(gpio,a) * 2 + readGPIO(gpio,b)
+#define ENC(gpio, a, b) readGPIO(gpio, a) * 2 + readGPIO(gpio, b)
int encoder_bits(int channel) {
switch (channel) {
case 0:
@@ -146,7 +147,7 @@
}
#undef ENC
-// Uses 2 EINT1 and EINT2 on 2.11 and 2.12.
+// Uses EINT1 and EINT2 on 2.11 and 2.12.
volatile int32_t encoder1_val;
// On GPIO pins 0.22 and 0.21.
volatile int32_t encoder2_val;
@@ -158,8 +159,10 @@
volatile int32_t encoder5_val;
// ENC1A 2.11
-void EINT1_IRQHandler(void) {
+static void EINT1_IRQHandler(void) {
SC->EXTINT = 0x2;
+ // TODO(brians): figure out whether this style or the style in all the rest
+ // generates nicer code and then make them all the same
int stored_val = encoder1_val;
int fiopin = GPIO2->FIOPIN;
if (((fiopin >> 1) ^ fiopin) & 0x800) {
@@ -171,7 +174,7 @@
SC->EXTPOLAR ^= 0x2;
}
// ENC1B 2.12
-void EINT2_IRQHandler(void) {
+static void EINT2_IRQHandler(void) {
SC->EXTINT = 0x4;
int stored_val = encoder1_val;
int fiopin = GPIO2->FIOPIN;
@@ -185,8 +188,8 @@
}
// GPIO Interrupt handlers
-void NoGPIO() {}
-void Encoder2ARise() {
+static void NoGPIO() {}
+static void Encoder2ARise() {
GPIOINT->IO0IntClr |= (1 << 22);
if (GPIO0->FIOPIN & (1 << 21)) {
++encoder2_val;
@@ -194,7 +197,7 @@
--encoder2_val;
}
}
-void Encoder2AFall() {
+static void Encoder2AFall() {
GPIOINT->IO0IntClr |= (1 << 22);
if (GPIO0->FIOPIN & (1 << 21)) {
--encoder2_val;
@@ -202,7 +205,7 @@
++encoder2_val;
}
}
-void Encoder2BRise() {
+static void Encoder2BRise() {
GPIOINT->IO0IntClr |= (1 << 21);
if (GPIO0->FIOPIN & (1 << 22)) {
--encoder2_val;
@@ -210,7 +213,7 @@
++encoder2_val;
}
}
-void Encoder2BFall() {
+static void Encoder2BFall() {
GPIOINT->IO0IntClr |= (1 << 21);
if (GPIO0->FIOPIN & (1 << 22)) {
++encoder2_val;
@@ -219,7 +222,7 @@
}
}
-void Encoder3ARise() {
+static void Encoder3ARise() {
GPIOINT->IO0IntClr |= (1 << 20);
if (GPIO0->FIOPIN & (1 << 19)) {
++encoder3_val;
@@ -227,7 +230,7 @@
--encoder3_val;
}
}
-void Encoder3AFall() {
+static void Encoder3AFall() {
GPIOINT->IO0IntClr |= (1 << 20);
if (GPIO0->FIOPIN & (1 << 19)) {
--encoder3_val;
@@ -235,7 +238,7 @@
++encoder3_val;
}
}
-void Encoder3BRise() {
+static void Encoder3BRise() {
GPIOINT->IO0IntClr |= (1 << 19);
if (GPIO0->FIOPIN & (1 << 20)) {
--encoder3_val;
@@ -243,7 +246,7 @@
++encoder3_val;
}
}
-void Encoder3BFall() {
+static void Encoder3BFall() {
GPIOINT->IO0IntClr |= (1 << 19);
if (GPIO0->FIOPIN & (1 << 20)) {
++encoder3_val;
@@ -252,7 +255,7 @@
}
}
-void Encoder4ARise() {
+static void Encoder4ARise() {
GPIOINT->IO2IntClr |= (1 << 0);
if (GPIO2->FIOPIN & (1 << 1)) {
++encoder4_val;
@@ -260,7 +263,7 @@
--encoder4_val;
}
}
-void Encoder4AFall() {
+static void Encoder4AFall() {
GPIOINT->IO2IntClr |= (1 << 0);
if (GPIO2->FIOPIN & (1 << 1)) {
--encoder4_val;
@@ -268,7 +271,7 @@
++encoder4_val;
}
}
-void Encoder4BRise() {
+static void Encoder4BRise() {
GPIOINT->IO2IntClr |= (1 << 1);
if (GPIO2->FIOPIN & (1 << 0)) {
--encoder4_val;
@@ -276,7 +279,7 @@
++encoder4_val;
}
}
-void Encoder4BFall() {
+static void Encoder4BFall() {
GPIOINT->IO2IntClr |= (1 << 1);
if (GPIO2->FIOPIN & (1 << 0)) {
++encoder4_val;
@@ -285,7 +288,7 @@
}
}
-void Encoder5ARise() {
+static void Encoder5ARise() {
GPIOINT->IO2IntClr |= (1 << 2);
if (GPIO2->FIOPIN & (1 << 3)) {
++encoder5_val;
@@ -293,7 +296,7 @@
--encoder5_val;
}
}
-void Encoder5AFall() {
+static void Encoder5AFall() {
GPIOINT->IO2IntClr |= (1 << 2);
if (GPIO2->FIOPIN & (1 << 3)) {
--encoder5_val;
@@ -301,7 +304,7 @@
++encoder5_val;
}
}
-void Encoder5BRise() {
+static void Encoder5BRise() {
GPIOINT->IO2IntClr |= (1 << 3);
if (GPIO2->FIOPIN & (1 << 2)) {
--encoder5_val;
@@ -309,7 +312,7 @@
++encoder5_val;
}
}
-void Encoder5BFall() {
+static void Encoder5BFall() {
GPIOINT->IO2IntClr |= (1 << 3);
if (GPIO2->FIOPIN & (1 << 2)) {
++encoder5_val;
@@ -320,7 +323,7 @@
volatile int32_t capture_top_rise;
volatile int8_t top_rise_count;
-void IndexerTopRise() {
+static void IndexerTopRise() {
GPIOINT->IO0IntClr |= (1 << 5);
// edge counting encoder capture
++top_rise_count;
@@ -328,14 +331,14 @@
}
volatile int32_t capture_top_fall;
volatile int8_t top_fall_count;
-void IndexerTopFall() {
+static void IndexerTopFall() {
GPIOINT->IO0IntClr |= (1 << 5);
// edge counting encoder capture
++top_fall_count;
capture_top_fall = encoder3_val;
}
volatile int8_t bottom_rise_count;
-void IndexerBottomRise() {
+static void IndexerBottomRise() {
GPIOINT->IO0IntClr |= (1 << 4);
// edge counting
++bottom_rise_count;
@@ -346,20 +349,19 @@
portTickType xDelayTimeFrom;
static portTASK_FUNCTION(vDelayCapture, pvParameters)
{
- portTickType xSleepFrom;
- xSleepFrom = xTaskGetTickCount();
+ portTickType xSleepFrom = xTaskGetTickCount();
- for(;;) {
+ for (;;) {
NVIC_DisableIRQ(EINT3_IRQn);
- if (dirty_delay) {
+ if (dirty_delay != 0) {
xSleepFrom = xDelayTimeFrom;
dirty_delay = 0;
NVIC_EnableIRQ(EINT3_IRQn);
- vTaskDelayUntil(&xSleepFrom, 32 / portTICK_RATE_MS);
+ vTaskDelayUntil(&xSleepFrom, kBottomFallDelayTime / portTICK_RATE_MS);
NVIC_DisableIRQ(EINT3_IRQn);
- bottom_fall_delay_count ++;
+ ++bottom_fall_delay_count;
capture_bottom_fall_delay = encoder3_val;
NVIC_EnableIRQ(EINT3_IRQn);
} else {
@@ -369,29 +371,28 @@
}
}
-
volatile int8_t bottom_fall_count;
-void IndexerBottomFall() {
+static void IndexerBottomFall() {
GPIOINT->IO0IntClr |= (1 << 4);
- bottom_fall_count ++;
+ ++bottom_fall_count;
// edge counting start delayed capture
xDelayTimeFrom = xTaskGetTickCount();
dirty_delay = 1;
}
volatile int32_t capture_wrist_rise;
volatile int8_t wrist_rise_count;
-void WristHallRise() {
+static void WristHallRise() {
GPIOINT->IO0IntClr |= (1 << 6);
// edge counting encoder capture
- wrist_rise_count ++;
+ ++wrist_rise_count;
capture_wrist_rise = (int32_t)QEI->QEIPOS;
}
volatile int32_t capture_shooter_angle_rise;
volatile int8_t shooter_angle_rise_count;
-void ShooterHallRise() {
+static void ShooterHallRise() {
GPIOINT->IO0IntClr |= (1 << 7);
// edge counting encoder capture
- shooter_angle_rise_count ++;
+ ++shooter_angle_rise_count;
capture_shooter_angle_rise = encoder2_val;
}
@@ -403,6 +404,8 @@
return result;
}
inline static void IRQ_Dispatch(void) {
+ // TODO(brians): think about adding a loop here so that we can handle multiple
+ // interrupts right on top of each other faster
uint8_t index = __clz(GPIOINT->IO2IntStatR | GPIOINT->IO0IntStatR |
(GPIOINT->IO2IntStatF << 28) | (GPIOINT->IO0IntStatF << 4));
@@ -443,177 +446,43 @@
NoGPIO // index 32: NO BITS SET #False Alarm
};
table[index]();
-
-/*
- switch(index) {
- case 0: //P2.3 Fall #bit 31 //Encoder 5 B //Dio 10
- Encoder5BFall();
- return;
-
- case 1: //P2.2 Fall #bit 30 //Encoder 5 A //Dio 9
- Encoder5AFall();
- return;
-
- case 2: //P2.1 Fall #bit 29 //Encoder 4 B //Dio 8
- Encoder4BFall();
- return;
-
- case 3: //P2.0 Fall #bit 28 //Encoder 4 A //Dio 7
- Encoder4AFall();
- return;
-
- case 4: //NO GPIO #bit 27
- NoGPIO();
- return;
-
- case 5: //P0.22 Fall #bit 26 //Encoder 2 A
- Encoder2AFall();
- return;
-
- case 6: //P0.21 Fall #bit 25 //Encoder 2 B
- Encoder2BFall();
- return;
-
- case 7: //P0.20 Fall #bit 24 //Encoder 3 A
- Encoder3AFall();
- return;
-
- case 8: //P0.19 Fall #bit 23 //Encoder 3 B
- Encoder3BFall();
- return;
-
- case 9: //P0.22 Rise #bit 22 //Encoder 2 A
- Encoder2ARise();
- return;
-
- case 10: //P0.21 Rise #bit 21 //Encoder 2 B
- Encoder2BRise();
- return;
-
- case 11: //P0.20 Rise #bit 20 //Encoder 3 A
- Encoder3ARise();
- return;
-
- case 12: //P0.19 Rise #bit 19 //Encoder 3 B
- Encoder3BRise();
- return;
-
- case 13: //NO GPIO #bit 18
- NoGPIO();
- return;
-
- case 14: //NO GPIO #bit 17
- NoGPIO();
- return;
-
- case 15: //NO GPIO #bit 16
- NoGPIO();
- return;
-
- case 16: //NO GPIO #bit 15
- NoGPIO();
- return;
-
- case 17: //NO GPIO #bit 14
- NoGPIO();
- return;
-
- case 18: //NO GPIO #bit 13
- NoGPIO();
- return;
-
- case 19: //NO GPIO #bit 12
- NoGPIO();
- return;
-
- case 20: //NO GPIO #bit 11
- NoGPIO();
- return;
-
- case 21: //NO GPIO #bit 10
- NoGPIO();
- return;
-
- case 22: //P0.3 Fall #bit 9 //Indexer Top //Dio 2
- IndexerTopFall();
- return;
-
- case 23: //P0.4 Fall #bit 8 //Indexer Bottom //Dio 1
- IndexerBottomFall();
- return;
-
- case 24: //P0.7 Rise #bit 7 //Shooter Hall //Dio 4
- ShooterHallRise();
- return;
-
- case 25: //P0.6 Rise #bit 6 //Wrist Hall //Dio 3
- WristHallRise();
- return;
-
- case 26: //P0.5 Rise #bit 5 //Indexer Top //Dio 2
- IndexerTopRise();
- return;
-
- case 27: //P0.4 Rise #bit 4 //Indexer Bottom //Dio 1
- IndexerBottomRise();
- return;
-
- case 28: //P2.3 Rise #bit 3 //Encoder 5 B //Dio 10
- Encoder5BRise();
- return;
-
- case 29: //P2.2 Rise #bit 2 //Encoder 5 A //Dio 9
- Encoder5ARise();
- return;
-
- case 30: //P2.1 Rise #bit 1 //Encoder 4 B //Dio 8
- Encoder4BRise();
- return;
-
- case 31: //P2.0 Rise #bit 0 //Encoder 4 A //Dio 7
- Encoder4ARise();
- return;
-
- case 32: //NO BITS SET #False Alarm
- NoGPIO();
- return;
- }
- */
}
void EINT3_IRQHandler(void) {
+ // Have to disable it here or else it re-fires the interrupt while the code
+ // reads to figure out which pin the interrupt is for.
+ // TODO(brians): figure out details + look for an alternative
NVIC_DisableIRQ(EINT3_IRQn);
IRQ_Dispatch();
NVIC_EnableIRQ(EINT3_IRQn);
}
-int32_t encoder_val(int chan)
-{
+int32_t encoder_val(int chan) {
int32_t val;
- switch(chan) {
- case 0: //Wrist
+ switch (chan) {
+ case 0: // Wrist
return (int32_t)QEI->QEIPOS;
- case 1: //Shooter Wheel
+ case 1: // Shooter Wheel
NVIC_DisableIRQ(EINT1_IRQn);
NVIC_DisableIRQ(EINT2_IRQn);
val = encoder1_val;
NVIC_EnableIRQ(EINT2_IRQn);
NVIC_EnableIRQ(EINT1_IRQn);
return val;
- case 2: //Shooter Angle
+ case 2: // Shooter Angle
NVIC_DisableIRQ(EINT3_IRQn);
val = encoder2_val;
NVIC_EnableIRQ(EINT3_IRQn);
return val;
- case 3: //Indexer
+ case 3: // Indexer
NVIC_DisableIRQ(EINT3_IRQn);
val = encoder3_val;
NVIC_EnableIRQ(EINT3_IRQn);
return val;
- case 4: //Drive R
+ case 4: // Drive R
NVIC_DisableIRQ(EINT3_IRQn);
val = encoder4_val;
NVIC_EnableIRQ(EINT3_IRQn);
return val;
- case 5: //Drive L
+ case 5: // Drive L
NVIC_DisableIRQ(EINT3_IRQn);
val = encoder5_val;
NVIC_EnableIRQ(EINT3_IRQn);
@@ -625,18 +494,16 @@
void fillSensorPacket(struct DataStruct *packet) {
packet->gyro_angle = gyro_angle;
- NVIC_DisableIRQ(EINT1_IRQn);
- NVIC_DisableIRQ(EINT2_IRQn);
packet->shooter = encoder1_val;
- NVIC_EnableIRQ(EINT2_IRQn);
- NVIC_EnableIRQ(EINT1_IRQn);
-
- NVIC_DisableIRQ(EINT3_IRQn);
-
packet->right_drive = encoder4_val;
packet->left_drive = encoder5_val;
packet->shooter_angle = encoder2_val;
packet->indexer = encoder3_val;
+ packet->wrist = (int32_t)QEI->QEIPOS;
+
+ // TODO(brians): should we re-enable it in between here so that it's disabled
+ // for shorter chunks?
+ NVIC_DisableIRQ(EINT3_IRQn);
packet->capture_top_rise = capture_top_rise;
packet->top_rise_count = top_rise_count;
@@ -644,8 +511,6 @@
packet->capture_top_fall = capture_top_fall;
packet->top_fall_count = top_fall_count;
- packet->bottom_rise_count = bottom_rise_count;
-
packet->capture_bottom_fall_delay = capture_bottom_fall_delay;
packet->bottom_fall_delay_count = bottom_fall_delay_count;
packet->bottom_fall_count = bottom_fall_count;
@@ -658,11 +523,10 @@
NVIC_EnableIRQ(EINT3_IRQn);
- packet->wrist = (int32_t)QEI->QEIPOS;
+ packet->bottom_rise_count = bottom_rise_count;
}
-void encoder_init(void)
-{
+void encoder_init(void) {
// Setup the encoder interface.
SC->PCONP |= PCONP_PCQEI;
PINCON->PINSEL3 = ((PINCON->PINSEL3 & 0xffff3dff) | 0x00004100);
@@ -690,6 +554,7 @@
GPIOINT->IO0IntEnR |= (1 << 22); // Set GPIO rising interrupt.
GPIOINT->IO0IntEnF |= (1 << 21); // Set GPIO falling interrupt.
GPIOINT->IO0IntEnR |= (1 << 21); // Set GPIO rising interrupt.
+ // Make sure they're in mode 00 (the default, aka nothing special).
PINCON->PINSEL1 &= ~(0x3 << 12);
PINCON->PINSEL1 &= ~(0x3 << 10);
encoder2_val = 0;
@@ -699,6 +564,7 @@
GPIOINT->IO0IntEnR |= (1 << 20); // Set GPIO rising interrupt.
GPIOINT->IO0IntEnF |= (1 << 19); // Set GPIO falling interrupt.
GPIOINT->IO0IntEnR |= (1 << 19); // Set GPIO rising interrupt.
+ // Make sure they're in mode 00 (the default, aka nothing special).
PINCON->PINSEL1 &= ~(0x3 << 8);
PINCON->PINSEL1 &= ~(0x3 << 6);
encoder3_val = 0;
@@ -708,6 +574,7 @@
GPIOINT->IO2IntEnR |= (1 << 0); // Set GPIO rising interrupt.
GPIOINT->IO2IntEnF |= (1 << 1); // Set GPIO falling interrupt.
GPIOINT->IO2IntEnR |= (1 << 1); // Set GPIO rising interrupt.
+ // Make sure they're in mode 00 (the default, aka nothing special).
PINCON->PINSEL4 &= ~(0x3 << 0);
PINCON->PINSEL4 &= ~(0x3 << 2);
encoder4_val = 0;
@@ -717,6 +584,7 @@
GPIOINT->IO2IntEnR |= (1 << 2); // Set GPIO rising interrupt.
GPIOINT->IO2IntEnF |= (1 << 3); // Set GPIO falling interrupt.
GPIOINT->IO2IntEnR |= (1 << 3); // Set GPIO rising interrupt.
+ // Make sure they're in mode 00 (the default, aka nothing special).
PINCON->PINSEL4 &= ~(0x3 << 4);
PINCON->PINSEL4 &= ~(0x3 << 6);
encoder5_val = 0;