###################################################
-all: libstm32f4.a $(PROJ_NAME).elf fft_test.elf
+all: libstm32f4.a $(PROJ_NAME).elf fft_test.elf dactest.elf
dl/$(PERIPHLIBZIP):
mkdir -p dl
fft_test.elf: $(FFT_TEST_SRCS)
$(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS)
+DAC_TEST=$(PERIPHLIBDIR)/Project/STM32F4xx_StdPeriph_Examples/DAC/DAC_SignalsGeneration
+DAC_TEST_SRCS=\
+$(DAC_TEST)/main.c \
+$(DAC_TEST)/stm32f4xx_it.c \
+$(DAC_TEST)/system_stm32f4xx.c \
+$(PERIPHLIBDIR)/Utilities/STM32_EVAL/STM3240_41_G_EVAL/stm324xg_eval.c \
+src/startup_stm32f4xx.s \
+src/init.c
+
+dactest.elf: $(DAC_TEST_SRCS)
+ $(CC) $(CFLAGS) -DUSE_STM324xG_EVAL -I$(PERIPHLIBDIR)/Utilities/STM32_EVAL/STM3240_41_G_EVAL -I$(PERIPHLIBDIR)/Utilities/STM32_EVAL/Common $^ -o $@ $(LIBPATHS) $(LIBS)
+
clean:
rm -f *.o
rm -f *.elf
\r
while (fread(inbuf, sizeof(short), nsam, fin) == nsam) {\r
enc_start = machdep_timer_sample();\r
- codec2_encode(codec2, bits, inbuf);\r
+ codec2_encode(codec2, bits, inbuf);\r
dec_start = machdep_timer_sample_and_log(enc_start, " enc"); \r
codec2_decode(codec2, outbuf, bits);\r
machdep_timer_sample_and_log(dec_start, " dec"); \r
codec2_destroy(codec2);\r
}\r
\r
+#define SPEED_TEST_SAMPLES 24000\r
+\r
+static void c2speedtest(int mode, char inputfile[])\r
+{\r
+ struct CODEC2 *codec2;\r
+ short *inbuf, *outbuf, *pinbuf;\r
+ unsigned char *bits;\r
+ int nsam, nbit, nframes;\r
+ FILE *fin;\r
+ int f, nread;\r
+\r
+ codec2 = codec2_create(mode);\r
+ nsam = codec2_samples_per_frame(codec2);\r
+ nframes = SPEED_TEST_SAMPLES/nsam;\r
+ outbuf = (short*)malloc(nsam*sizeof(short));\r
+ inbuf = (short*)malloc(SPEED_TEST_SAMPLES*sizeof(short));\r
+ nbit = codec2_bits_per_frame(codec2);\r
+ bits = (unsigned char*)malloc(nbit*sizeof(char));\r
+\r
+ fin = fopen(inputfile, "rb");\r
+ if (fin == NULL) {\r
+ printf("Error opening input file: %s\n",inputfile);\r
+ exit(1);\r
+ }\r
+\r
+ nread = fread(inbuf, sizeof(short), SPEED_TEST_SAMPLES, fin);\r
+ if (nread != SPEED_TEST_SAMPLES) {\r
+ printf("error reading %s, %d samples reqd, %d read\n", \r
+ inputfile, SPEED_TEST_SAMPLES, nread);\r
+ }\r
+ fclose(fin);\r
+ \r
+ pinbuf = inbuf;\r
+ for(f=0; f<nframes; f++) {\r
+ GPIOD->ODR = (1 << 13);\r
+ codec2_encode(codec2, bits, pinbuf);\r
+ pinbuf += nsam;\r
+ GPIOD->ODR &= ~(1 << 13);\r
+ codec2_decode(codec2, outbuf, bits);\r
+ }\r
+\r
+ free(inbuf);\r
+ free(outbuf);\r
+ free(bits);\r
+ codec2_destroy(codec2);\r
+}\r
+\r
+void gpio_init() {\r
+ RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // enable the clock to GPIOD \r
+ GPIOD->MODER = (1 << 26); // set pin 13 to be general \r
+ // purpose output\r
+}\r
+\r
int main(void) {\r
SystemInit();\r
- printf("Starting\n");\r
+ gpio_init();\r
machdep_timer_init ();\r
+ \r
+ printf("Starting c2demo\n");\r
+\r
+ /* File I/O test for profiling or (with #define DUMP)\r
+ dumping states for optimisation and tiuning */\r
\r
c2demo(CODEC2_MODE_1600, "hts1a.raw", "hts1a_out.raw");\r
+\r
+ printf("Starting c2 speed test\n");\r
+ \r
+ /* Another test of execution speed. Look at PD13 with a\r
+ oscilliscope. On time is enc, off is dec */\r
+\r
+ c2speedtest(CODEC2_MODE_1600, "hts1a.raw");\r
+\r
printf("Finished\n");\r
\r
return 0;\r