Compare commits
3 commits
5954e875b1
...
47be0651b0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47be0651b0 | ||
|
|
bcf8f25f7a | ||
|
|
bff7cdb5d4 |
4 changed files with 87 additions and 22 deletions
4
Makefile
4
Makefile
|
|
@ -107,7 +107,9 @@ CPUA= -mlittle-endian -mcpu=arm7tdmi
|
|||
CPUC= $(CPUA) -msoft-float -mno-thumb-interwork -mpoke-function-name
|
||||
DEBUGFORMAT=-g -gdwarf-2
|
||||
|
||||
WARN = -Wall -Wextra -Wno-char-subscripts -Wno-unused -Wno-pointer-sign -Wno-parentheses $(WWARN)
|
||||
WARN = -Wall -Wextra -Wno-char-subscripts -Wno-unused -Wno-pointer-sign \
|
||||
-Wno-parentheses -Wno-missing-field-initializers \
|
||||
$(WWARN)
|
||||
BUILTIN = --no-builtin-snprintf -fno-builtin-printf
|
||||
|
||||
CC=$(ARCH)-gcc-$(GCC) -std=gnu99 -O3 $(CPUC) $(WARN) $(BUILTIN)
|
||||
|
|
|
|||
94
pressure.c
94
pressure.c
|
|
@ -52,6 +52,78 @@ int calib_pressure(int hashit)
|
|||
return idx;
|
||||
}
|
||||
|
||||
extern const struct timer_wait wait_conversion;
|
||||
unsigned int bate_status;
|
||||
|
||||
static void bate_callback(const volatile struct timer_tick* tick) {
|
||||
if (timer_wait_pin_status(&wait_conversion))
|
||||
ssp_run_batch();
|
||||
else {
|
||||
bate_status = 9;
|
||||
ssp_abort_batch();
|
||||
}
|
||||
}
|
||||
|
||||
const struct timer_wait wait_conversion = {
|
||||
.mclk = 3333, // 50 ms
|
||||
.pinmask = 1<<18, // wait for port0.18 to go low
|
||||
.callback = bate_callback,
|
||||
};
|
||||
|
||||
static const unsigned short bate_cmds[] = {
|
||||
0b0000000010101010, // 0 reset part 1
|
||||
0b1010101000000000, // 1 reset part 2
|
||||
0b0001110101010000, // 2 word 1 cmd
|
||||
0, // 3 word 1 value
|
||||
0b0001110101100000, // 4 word 2 cmd
|
||||
0, // 5 word 2 value
|
||||
0b0001110110010000, // 6 word 3 cmd
|
||||
0, // 7 word 3 value
|
||||
0b0001110110100000, // 8 word 4 cmd
|
||||
0, // 9 word 5 value
|
||||
0b0000111101000000, // 10 data 1 cmd
|
||||
// wait
|
||||
0, // 11 data 1,2 value
|
||||
0b0000111100100000, // 12 data 2 cmd
|
||||
};
|
||||
|
||||
unsigned short bate_buffer[16];
|
||||
|
||||
static const struct ssp_batch bate_batch[] = {
|
||||
[0] = {
|
||||
.ssel = ssp_conf_bate,
|
||||
.job = &(const struct ssp_job) {
|
||||
.command = bate_cmds,
|
||||
.cmd_count = 11,
|
||||
.buf_count = 16,
|
||||
.buf_ptr = bate_buffer,
|
||||
},
|
||||
.match = &(const struct ssp_match) {
|
||||
.count = 3,
|
||||
.size = 7,
|
||||
},
|
||||
},
|
||||
[1] = {
|
||||
.wait = &wait_conversion,
|
||||
.job = &(const struct ssp_job) {
|
||||
.command = bate_cmds+11,
|
||||
.cmd_count = 2,
|
||||
.read_count = 1,
|
||||
},
|
||||
},
|
||||
|
||||
[2] = {
|
||||
.wait = &wait_conversion,
|
||||
.job = &(const struct ssp_job) {
|
||||
.command = bate_cmds+11,
|
||||
.cmd_count = 1,
|
||||
.read_count = 1,
|
||||
},
|
||||
},
|
||||
|
||||
[3] = { }
|
||||
};
|
||||
|
||||
static inline
|
||||
int pressure_wait_for_conversion(int timeout)
|
||||
{
|
||||
|
|
@ -61,22 +133,6 @@ int pressure_wait_for_conversion(int timeout)
|
|||
|
||||
int read_pressure(int from_phase, int to_phase, int value, int idx)
|
||||
{
|
||||
static const unsigned short cmds[] = {
|
||||
0b0000000010101010, // 0 reset part 1
|
||||
0b1010101000000000, // 1 reset part 2
|
||||
0b0001110101010000, // 2 word 1 cmd
|
||||
0, // 3 word 1 value
|
||||
0b0001110101100000, // 4 word 2 cmd
|
||||
0, // 5 word 2 value
|
||||
0b0001110110010000, // 6 word 3 cmd
|
||||
0, // 7 word 3 value
|
||||
0b0001110110100000, // 8 word 4 cmd
|
||||
0, // 9 word 5 value
|
||||
0b0000111101000000, // 10 data 1 cmd
|
||||
// wait
|
||||
0, // 11 data 1,2 value
|
||||
0b0000111100100000, // 12 data 2 cmd
|
||||
};
|
||||
int r = 0;
|
||||
int timeout;
|
||||
for (int phase = from_phase; !r && phase <= to_phase; phase++)
|
||||
|
|
@ -87,7 +143,7 @@ int read_pressure(int from_phase, int to_phase, int value, int idx)
|
|||
ssp_assert_ssel();
|
||||
ssp_set_buffer(pressure_reading, 8);
|
||||
ssp_set_read(3, 8);
|
||||
r = ssp_submit(cmds, 11, 0, 0);
|
||||
r = ssp_submit(bate_cmds, 11, 0, 0);
|
||||
break;
|
||||
case 2:
|
||||
case 6:
|
||||
|
|
@ -110,9 +166,9 @@ int read_pressure(int from_phase, int to_phase, int value, int idx)
|
|||
break;
|
||||
case 5: ssp_set_buffer(pressure_reading+6, 2);
|
||||
ssp_set_read(0, 0);
|
||||
r = ssp_submit(cmds+11, 2, 0, 1);
|
||||
r = ssp_submit(bate_cmds+11, 2, 0, 1);
|
||||
break;
|
||||
case 8: r = ssp_submit(cmds+11, 1, 0, 1);
|
||||
case 8: r = ssp_submit(bate_cmds+11, 1, 0, 1);
|
||||
break;
|
||||
case 10:
|
||||
ssp_deassert_ssel();
|
||||
|
|
|
|||
10
ssp.c
10
ssp.c
|
|
@ -303,13 +303,19 @@ int ssp_run_batch()
|
|||
return ssp_submit_job(batch->job);
|
||||
}
|
||||
|
||||
void ssp_abort_batch()
|
||||
{
|
||||
ssp_batch_repeats = 0;
|
||||
ssp_batch_wait = 0;
|
||||
ssp_batch = 0;
|
||||
}
|
||||
|
||||
int ssp_submit_batch(const struct ssp_batch *batch, int timeout)
|
||||
{
|
||||
unsigned int c = ssp_wait(timeout);
|
||||
if (c)
|
||||
return c;
|
||||
ssp_batch_repeats = 0;
|
||||
ssp_abort_batch();
|
||||
ssp_batch = batch;
|
||||
ssp_batch_wait = 0;
|
||||
return ssp_run_batch();
|
||||
}
|
||||
|
|
|
|||
1
ssp.h
1
ssp.h
|
|
@ -107,5 +107,6 @@ void ssp_set_read(unsigned int count, unsigned int size)
|
|||
int ssp_submit_job(const struct ssp_job *jj);
|
||||
int ssp_submit_batch(const struct ssp_batch *batch, int timeout);
|
||||
int ssp_run_batch();
|
||||
void ssp_abort_batch();
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue