Compare commits

..

6 commits

Author SHA1 Message Date
Stephan I. Böttcher
dfe1de4711 gitignore nm64/nm64 data link 2025-03-04 21:41:51 +01:00
Stephan I. Böttcher
b363b82ac7 dorn: user ALT_CMD_DF for dorn/fifo/strobes and /enable 2025-03-04 21:41:22 +01:00
Stephan I. Böttcher
882d18f52b parse_alt_cmd_flags: add alt_cmd_dflag 2025-03-04 21:39:34 +01:00
Stephan I. Böttcher
ad7553cff3 i2c: reg names 2025-03-04 21:38:07 +01:00
Stephan I. Böttcher
6e0db7e656 ahepamfile: add pressure() 2025-03-04 20:01:40 +01:00
Stephan I. Böttcher
8a65812ae5 flash_NMAHEPAM: I2C.RC, CRON with sugar 2025-03-04 09:45:15 +01:00
9 changed files with 62 additions and 33 deletions

1
.gitignore vendored
View file

@ -17,3 +17,4 @@ ahepamfile
*.log
nm64file
mustang_scripts
nm64/nm64

View file

@ -125,6 +125,7 @@ int main(int argc, const char * const * argv)
case 0xc364: x = nm_counters(h1); break;
default:
if ((h1 & 0xfff0)==0x12c0) { x = i2c(h1); break; }
if ((h1 & 0xff00)==0xba00) { x = pressure(h1); break; }
switch (h1 & 0xfffc) {
case 0x5710: x = dorn_hk(h1, n_adcs, 1); break;
case 0x5714: x = dorn_samples(h1, n_adcs, 1); break;

View file

@ -364,15 +364,25 @@ static inline error_msg_t parse_alt_cmd_flags(struct command *cmd, const struct
const struct keywords *k = 0;
error_msg_t e = parse_flag(cmd, regs, &k, optional);
while (!e && k) {
if (k->val & alt_cmd_trans)
*how &=~ alt_cmd_trans;
*how |= k->val;
if (k->val & alt_cmd_addr) {
*cc = *cc & alt_cmd_write | k->val & 0xffff;
*name = k->name;
if ((k->val & alt_cmd_dflag)) {
unsigned int a = (k->val & alt_cmd_daddr) >> 16;
if (a && a != *cc & (alt_cmd_daddr>>16)) {
e = &parser_keyword_error;
break;
}
*cc |= 0x4000 | (k->val << 16);
}
else {
if (k->val & alt_cmd_trans)
*how &=~ alt_cmd_trans;
*how |= k->val;
if (k->val & alt_cmd_aflag)
*cc |= k->val & 0xffff;
else if (k->val & alt_cmd_addr) {
*cc = *cc & 0xffffc000 | k->val & 0xffff;
*name = k->name;
}
}
if (k->val & alt_cmd_aflag)
*cc |= k->val & 0xffff;
if (!optional)
optional = 1;
e = parse_flag(cmd, regs, &k, optional);

View file

@ -50,6 +50,8 @@ enum {
alt_cmd_save = 0x8000000,
alt_cmd_force = 0x10000000,
alt_cmd_aflag = 0x20000000,
alt_cmd_dflag = 0x40000000,
alt_cmd_daddr = 0x3fff0000,
alt_cmd_nkeyw = 0x80000000,
alt_cmd_write = 0x4000,
alt_cmd_addr = 0x8000,
@ -58,6 +60,7 @@ enum {
#define ALT_CMD_KW(p) (&(p)->name)
#define ALT_CMD_AD(a) ((const void*)((a)|alt_cmd_nkeyw|alt_cmd_addr))
#define ALT_CMD_AF(a) ((const void*)((a)|alt_cmd_nkeyw|alt_cmd_aflag))
#define ALT_CMD_DF(a, d) ((const void*)((d)|((a)<<16)&alt_cmd_daddr|alt_cmd_nkeyw|alt_cmd_dflag))
#define ALT_CMD_FG(f) ((const void*)((f)|alt_cmd_nkeyw))
enum {

49
dorn.c
View file

@ -3,26 +3,39 @@
#include "altera.h"
static const struct keywords dorn_fifo_kw[] = {
{"read", {.par= ALT_CMD_AF( 0) }},
{"empty", {.par= ALT_CMD_AF( 4) }},
{"packet", {.par= ALT_CMD_AF( 5) }},
{"full", {.par= ALT_CMD_AF( 6) }},
{"enable", {.par= ALT_CMD_AF( 7) }},
{"hbase", {.par= ALT_CMD_AF( 8) }},
{"strobe", {.par= ALT_CMD_AF(11) }},
{"mwrite", {.par= ALT_CMD_AF(12) }},
{"mdata", {.par= ALT_CMD_AF(13) }},
{"maddr", {.par= ALT_CMD_AF(14) }},
{"mnext", {.par= ALT_CMD_AF(15) }},
{"read", {.par= ALT_CMD_AD(0x2080 | alt_cmd_read | alt_cmd_inj) }},
{"empty", {.par= ALT_CMD_AD(0x2084 | alt_cmd_read) }},
{"clear", {.par= ALT_CMD_AD(0x2084) }},
{"packet", {.par= ALT_CMD_AD(0x2085 | alt_cmd_read) }},
{"readfifo", {.par= ALT_CMD_AD(0x2085) }},
{"full", {.par= ALT_CMD_AD(0x2086 | alt_cmd_read) }},
{"enable", {.par= ALT_CMD_AD(0x2087) }},
{"hbase", {.par= ALT_CMD_AD(0x2088) }},
{"strobe", {.par= ALT_CMD_AD(0x208b | alt_cmd_inj) }},
{"mwrite", {.par= ALT_CMD_AD(0x208c) }},
{"mdata", {.par= ALT_CMD_AD(0x208d) }},
{"maddr", {.par= ALT_CMD_AD(0x208e) }},
{"mnext", {.par= ALT_CMD_AD(0x208f) }},
{"s_hk", {.par= ALT_CMD_DF(0x208b, 0x00f0) }},
{"s_reset", {.par= ALT_CMD_DF(0x208b, 0x710e) }},
{"s_read", {.par= ALT_CMD_DF(0x208b, 0x0001) }},
{"s_resync", {.par= ALT_CMD_DF(0x208b, 0x0004) }},
{"s_clock", {.par= ALT_CMD_DF(0x208b, 0x0008) }},
{"s_dorn", {.par= ALT_CMD_DF(0x208b, 0x0100) }},
{"e_enable", {.par= ALT_CMD_DF(0x2087, 0x0fff) }},
{"e_disable",{.par= ALT_CMD_DF(0x2087, 0x0000) }},
{"e_men", {.par= ALT_CMD_DF(0x2087, 0x001f) }},
{"e_s1", {.par= ALT_CMD_DF(0x2087, 0x0001) }},
{"e_s2", {.par= ALT_CMD_DF(0x2087, 0x0002) }},
{"e_s3", {.par= ALT_CMD_DF(0x2087, 0x0004) }},
{"e_s4", {.par= ALT_CMD_DF(0x2087, 0x0008) }},
{"e_rfifo", {.par= ALT_CMD_DF(0x2087, 0x0020) }},
{"e_hk", {.par= ALT_CMD_DF(0x2087, 0x0240) }},
{"e_ev", {.par= ALT_CMD_DF(0x2087, 0x0480) }},
{"e_sa", {.par= ALT_CMD_DF(0x2087, 0x0900) }},
KW_END
};
int dorn_fifo(struct command *cmd, const struct command_par *par)
{
return altera_set_register(cmd, par, dorn_fifo_kw, 0,
(unsigned int)par->par, "fifo");
}
static const struct keywords dorn_trigger_kw[] = {
{"t1", {.par= ALT_CMD_AF( 8) }},
{"t2", {.par= ALT_CMD_AF( 9) }},
@ -95,7 +108,7 @@ int dorn_l3(struct command *cmd, const struct command_par *par)
}
static const struct keywords dorn_commands[] = {
CMD_KW("fifo", dorn_fifo, 255, (void*)(0xa080)),
CMD_KW("fifo", altera_cmd, 255, &dorn_fifo_kw),
CMD_KW("enable", dorn_trigger, 255, (void*)(0xa008)),
CMD_KW("thres", dorn_l1, 255, (void*)(0xe040|alt_cmd_inj)),
CMD_KW("l1", dorn_l1, 255, (void*)(0xe040|alt_cmd_inj)),

View file

@ -1,8 +1,8 @@
@clock/short
@v S=sec%12
@s/if hk_mes>1: v hk_c=1
@s/if hk_mes>1: v hk_count=1
@s/if !S: nm/cou/re/cl/fl; s/exit
@s/if S&1 and I: al/cmd/inj I; s/exit
@s/if S&1: i2c/run; s/exit
@s/if S&2: pres/inj; s/exit
@s/if S&4: v hk_c=1; s/exit
@s/if S&8 and H: al/cmd/inj H; s/exit
@s/if S&4: v hk_count=1; s/exit
@s/if S&8: dorn/fifo/strobe/inj 0x30; s/exit

View file

@ -141,4 +141,4 @@
@i2c/read[0x05]
@i2c/stop
@i2c/wait/loop[97]
echo "i2c/run[0x00,142]"
@v i2c_size = i2c_size-1

View file

@ -4,3 +4,4 @@ INIT.RC script loaded at startup
NMAHEPAM.RBF Altera FPGA bitfile, Cyclone 10CL025
CRON.RC cron script, to to HK every Minute
SN14.RC unit config
I2C.RC SETH magnetometer and accelerometer config

4
i2c.c
View file

@ -128,7 +128,7 @@ int i2c_addr(struct command *cmd, const struct command_par *par)
case 0x4001:
i2c_size += 1;
}
return altera_set_register(cmd, par, 0, how, n, "i2c");
return altera_set_register(cmd, par, 0, how, n, n&1 ? "i2c/data" : "i2c/addr");
}
static const
@ -181,7 +181,7 @@ int i2c_header(struct command *cmd, const struct command_par *par)
if (e)
return parser_error_message(cmd, e);
i2c_size ++;
return altera_set_register(cmd, par, 0, alt_cmd_inj, cc, "i2c");
return altera_set_register(cmd, par, 0, alt_cmd_inj, cc, "i2c/head");
}
static const struct keywords i2c_commands[] = {