dagon/dagon.h

44 lines
1019 B
C

#pragma once
#include <stdarg.h>
#include "libscomp_amalg.h"
#define DACS 4
#define V_MAX 0x3FFFF
#define V0 0x1FFFF
struct dagon_ch {
bool used;
uint32_t volt;
uint32_t end, step;
};
struct dagon {
bool conn[DACS];
struct dagon_ch ch[DACS];
};
extern volatile struct dagon dg;
bool serial_vprintf(const char *fmt, va_list va);
bool serial_printf(const char *fmt, ...);
bool print_start(struct libscomp_line *l, const char *fmt, ...);
#define unused __attribute__((unused))
#define declhandler(nm) \
int dagon_##nm(struct libscomp_line *, void *p unused)
declhandler(con);
declhandler(idn);
declhandler(rmp);
declhandler(rst);
declhandler(set);
declhandler(vlt);
uint32_t spi_write(uint32_t v, size_t dac);
uint32_t spi_transfer(uint32_t v, size_t dac);
void spi_init();
void spi_reset();
#define spi_register(v) ((v) << 20)
#define spi_set(v,d) spi_write(((v) & 0x3FFFF) << 2 | spi_register(1), d)
#define spi_get(d) spi_transfer(spi_register(0b1001) << 20, d)