#define fread gdb_stdio_fread\r
 #define fwrite gdb_stdio_fwrite\r
 \r
-#define N1 24000\r
-#define N2   320\r
+#define N   2000\r
 \r
 int main(void) {\r
-    short *buf, *pbuf;\r
+    short  buf[N];\r
     FILE  *fin;\r
-    int    i, nframes;\r
 \r
-    buf = (short*)malloc(N1*sizeof(short));\r
     dac_open();\r
 \r
-    fin = fopen("stm_in.raw", "rb");\r
-    if (fin == NULL) {\r
-        printf("Error opening input file: stm_in.raw\n\nTerminating....\n");\r
-        exit(1);\r
-    }\r
-    fread(buf, sizeof(short), N1, fin);\r
-    fclose(fin);\r
-\r
-    nframes = N1/N2;\r
     while(1) {\r
+        fin = fopen("stm_in.raw", "rb");\r
+        if (fin == NULL) {\r
+            printf("Error opening input file: stm_in.raw\n\nTerminating....\n");\r
+            exit(1);\r
+        }\r
+    \r
         printf("Starting!\n");\r
-        pbuf = buf;\r
-        for(i=0; i<nframes; i++) {\r
-            while(dac_write(pbuf, N2) == -1);\r
-            pbuf += N2;\r
-        } \r
+\r
+        while(fread(buf, sizeof(short), N, fin) == N) {\r
+            while(dac_write(buf, N) == -1);\r
+        }  \r
+\r
         printf("Finished!\n");\r
+        fclose(fin);\r
     }\r
+\r
+    /* let FIFO empty */\r
+\r
+    while(1);\r
 }\r
 \r
 
 #define DAC_DHR12R2_ADDRESS    0x40007414\r
 #define DAC_DHR12L2_ADDRESS    0x40007418\r
 \r
-#define DAC_BUF_SZ    320\r
-#define FIFO_SZ      2000\r
+#define DAC_BUF_SZ   320\r
+#define FIFO_SZ      8000\r
 #define DAC_MAX      4096\r
 \r
 DAC_InitTypeDef  DAC_InitStructure;\r
 static void TIM6_Config(void);\r
 static void DAC_Ch2_Config(void);\r
 \r
+int dac_underflow;\r
+\r
 void dac_open(void) {\r
 \r
     memset(dac_buf, 32768, sizeof(short)*DAC_BUF_SZ);\r
     if(DMA_GetITStatus(DMA1_Stream6, DMA_IT_HTIF6) != RESET) {\r
         /* fill first half from fifo */\r
 \r
-        if (fifo_read(DMA1_Stream6_fifo, signed_buf, DAC_BUF_SZ/2) == -1)\r
+        if (fifo_read(DMA1_Stream6_fifo, signed_buf, DAC_BUF_SZ/2) == -1) {\r
             memset(signed_buf, 0, sizeof(short)*DAC_BUF_SZ/2);\r
+            dac_underflow++;\r
+        }\r
 \r
         /* convert to unsigned */\r
 \r
     if(DMA_GetITStatus(DMA1_Stream6, DMA_IT_TCIF6) != RESET) {\r
         /* fill second half from fifo */\r
 \r
-        if (fifo_read(DMA1_Stream6_fifo, signed_buf, DAC_BUF_SZ/2) == -1)\r
+        if (fifo_read(DMA1_Stream6_fifo, signed_buf, DAC_BUF_SZ/2) == -1) {\r
             memset(signed_buf, 0, sizeof(short)*DAC_BUF_SZ/2);\r
+            dac_underflow++;\r
+        }\r
 \r
         /* convert to unsigned */\r
 \r