sound tuning
This commit is contained in:
parent
1d915baf77
commit
5d7a94c3b2
@ -4,13 +4,12 @@ OBJDUMP=$(TOOLCHAIN_PREFIX)/bin/msp430-elf-objdump
|
||||
|
||||
ARTIFACT=firmware
|
||||
MCU=msp430g2553
|
||||
COMMONFLAGS=-Wall -mmcu=$(MCU) -I $(TOOLCHAIN_PREFIX)/include -O0 -g0
|
||||
DEBUGFLAGS=
|
||||
# DEBUGFLAGS+= -g3 -ggdb -gdwarf-2
|
||||
COMMONFLAGS=-Wall -mmcu=$(MCU) -I $(TOOLCHAIN_PREFIX)/include -O0 -g0 $(DEBUGFLAGS)
|
||||
CFLAGS=$(COMMONFLAGS) -std=gnu99
|
||||
ASFLAGS=$(COMMONFLAGS) -D__ASSEMBLER__
|
||||
|
||||
# for debugging
|
||||
CFLAGS+= -g3 -ggdb -gdwarf-2
|
||||
|
||||
LDFLAGS=-mmcu=$(MCU) -L $(TOOLCHAIN_PREFIX)/include
|
||||
|
||||
$(ARTIFACT).elf: main.o scheduler.o spi.o spi_init.o sequencer.o melody_tetris.o melody_tusch1.o psg.o mute.o melody_pling.o
|
||||
|
@ -31,7 +31,6 @@ int main() {
|
||||
|
||||
__enable_interrupt();
|
||||
|
||||
// playMelodyTetris();
|
||||
|
||||
while (1) {
|
||||
schExec();
|
||||
|
@ -15,10 +15,10 @@ const t_tone plingVoice1[] = {
|
||||
};
|
||||
|
||||
t_melodies pling = {
|
||||
.melodies = { { .chip = 1, .amplitude = 12, .tones = plingVoice1 } },
|
||||
.melodies = { { .amplitude = 12, .tones = plingVoice1 } },
|
||||
.numOfMelodies = 1,
|
||||
.pace = 200,
|
||||
.slotMask = 0x02
|
||||
.chip = 1
|
||||
};
|
||||
|
||||
void playPling() {
|
||||
|
@ -922,15 +922,16 @@ const t_tone voice3[] = {
|
||||
{ .octave = e_O_Null, .note = e_Null, .length = e_L_EndMark, .legato = false, .staccato = false },
|
||||
};
|
||||
|
||||
#define INITIAL_PACE 160
|
||||
t_melodies tetrisTheme = {
|
||||
.melodies = { { .chip = 0, .amplitude = 8, .tones = voice1 }, { .chip = 0, .amplitude = 8, .tones = voice2 }, { .chip = 0, .amplitude = 8, .tones = voice3 } },
|
||||
.melodies = { { .amplitude = 8, .tones = voice1 }, { .amplitude = 8, .tones = voice2 }, { .amplitude = 8, .tones = voice3 } },
|
||||
.numOfMelodies = 3,
|
||||
.pace = 160,
|
||||
.slotMask = 0x01
|
||||
.pace = INITIAL_PACE,
|
||||
.chip = 0
|
||||
};
|
||||
|
||||
void playMelodyTetris() {
|
||||
tetrisTheme.pace = 160; // reset to start value each time
|
||||
tetrisTheme.pace = INITIAL_PACE; // reset to start value each time
|
||||
sequencerPlayMelodies(&tetrisTheme);
|
||||
}
|
||||
|
||||
|
@ -72,10 +72,10 @@ const t_tone tusch1voice3[] = {
|
||||
};
|
||||
|
||||
t_melodies tusch1 = {
|
||||
.melodies = { { .chip = 1, .amplitude = 12, .tones = tusch1voice1 }, { .chip = 1, .amplitude = 12, .tones = tusch1voice2 }, { .chip = 1, .amplitude = 12, .tones = tusch1voice3 } },
|
||||
.melodies = { { .amplitude = 12, .tones = tusch1voice1 }, { .amplitude = 12, .tones = tusch1voice2 }, { .amplitude = 12, .tones = tusch1voice3 } },
|
||||
.numOfMelodies = 3,
|
||||
.pace = 200,
|
||||
.slotMask = 0x02
|
||||
.chip = 1
|
||||
};
|
||||
|
||||
void playTusch1() {
|
||||
|
@ -81,19 +81,6 @@ inline static void BUS_OP_CS1_DISABLE() {
|
||||
BUS_CTRL_REG |= _CS1;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void delay() {
|
||||
asm volatile (
|
||||
"push r12\n"
|
||||
"mov.w #5, r12\n"
|
||||
"loop:\n"
|
||||
"dec.w r12\n"
|
||||
"jnz loop\n"
|
||||
"pop r12\n"
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
static uint8_t psgReadShadow(uint8_t chip, uint8_t address) {
|
||||
return psgShadowRegisters[chip][address];
|
||||
}
|
||||
|
@ -52,16 +52,6 @@ uint16_t schAdd(void (*exec)(void *), void *handle, uint32_t delay, uint32_t per
|
||||
return taskId;
|
||||
}
|
||||
|
||||
/*
|
||||
void schDel(void (*exec)(void *), void *handle) {
|
||||
for (uint16_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
|
||||
if ((tasks[i].exec == exec) && (tasks[i].handle == handle)) {
|
||||
tasks[i].exec = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
void schDel(uint16_t taskId) {
|
||||
tasks[taskId].exec = NULL;
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ void sequencerExec(void *handle) {
|
||||
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
||||
melody->idx = 0;
|
||||
}
|
||||
psgPlayTone(melody->chip, channel, melody->amplitude, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
||||
psgPlayTone(melodies->chip, channel, melody->amplitude, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
||||
melody->lengthCnt = (melody->tones[melody->idx].staccato) ?
|
||||
(calcLength(melodies, melody->tones[melody->idx].length) / 2) :
|
||||
calcLength(melodies, melody->tones[melody->idx].length);
|
||||
@ -78,7 +78,7 @@ void sequencerExec(void *handle) {
|
||||
}
|
||||
break;
|
||||
case e_StaccatoBreak:
|
||||
psgPlayTone(melody->chip, channel, 0, e_O_Null, e_Pause);
|
||||
psgPlayTone(melodies->chip, channel, 0, e_O_Null, e_Pause);
|
||||
melody->lengthCnt = calcLength(melodies, melody->tones[melody->idx].length) / 2;
|
||||
melody->state = e_HoldStaccatoBreak;
|
||||
break;
|
||||
@ -90,7 +90,7 @@ void sequencerExec(void *handle) {
|
||||
break;
|
||||
case e_SeparateTone:
|
||||
if (! (melody->tones[melody->idx].legato)) {
|
||||
psgPlayTone(melody->chip, channel, 0, e_O_Null, e_Pause);
|
||||
psgPlayTone(melodies->chip, channel, 0, e_O_Null, e_Pause);
|
||||
}
|
||||
melody->idx += 1;
|
||||
melody->state = e_PlayTone;
|
||||
@ -106,6 +106,8 @@ void sequencerExec(void *handle) {
|
||||
}
|
||||
|
||||
void sequencerPlayMelodies(t_melodies *melodies) {
|
||||
melodies->slotMask = (1 << melodies->chip);
|
||||
|
||||
if ((slots & melodies->slotMask) != 0) {
|
||||
return;
|
||||
}
|
||||
@ -123,8 +125,11 @@ void sequencerPlayMelodies(t_melodies *melodies) {
|
||||
}
|
||||
|
||||
void sequencerStopMelodies(t_melodies *melodies) {
|
||||
slots &= ~(melodies->slotMask);
|
||||
schDel(melodies->taskId);
|
||||
slots &= ~(melodies->slotMask);
|
||||
for (uint8_t channel = 0; channel < melodies->numOfMelodies; channel++) {
|
||||
psgPlayTone(melodies->chip, channel, 0, e_O_Null, e_Pause);
|
||||
}
|
||||
}
|
||||
|
||||
void sequencerChangePace(t_melodies *melodies) {
|
||||
|
@ -42,7 +42,6 @@ typedef enum {
|
||||
|
||||
typedef struct {
|
||||
uint16_t idx;
|
||||
uint8_t chip;
|
||||
uint16_t lengthCnt;
|
||||
t_sequencerState state;
|
||||
uint8_t amplitude;
|
||||
@ -53,10 +52,11 @@ typedef struct {
|
||||
#define NUM_OF_CHANNELS 3
|
||||
typedef struct {
|
||||
uint8_t slotMask;
|
||||
uint8_t chip;
|
||||
uint8_t taskId;
|
||||
uint16_t quarterLength;
|
||||
uint8_t numOfMelodies;
|
||||
uint8_t pace; // quarter notes per minute
|
||||
uint16_t pace; // quarter notes per minute
|
||||
uint8_t sync;
|
||||
t_melody melodies[NUM_OF_CHANNELS];
|
||||
} t_melodies;
|
||||
|
@ -1,10 +1,6 @@
|
||||
#include <msp430g2553.h>
|
||||
#include "soundCodes.h"
|
||||
|
||||
.section ".data"
|
||||
.global cmd
|
||||
cmd:
|
||||
.byte
|
||||
|
||||
.section ".text","ax",@progbits
|
||||
receive_isr:
|
||||
@ -34,7 +30,7 @@ spiCmdHandler_3:
|
||||
spiCmdHandler_4:
|
||||
bit #SOUND_GAMEOVER, &cmd
|
||||
jz spiCmdHandler_5
|
||||
;; insert a call here
|
||||
call #stopMelodyTetris
|
||||
bic #SOUND_GAMEOVER, &cmd
|
||||
spiCmdHandler_5:
|
||||
bit #SOUND_FANFARE, &cmd
|
||||
@ -60,9 +56,6 @@ spiCmdHandler_end:
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.section "__interrupt_vector_8","ax",@progbits
|
||||
.word receive_isr
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include "soundCodes.h"
|
||||
|
||||
|
||||
extern uint8_t cmd;
|
||||
uint8_t cmd;
|
||||
|
||||
void spiInit() {
|
||||
// SPI slave
|
||||
|
Loading…
x
Reference in New Issue
Block a user