Paso 4: El software
El software fue creado usando MPLAB X y el compilador XC8. Flowcode no nativamente soporta a esclavo SPI todavía así que tuve que volver a lo básico con mi compilador de C.
Flowcode 6 proporcionar algunas características de la caja tal como soporte UART y buffers circulares múltiples por lo que esto realmente ayudó a acelerar el desarrollo en términos de generación de código C pude copiar y pegar en mi programa.
Voy a través del proceso de obtener una versión de 30 días completamente desbloqueado de Flowcode para todo tipo de chip en mi robot de dos ruedas Instructable.
Para desarrollar el software que he creado un protocolo simple para la conexión de SPI para permitirme acceder a cada una de las funciones de los canales de la UART. Cada valor se envía vía el SPI como un byte con el CS señal tirado bajo. Cuando el comando es completar la señal CS se tiraron alto.
El código de comando y el canal de la UART se embalan juntos en un solo byte para aumentar la eficiencia. El código de comando se encuentra en la parte superior de 4 bits y el canal se encuentra en la parte inferior 2 bits.
Aquí están los pedacitos en el octeto y su representación.
cccc00uu
donde cccc es el código de comando y uu es el canal de la UART.
Código - parámetros - devoluciones - Descripción del comando
0 x 10 - N/D - NumBytes (0-255) - lee el número de bytes en el canal recibe el almacenador intermediario.
0 x 30 - N/A - NumBytes (0-255) - lee el número de bytes en el búfer de transmisión del canal.
DataByte 0 x 20 - NumBytes (0-255) - (0-255) - lee datos byte(s) desde el canal recibe el almacenador intermediario.
0 x 40 - NumBytes (0-255), DataByte (0-255) - N/A - pone un byte de datos en el búfer de transmisión del canal.
0 x 80 - baud (0-7) - N/A - establece la velocidad de transmisión de canal
Estas son las opciones para el parámetro de tasa de baudios.
0 = 1200 1 = 2400, 2 = 4800, 3 = 9600, 4 = 19200, 38400 = 5, 6 = 57600, 115200 = 7
Así que para leer el número de bytes en el canal UART 2 recibe el almacenador intermediario nos envía el siguiente código de comando y a continuación, realice una lectura.
CS baja
SPISend (0x12)
NumBytes = SPIReceive (0xFF)
CS alto
Para leer el búfer de recepción de 5 bytes de canal UART 2 enviar el siguiente comando código, el número de bytes y llevar a cabo suficientes lecturas para sacar todos los datos que queremos.
CS baja
SPISend (0x22)
SPISend (0 x 05)
Byte [0] = SPIReceive (0xFF)
Byte [1] = SPIReceive (0xFF)
Byte [2] = SPIReceive (0xFF)
Byte [3] = SPIReceive (0xFF)
Byte [4] = SPIReceive (0xFF)
CS alto
Para escribir 5 bytes en búfer de transmisión UART canal 2 nos envía el siguiente código de comando, el número de bytes y luego realizar suficiente escribe para enviar todos los datos que queremos.
CS baja
SPISend (0x42)
SPISend (0 x 05)
SPISend (Byte [0])
SPISend (Byte [1])
SPISend (Byte [2])
SPISend (Byte [3])
SPISend (Byte [4])
CS alto
Cada UART periférica tiene un búfer circular de software 512 bytes, lo que permite una gran cantidad de datos a ser enviados y recibidos que debe significar ojala que nunca se pierde un byte.
El LED se ilumina tenuemente cuando se acciona el tablero, se enciende a media potencia durante la transmisión o recepción mediante una UART y destellos a plena potencia cuando se comunica vía SPI. Pensado en tener un LED para cada canal de la UART, pero decidido contra él al final, sólo más componentes para colocar a mano.