Compare commits
6 commits
5e9c8a00c2
...
dfe1de4711
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfe1de4711 | ||
|
|
b363b82ac7 | ||
|
|
882d18f52b | ||
|
|
ad7553cff3 | ||
|
|
6e0db7e656 | ||
|
|
8a65812ae5 |
9 changed files with 62 additions and 33 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -17,3 +17,4 @@ ahepamfile
|
|||
*.log
|
||||
nm64file
|
||||
mustang_scripts
|
||||
nm64/nm64
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
26
altera.c
26
altera.c
|
|
@ -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);
|
||||
|
|
|
|||
3
altera.h
3
altera.h
|
|
@ -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
49
dorn.c
|
|
@ -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)),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -141,4 +141,4 @@
|
|||
@i2c/read[0x05]
|
||||
@i2c/stop
|
||||
@i2c/wait/loop[97]
|
||||
echo "i2c/run[0x00,142]"
|
||||
@v i2c_size = i2c_size-1
|
||||
|
|
|
|||
|
|
@ -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
4
i2c.c
|
|
@ -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[] = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue