added GPIO based execution speed test to check profiling results, simailr results...
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 22 May 2013 23:26:56 +0000 (23:26 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 22 May 2013 23:26:56 +0000 (23:26 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1263 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/stm32/Makefile
codec2-dev/stm32/README.txt
codec2-dev/stm32/src/init.c [new file with mode: 0644]
codec2-dev/stm32/src/main.c

index 3946dc5f2488def3573d60e81967f548664db8aa..b4efc9966a1c7c4bac1ed3918156231ab090ca04 100644 (file)
@@ -110,7 +110,7 @@ OBJS = $(SRCS:.c=.o)
 
 ###################################################
 
-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
@@ -132,6 +132,18 @@ $(PROJ_NAME).elf: $(SRCS)
 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
index eac2d04b0379f9e6837a896a5113059ea194a040..d4d7d5576885d3e79e80b63b4caf9954b7e5b219 100644 (file)
@@ -30,14 +30,14 @@ Getting Started
    $ cd stlink
    ~/stlink$ git checkout bbecbc1e81b15b85829149424d048d96bd844939
    ~/stlink$ patch -p0 < ~/codec2-dev/stm32/stlink/stlink.patch
-   ~/stlink$ cp ~/codec2-dev/stm32/stlink/elfsym.* .
+   ~/stlink$ cp ~/codec2-dev/stm32/stlink/elfsym.* gdbserver
    ~/stlink$ ./autogen.sh
    ~/stlink$ ./configure
    ~/stlink$ make 
 
 . Place a copy of hts1a.raw in the stlink directory and start st-util:
 
-   ~/stlink$ cp ~/codec2-dev/raw/hts1a .
+   ~/stlink$ cp ~/codec2-dev/raw/hts1a.raw .
    ~/stlink$ sudo ./st-util -f /home/david/codec2-dev/stm32/stm32f4_codec2.elf
 
 . In _another_ console start gdb:
diff --git a/codec2-dev/stm32/src/init.c b/codec2-dev/stm32/src/init.c
new file mode 100644 (file)
index 0000000..a724e40
--- /dev/null
@@ -0,0 +1,7 @@
+/*
+ * Dummy function to avoid compiler error
+ */
+void _init() {
+
+}
+
index 7b8622d13759a6b1879eb5f775599a0f89fea4a7..5b538f2e8adc2f4386a8b2ca090340b649f620bd 100644 (file)
@@ -55,7 +55,7 @@ static void c2demo(int mode, char inputfile[], char outputfile[])
 \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
@@ -76,12 +76,78 @@ static void c2demo(int mode, char inputfile[], char outputfile[])
     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