Paso 9: Actualización de programa
Con éxito he aumentado la frecuencia de adquisición de datos a 19 KHz.
Esto ha supuesto con dos buffers de 512 bytes (doble búfer) y una reescritura de la interrupción y las secciones de bucle vacío.
El audio es mucho más limpio.
También he probado a 38 Khz, con resultados muy prometedores. Sin embargo en este búfer ocasional frecuencia períodos de espera están presentes. Es probable que futuras mejoras en el diseño de la SDCard y la velocidad de la función de biblioteca de SD, va a superar este problema. Para aquellos que quieren experimentar modifica la variable de prescalar justo antes de la instalación de vacío.
He levantado bufa y bufb.
En la interrupción rutina establezco una bandera llamada aready - es cierto cuando escribe en bufa, false para bufb.
La bandera writeit es cierto cuando una escritura es necesaria y falsa cuando termina la SdCard.
Cuando un búfer está lleno (buffcount == BUF_SIZE):
- Comprobar si ha terminado la Sdcard de la escritura, en que caso writeit == false ya restablecer el puntero del buffer a cero, cambiar el tampón bandera ya y establecer la verdadera bandera de writeit.
- Si la tarjeta todavía está escribiendo voy una lectura hacia atrás (bufcount--; y contador-;) y la interrupción de la salida.
Una vez que tenga el número correcto de lecturas que cierre la interrupción, escribir el último bloque de datos y ordenados.
La mayoría de los datos es escrita en bucle vacío:
if(writeit) {/ / datos están listos para ser escrito
Si (ya) {}
tempfile.Write (bufb, BUF_SIZE); escribir el bloque de datos de bufb
} else {}
iniciar bloque escritura de bufa
tempfile.Write (bufa, BUF_SIZE); escribir el bloque de datos
}
writeit = false; bandera que se realiza la escritura
}