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 *.log
nm64file nm64file
mustang_scripts 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; case 0xc364: x = nm_counters(h1); break;
default: default:
if ((h1 & 0xfff0)==0x12c0) { x = i2c(h1); break; } if ((h1 & 0xfff0)==0x12c0) { x = i2c(h1); break; }
if ((h1 & 0xff00)==0xba00) { x = pressure(h1); break; }
switch (h1 & 0xfffc) { switch (h1 & 0xfffc) {
case 0x5710: x = dorn_hk(h1, n_adcs, 1); break; case 0x5710: x = dorn_hk(h1, n_adcs, 1); break;
case 0x5714: x = dorn_samples(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; const struct keywords *k = 0;
error_msg_t e = parse_flag(cmd, regs, &k, optional); error_msg_t e = parse_flag(cmd, regs, &k, optional);
while (!e && k) { while (!e && k) {
if (k->val & alt_cmd_trans) if ((k->val & alt_cmd_dflag)) {
*how &=~ alt_cmd_trans; unsigned int a = (k->val & alt_cmd_daddr) >> 16;
*how |= k->val; if (a && a != *cc & (alt_cmd_daddr>>16)) {
if (k->val & alt_cmd_addr) { e = &parser_keyword_error;
*cc = *cc & alt_cmd_write | k->val & 0xffff; break;
*name = k->name; }
*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) if (!optional)
optional = 1; optional = 1;
e = parse_flag(cmd, regs, &k, optional); e = parse_flag(cmd, regs, &k, optional);

View file

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

49
dorn.c
View file

@ -3,26 +3,39 @@
#include "altera.h" #include "altera.h"
static const struct keywords dorn_fifo_kw[] = { static const struct keywords dorn_fifo_kw[] = {
{"read", {.par= ALT_CMD_AF( 0) }}, {"read", {.par= ALT_CMD_AD(0x2080 | alt_cmd_read | alt_cmd_inj) }},
{"empty", {.par= ALT_CMD_AF( 4) }}, {"empty", {.par= ALT_CMD_AD(0x2084 | alt_cmd_read) }},
{"packet", {.par= ALT_CMD_AF( 5) }}, {"clear", {.par= ALT_CMD_AD(0x2084) }},
{"full", {.par= ALT_CMD_AF( 6) }}, {"packet", {.par= ALT_CMD_AD(0x2085 | alt_cmd_read) }},
{"enable", {.par= ALT_CMD_AF( 7) }}, {"readfifo", {.par= ALT_CMD_AD(0x2085) }},
{"hbase", {.par= ALT_CMD_AF( 8) }}, {"full", {.par= ALT_CMD_AD(0x2086 | alt_cmd_read) }},
{"strobe", {.par= ALT_CMD_AF(11) }}, {"enable", {.par= ALT_CMD_AD(0x2087) }},
{"mwrite", {.par= ALT_CMD_AF(12) }}, {"hbase", {.par= ALT_CMD_AD(0x2088) }},
{"mdata", {.par= ALT_CMD_AF(13) }}, {"strobe", {.par= ALT_CMD_AD(0x208b | alt_cmd_inj) }},
{"maddr", {.par= ALT_CMD_AF(14) }}, {"mwrite", {.par= ALT_CMD_AD(0x208c) }},
{"mnext", {.par= ALT_CMD_AF(15) }}, {"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 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[] = { static const struct keywords dorn_trigger_kw[] = {
{"t1", {.par= ALT_CMD_AF( 8) }}, {"t1", {.par= ALT_CMD_AF( 8) }},
{"t2", {.par= ALT_CMD_AF( 9) }}, {"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[] = { 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("enable", dorn_trigger, 255, (void*)(0xa008)),
CMD_KW("thres", dorn_l1, 255, (void*)(0xe040|alt_cmd_inj)), CMD_KW("thres", dorn_l1, 255, (void*)(0xe040|alt_cmd_inj)),
CMD_KW("l1", 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 @clock/short
@v S=sec%12 @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: 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&2: pres/inj; s/exit
@s/if S&4: v hk_c=1; s/exit @s/if S&4: v hk_count=1; s/exit
@s/if S&8 and H: al/cmd/inj H; s/exit @s/if S&8: dorn/fifo/strobe/inj 0x30; s/exit

View file

@ -141,4 +141,4 @@
@i2c/read[0x05] @i2c/read[0x05]
@i2c/stop @i2c/stop
@i2c/wait/loop[97] @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 NMAHEPAM.RBF Altera FPGA bitfile, Cyclone 10CL025
CRON.RC cron script, to to HK every Minute CRON.RC cron script, to to HK every Minute
SN14.RC unit config 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: case 0x4001:
i2c_size += 1; 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 static const
@ -181,7 +181,7 @@ int i2c_header(struct command *cmd, const struct command_par *par)
if (e) if (e)
return parser_error_message(cmd, e); return parser_error_message(cmd, e);
i2c_size ++; 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[] = { static const struct keywords i2c_commands[] = {