aboutsummaryrefslogtreecommitdiff
path: root/laser-tag software
diff options
context:
space:
mode:
authorDavid Barksdale <amatus@amatus.name>2016-01-04 21:22:46 -0600
committerDavid Barksdale <amatus@amatus.name>2016-01-04 21:22:46 -0600
commit8d5023cad1b423c4fd7f8e5fe10524fb651c9613 (patch)
tree9f6a8335372b1d2a499c1c566c1a59af042d4723 /laser-tag software
parenta9627770c3c82aefc38a1bed3dc5f25aca167fce (diff)
Use S1 for music and S2 for the laser
Diffstat (limited to 'laser-tag software')
-rwxr-xr-xlaser-tag software/main.c174
1 files changed, 120 insertions, 54 deletions
diff --git a/laser-tag software/main.c b/laser-tag software/main.c
index c12fca1..221eaca 100755
--- a/laser-tag software/main.c
+++ b/laser-tag software/main.c
@@ -103,7 +103,7 @@ static const smc_power_mode_config_t g_idlePowerMode = {
.powerModeName = kPowerModeVlpw,
};
-/* Switch1 GPIO pin */
+/* Switch GPIO pins */
static const gpio_input_pin_user_config_t g_switch1 = {
.pinName = GPIO_MAKE_PIN(GPIOA_IDX, 1),
.config.isPullEnable = true,
@@ -111,6 +111,48 @@ static const gpio_input_pin_user_config_t g_switch1 = {
.config.interrupt = kPortIntEitherEdge,
};
+static const gpio_input_pin_user_config_t g_switch2 = {
+ .pinName = GPIO_MAKE_PIN(GPIOA_IDX, 2),
+ .config.isPullEnable = true,
+ .config.pullSelect = kPortPullUp,
+ .config.interrupt = kPortIntEitherEdge,
+};
+
+static const gpio_input_pin_user_config_t g_switchUp = {
+ .pinName = GPIO_MAKE_PIN(GPIOA_IDX, 4),
+ .config.isPullEnable = true,
+ .config.pullSelect = kPortPullUp,
+ .config.interrupt = kPortIntEitherEdge,
+};
+
+static const gpio_input_pin_user_config_t g_switchDown = {
+ .pinName = GPIO_MAKE_PIN(GPIOA_IDX, 5),
+ .config.isPullEnable = true,
+ .config.pullSelect = kPortPullUp,
+ .config.interrupt = kPortIntEitherEdge,
+};
+
+static const gpio_input_pin_user_config_t g_switchLeft = {
+ .pinName = GPIO_MAKE_PIN(GPIOA_IDX, 18),
+ .config.isPullEnable = true,
+ .config.pullSelect = kPortPullUp,
+ .config.interrupt = kPortIntEitherEdge,
+};
+
+static const gpio_input_pin_user_config_t g_switchRight = {
+ .pinName = GPIO_MAKE_PIN(GPIOA_IDX, 13),
+ .config.isPullEnable = true,
+ .config.pullSelect = kPortPullUp,
+ .config.interrupt = kPortIntEitherEdge,
+};
+
+static const gpio_input_pin_user_config_t g_switchSelect = {
+ .pinName = GPIO_MAKE_PIN(GPIOA_IDX, 12),
+ .config.isPullEnable = true,
+ .config.pullSelect = kPortPullUp,
+ .config.interrupt = kPortIntEitherEdge,
+};
+
/* LPTMR configurations */
static const lptmr_user_config_t g_lptmrConfig = {
.timerMode = kLptmrTimerModeTimeCounter,
@@ -123,7 +165,8 @@ static const lptmr_user_config_t g_lptmrConfig = {
/* PIT config */
static const pit_user_config_t g_pitChan0 = {
- .periodUs = 104, // 9615 Hz (9600 baud 0.16% error)
+ .periodUs = 193000,
+ .isInterruptEnabled = true,
};
/* CMP config */
@@ -238,6 +281,60 @@ static void lptmr_call_back(void)
}
}
+/* Play music using the PIT timer */
+uint16_t notes[] = {
+ 0, // rest
+ 494, // B4 1
+ 523, // C5 2
+ 554, // C#5 3
+ 587, // D5 4
+ 622, // D#5 5
+ 659, // E5 6
+ 698, // F5 7
+ 740, // F#5 8
+ 784, // G5 9
+ 830, // G#5 10
+ 880, // A5 11
+ 932, // A#5 12
+ 988, // B5 13
+};
+uint8_t beeps[] = {
+ 8, 8, 4, 1,
+ 0, 1, 0, 6,
+ 0, 6, 0, 6,
+ 10, 10, 11, 13,
+ 11, 11, 11, 6,
+ 0, 4, 0, 8,
+ 0, 8, 0, 8,
+ 6, 6, 8, 6,
+};
+
+tpm_pwm_param_t param = {
+ .mode = kTpmEdgeAlignedPWM,
+ .edgeMode = kTpmHighTrue,
+ .uDutyCyclePercent = 50,
+};
+
+int position;
+
+void PIT_IRQHandler(void)
+{
+ if (PIT_HAL_IsIntPending(g_pitBase[0], 0))
+ {
+ PIT_HAL_ClearIntFlag(g_pitBase[0], 0);
+ param.uFrequencyHZ = notes[beeps[position]];
+ position = (position + 1) % sizeof(beeps);
+ if (param.uFrequencyHZ)
+ TPM_DRV_PwmStart(0, &param, 3);
+ else
+ TPM_DRV_PwmStop(0, &param, 3);
+ }
+ if (PIT_HAL_IsIntPending(g_pitBase[0], 1))
+ {
+ PIT_HAL_ClearIntFlag(g_pitBase[0], 1);
+ }
+}
+
uint8_t g_txBuff[] = { '$' };
void PORTA_IRQHandler(void)
@@ -246,6 +343,14 @@ void PORTA_IRQHandler(void)
PORT_HAL_ClearPortIntFlag(PORTA_BASE_PTR);
if (GPIO_DRV_ReadPinInput(g_switch1.pinName)) {
+ TPM_DRV_PwmStop(0, &param, 3);
+ PIT_DRV_StopTimer(0, 0);
+ } else {
+ position = 0;
+ PIT_DRV_StartTimer(0, 0);
+ }
+
+ if (GPIO_DRV_ReadPinInput(g_switch2.pinName)) {
LPUART_DRV_AbortSendingData(1);
} else {
LPUART_DRV_SendData(1, g_txBuff, 1);
@@ -309,21 +414,21 @@ int main (void)
CLOCK_SYS_SetConfiguration(&g_defaultClockConfigVlpr);
/* Initialize LPTMR */
- //lptmr_state_t lptmrState;
- //LPTMR_DRV_Init(LPTMR0_IDX, &lptmrState, &g_lptmrConfig);
- //LPTMR_DRV_SetTimerPeriodUs(LPTMR0_IDX, 100000);
- OSA_Init();
- //LPTMR_DRV_InstallCallback(LPTMR0_IDX, lptmr_call_back);
+ lptmr_state_t lptmrState;
+ LPTMR_DRV_Init(LPTMR0_IDX, &lptmrState, &g_lptmrConfig);
+ LPTMR_DRV_SetTimerPeriodUs(LPTMR0_IDX, 100000);
+ //OSA_Init();
+ LPTMR_DRV_InstallCallback(LPTMR0_IDX, lptmr_call_back);
/* Initialize DMA */
dma_state_t dma_state;
DMA_DRV_Init(&dma_state);
-#if 0
/* Initialize PIT */
PIT_DRV_Init(0, false);
PIT_DRV_InitChannel(0, 0, &g_pitChan0);
+#if 0
/* Initialize the DAC */
dac_converter_config_t MyDacUserConfigStruct;
DAC_DRV_StructInitUserConfigNormal(&MyDacUserConfigStruct);
@@ -361,6 +466,12 @@ int main (void)
/* Buttons */
GPIO_DRV_InputPinInit(&g_switch1);
+ GPIO_DRV_InputPinInit(&g_switch2);
+ GPIO_DRV_InputPinInit(&g_switchUp);
+ GPIO_DRV_InputPinInit(&g_switchDown);
+ GPIO_DRV_InputPinInit(&g_switchLeft);
+ GPIO_DRV_InputPinInit(&g_switchRight);
+ GPIO_DRV_InputPinInit(&g_switchSelect);
/* Start LPTMR */
LPTMR_DRV_Start(LPTMR0_IDX);
@@ -387,9 +498,7 @@ int main (void)
&g_fioChan);
DMA_DRV_RegisterCallback(&g_fioChan, fioDmaCallback, NULL);
-#if 1
- /* Play some chip tunez */
- //CLOCK_SYS_SetTpmSrc(1, kClockTpmSrcMcgIrClk);
+ /* Connect buzzer to TPM0_CH3 */
PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 30, kPortMuxAlt3);
tpm_general_config_t tmpConfig = {
.isDBGMode = false,
@@ -402,49 +511,6 @@ int main (void)
TPM_DRV_Init(0, &tmpConfig);
TPM_DRV_SetClock(0, kTpmClockSourceModuleMCGIRCLK, kTpmDividedBy1);
- uint16_t notes[] = {
- 0, // rest
- 494, // B4 1
- 523, // C5 2
- 554, // C#5 3
- 587, // D5 4
- 622, // D#5 5
- 659, // E5 6
- 698, // F5 7
- 740, // F#5 8
- 784, // G5 9
- 830, // G#5 10
- 880, // A5 11
- 932, // A#5 12
- 988, // B5 13
- };
- uint8_t beeps[] = {
- 8, 8, 4, 1,
- 0, 1, 0, 6,
- 0, 6, 0, 6,
- 10, 10, 11, 13,
- 11, 11, 11, 6,
- 0, 4, 0, 8,
- 0, 8, 0, 8,
- 6, 6, 8, 6,
- };
-
- tpm_pwm_param_t param = {
- .mode = kTpmEdgeAlignedPWM,
- .edgeMode = kTpmHighTrue,
- .uDutyCyclePercent = 50,
- };
- int i;
- for (i = 0; ; i = (i + 1) % sizeof(beeps)) {
- param.uFrequencyHZ = notes[beeps[i]];
- if (param.uFrequencyHZ)
- TPM_DRV_PwmStart(0, &param, 3);
- else
- TPM_DRV_PwmStop(0, &param, 3);
- OSA_TimeDelay(193);
- }
-#endif
-
/* We're done, everything else is triggered through interrupts */
for(;;) {
#ifndef DEBUG