48 lines
1020 B
C
48 lines
1020 B
C
#include "packet.h"
|
|
#include "uart.h"
|
|
|
|
/* 5 byte packets. 5 bytes * 10 bits/byte * 8 khz = 400 kbits/sec */
|
|
|
|
void packet_send_adc_dac(int16_t adc, uint16_t dac, int overflow)
|
|
{
|
|
char b[4];
|
|
/* Packet format for DAC/ADC values:
|
|
10100000 ffffAaaa aaaaaaaa Dddddddd dddddddd
|
|
|
|
ffff = flags, default 0000
|
|
...1 = possible overflow
|
|
Aaaaaaaaaaaa = 12-bit ADC value (2s compliment signed)
|
|
Dddddddddddddddd = 16-bit DAC command (unsigned)
|
|
*/
|
|
|
|
uart1_put(PACKET_ADC_DAC);
|
|
|
|
b[0] = (adc & 0x0F00) >> 8;
|
|
if (overflow)
|
|
b[0] |= 0x10;
|
|
b[1] = adc & 0xFF;
|
|
b[2] = (dac & 0xFF00) >> 8;
|
|
b[3] = dac & 0xFF;
|
|
uart1_put(b[0]);
|
|
uart1_put(b[1]);
|
|
uart1_put(b[2]);
|
|
uart1_put(b[3]);
|
|
}
|
|
|
|
void packet_send_calibration(float scale)
|
|
{
|
|
/* Packet format for calibration data:
|
|
A1 xx xx xx xx
|
|
|
|
where xx xx xx xx = 32-bit floating point value, little
|
|
endian IEEE 754 */
|
|
|
|
uint8_t *b = (uint8_t *)&scale;
|
|
|
|
uart1_put(PACKET_CALIBRATION);
|
|
uart1_put(b[0]);
|
|
uart1_put(b[1]);
|
|
uart1_put(b[2]);
|
|
uart1_put(b[3]);
|
|
}
|