rl78/g10 paramsearch: functional, but not finding any good param set
This commit is contained in:
parent
d45c4a95a9
commit
83aca5a0fb
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <hardware/adc.h>
|
#include <hardware/adc.h>
|
||||||
|
@ -45,7 +46,7 @@ sec: flg=fe bot=03 fsws=0000 fswe=003f
|
||||||
|
|
||||||
static uint8_t databuf[DUMP_SIZE];
|
static uint8_t databuf[DUMP_SIZE];
|
||||||
static struct glitch_param_randrange offset;
|
static struct glitch_param_randrange offset;
|
||||||
static struct glitch_param_adc length;
|
static struct glitch_param_randrange/*adc*/ length;
|
||||||
|
|
||||||
static bool glitch_init_core1_stuff(bool exttrig, uint glitchpin) {
|
static bool glitch_init_core1_stuff(bool exttrig, uint glitchpin) {
|
||||||
offset.min = 10*1000;
|
offset.min = 10*1000;
|
||||||
|
@ -53,14 +54,15 @@ static bool glitch_init_core1_stuff(bool exttrig, uint glitchpin) {
|
||||||
length.min = 100;
|
length.min = 100;
|
||||||
length.max = 50/*26*/*1000;
|
length.max = 50/*26*/*1000;
|
||||||
#if PINOUT_USE_DRAGONZAP
|
#if PINOUT_USE_DRAGONZAP
|
||||||
length.adc_index = 0;//999;
|
//length.adc_index = 0;//999;
|
||||||
#else
|
#else
|
||||||
#error "a"
|
#error "a"
|
||||||
length.adc_index = 999;
|
//length.adc_index = 999;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glitch_param_randrange_init(&offset);
|
glitch_param_randrange_init(&offset);
|
||||||
glitch_param_adc_init(&length);
|
glitch_param_randrange_init(&length);
|
||||||
|
//glitch_param_adc_init(&length);
|
||||||
|
|
||||||
// REGC = 2.11V / 0.47..1 uF // WUFM: REGC = 1.80V // BUT: OCD mode: always 2.1!
|
// REGC = 2.11V / 0.47..1 uF // WUFM: REGC = 1.80V // BUT: OCD mode: always 2.1!
|
||||||
static struct glitch_params gparam = (struct glitch_params){
|
static struct glitch_params gparam = (struct glitch_params){
|
||||||
|
@ -95,9 +97,9 @@ static bool glitch_init_core1_stuff(bool exttrig, uint glitchpin) {
|
||||||
};
|
};
|
||||||
gparam.length_ns = (struct glitch_param){
|
gparam.length_ns = (struct glitch_param){
|
||||||
.ud = &length,
|
.ud = &length,
|
||||||
.getter = glitch_param_adc_fn
|
.getter = glitch_param_randrange_fn,//adc_fn
|
||||||
};
|
};
|
||||||
gparam.trigger_in_pin = exttrig ? TRIGGER_IN_PIN : (-1);
|
gparam.trigger_in_pin = exttrig ? TRIGGER_IN_PIN/*7*/ : (-1);
|
||||||
return glitch_ready(&gparam);
|
return glitch_ready(&gparam);
|
||||||
}
|
}
|
||||||
static void glitch_init_pwm_stuff(void) {
|
static void glitch_init_pwm_stuff(void) {
|
||||||
|
@ -578,23 +580,26 @@ void cli_tool78_glitch_param_g10(void) {
|
||||||
zap_dac_set_shutdown(false);
|
zap_dac_set_shutdown(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//zap_max_init(false, true);
|
||||||
zap_max_use_vhi_jp300(true);
|
zap_max_use_vhi_jp300(true);
|
||||||
zap_max_set_inhibit(false);
|
zap_max_set_inhibit(false);
|
||||||
|
|
||||||
if (!glitch_init_core1_stuff(true, GLITCH_OUT_PIN)) {
|
if (!glitch_init_core1_stuff(true, ZAP_GLITCH_OUT)) {
|
||||||
printf("bad glitcher params!\n");
|
printf("bad glitcher params!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t passwd[10] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
uint8_t passwd[10] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||||||
enum tool78_stat st;
|
enum tool78_stat st;
|
||||||
|
uint16_t vvv=0xffff;
|
||||||
int rr;
|
int rr;
|
||||||
static uint8_t checkbuf[256];
|
static uint8_t checkbuf[256];
|
||||||
|
volatile uint32_t *off, *len;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
/*glitch_disarm();
|
glitch_disarm();
|
||||||
busy_wait_ms(40);*/
|
/*busy_wait_ms(40);*/
|
||||||
|
|
||||||
st = tool78_init_ocd(hw, NULL, passwd);
|
st = tool78_init_ocd(hw, NULL, passwd);
|
||||||
if (st == 0xc3) {
|
if (st == 0xc3) {
|
||||||
|
@ -609,7 +614,14 @@ restart:
|
||||||
}
|
}
|
||||||
//printf("result: 0x%02x ver=%04x\n", st, ver);
|
//printf("result: 0x%02x ver=%04x\n", st, ver);
|
||||||
if (st != 0xf2 && st != 0xf0) {
|
if (st != 0xf2 && st != 0xf0) {
|
||||||
|
if (st == 0xf3) { // idk
|
||||||
|
gpio_put(12, true);
|
||||||
|
printf("init: 0x%02x off=%lu len=%lu vv=%03x\n", st, *off, *len, vvv);
|
||||||
|
gpio_put(12, false);
|
||||||
|
goto do_reset_stuff;
|
||||||
|
} else {
|
||||||
printf("init: 0x%02x\n", st);
|
printf("init: 0x%02x\n", st);
|
||||||
|
}
|
||||||
goto deinit_bad;
|
goto deinit_bad;
|
||||||
}
|
}
|
||||||
if (first) printf("result: 0x%02x\n", st);
|
if (first) printf("result: 0x%02x\n", st);
|
||||||
|
@ -660,7 +672,6 @@ restart:
|
||||||
goto deinit_bad;
|
goto deinit_bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// wait for completion
|
// wait for completion
|
||||||
rr = hw->recv(2, checkbuf, 150*1000);
|
rr = hw->recv(2, checkbuf, 150*1000);
|
||||||
if (rr != 2) {
|
if (rr != 2) {
|
||||||
|
@ -697,11 +708,22 @@ restart:
|
||||||
if (first) printf("all set, let's go\n");
|
if (first) printf("all set, let's go\n");
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
|
gpio_init(12);
|
||||||
|
gpio_set_dir(12, GPIO_OUT);
|
||||||
|
gpio_set_function(12, GPIO_FUNC_SIO);
|
||||||
|
gpio_put(12, false);
|
||||||
|
/*gpio_init(7);
|
||||||
|
gpio_set_dir(7, GPIO_IN);*/
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
//glitch_arm();
|
//vvv = zap_adc_read(1);
|
||||||
|
vvv = (random() & 0x3ff) + 0x400;
|
||||||
|
zap_dac_set_b(vvv);
|
||||||
|
zap_dac_latch();
|
||||||
|
glitch_arm();
|
||||||
rr = hw->recv(2, checkbuf, 150*1000);
|
rr = hw->recv(2, checkbuf, 150*1000);
|
||||||
//printf("rr=%d cb=%02x %02x\n", rr, checkbuf[0], checkbuf[1]);
|
//printf("rr=%d cb=%02x %02x\n", rr, checkbuf[0], checkbuf[1]);
|
||||||
//glitch_disarm();
|
glitch_disarm();
|
||||||
if (rr == 2 && (checkbuf[0] != 'H' || checkbuf[1] != 'i')) rr = 0;
|
if (rr == 2 && (checkbuf[0] != 'H' || checkbuf[1] != 'i')) rr = 0;
|
||||||
if (rr == 2) {
|
if (rr == 2) {
|
||||||
rr = hw->recv(lenlen, checkbuf, 150*1000);
|
rr = hw->recv(lenlen, checkbuf, 150*1000);
|
||||||
|
@ -711,6 +733,9 @@ restart:
|
||||||
if (rr <= 0) {
|
if (rr <= 0) {
|
||||||
// timeout or something
|
// timeout or something
|
||||||
printf("X");
|
printf("X");
|
||||||
|
off = (volatile uint32_t*)&glitch_param_cur.offset_ns.cur;
|
||||||
|
len = (volatile uint32_t*)&glitch_param_cur.length_ns.cur;
|
||||||
|
printf("X off=%lu len=%lu vv=%03x\n", *off, *len, vvv);
|
||||||
hw->deinit();
|
hw->deinit();
|
||||||
goto do_reset_stuff;
|
goto do_reset_stuff;
|
||||||
} else {
|
} else {
|
||||||
|
@ -722,29 +747,31 @@ restart:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (firstbad >= 0) {
|
if (firstbad >= 0) {
|
||||||
volatile uint32_t
|
//gpio_put(12, true);
|
||||||
*off = (volatile uint32_t*)&glitch_param_cur.offset_ns.cur,
|
off = (volatile uint32_t*)&glitch_param_cur.offset_ns.cur;
|
||||||
*len = (volatile uint32_t*)&glitch_param_cur.length_ns.cur;
|
len = (volatile uint32_t*)&glitch_param_cur.length_ns.cur;
|
||||||
printf("glitch first=%d last=%d off=%lu len=%lu rr=%d v=%02x\n",
|
printf("glitch first=%d last=%d off=%lu len=%lu vvv=%03x rr=%d v=%02x\n",
|
||||||
firstbad, lastbad, *off, *len, rr, checkbuf[firstbad]^0xaa);
|
firstbad, lastbad, *off, *len, vvv, rr, checkbuf[firstbad]^0xaa);
|
||||||
|
//gpio_put(12, false);
|
||||||
} else {
|
} else {
|
||||||
printf(".");
|
printf(".");
|
||||||
|
printf("NN off=%lu len=%lu vv=%03x\n", *off, *len, vvv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deinit_bad:
|
deinit_bad:
|
||||||
busy_wait_ms(1000);
|
busy_wait_ms(500);
|
||||||
hw->deinit();
|
hw->deinit();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
do_reset_stuff:
|
do_reset_stuff:
|
||||||
busy_wait_ms(1000);
|
busy_wait_ms(300);
|
||||||
hw->deinit();
|
hw->deinit();
|
||||||
|
|
||||||
// glitch for way too long to power cycle
|
// glitch for way too long to power cycle
|
||||||
sio_hw->gpio_set = 1u << GLITCH_OUT_PIN;
|
sio_hw->gpio_set = 1u << ZAP_GLITCH_OUT;
|
||||||
busy_wait_ms(16);
|
busy_wait_ms(16);
|
||||||
sio_hw->gpio_clr = 1u << GLITCH_OUT_PIN;
|
sio_hw->gpio_clr = 1u << ZAP_GLITCH_OUT;
|
||||||
|
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
@ -852,9 +879,9 @@ void cli_tool78_glitch_ocd_g10(void) {
|
||||||
// hw->deinit();
|
// hw->deinit();
|
||||||
//
|
//
|
||||||
// // glitch for way too long to power cycle
|
// // glitch for way too long to power cycle
|
||||||
// sio_hw->gpio_set = 1u << GLITCH_OUT_PIN;
|
// sio_hw->gpio_set = 1u << ZAP_GLITCH_OUT;
|
||||||
// busy_wait_ms(16);
|
// busy_wait_ms(16);
|
||||||
// sio_hw->gpio_clr = 1u << GLITCH_OUT_PIN;
|
// sio_hw->gpio_clr = 1u << ZAP_GLITCH_OUT;
|
||||||
//
|
//
|
||||||
// goto restart;
|
// goto restart;
|
||||||
//
|
//
|
||||||
|
|
|
@ -186,7 +186,8 @@ static void CORE1_FUNC(glitch_core1_thread_pio)(void) {
|
||||||
|
|
||||||
trigctl_wait_glitch_irq(trigctl_pio, trigctl_sm, true);
|
trigctl_wait_glitch_irq(trigctl_pio, trigctl_sm, true);
|
||||||
trigctl_ack_glitch_irq(trigctl_pio, trigctl_sm);
|
trigctl_ack_glitch_irq(trigctl_pio, trigctl_sm);
|
||||||
gpio_put(25, true);
|
//gpio_put(25, true);
|
||||||
|
//sio_hw->gpio_togl = 1u<<25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,6 +296,7 @@ bool CORE0_FUNC(glitch_ready)(const struct glitch_params* params) {
|
||||||
|
|
||||||
gpio_init(25);
|
gpio_init(25);
|
||||||
gpio_set_dir(25, GPIO_OUT);
|
gpio_set_dir(25, GPIO_OUT);
|
||||||
|
gpio_set_function(25, GPIO_FUNC_SIO);
|
||||||
gpio_put(25, false);
|
gpio_put(25, false);
|
||||||
|
|
||||||
// let's not care about impl and always use core1 for now
|
// let's not care about impl and always use core1 for now
|
||||||
|
|
|
@ -16,6 +16,7 @@ public _start:
|
||||||
|
|
||||||
irq clear 0 rel
|
irq clear 0 rel
|
||||||
|
|
||||||
|
mov isr, x
|
||||||
public waitinsn:
|
public waitinsn:
|
||||||
wait 1 pin 0 ; or "wait irq 1 rel"
|
wait 1 pin 0 ; or "wait irq 1 rel"
|
||||||
|
|
||||||
|
@ -31,6 +32,10 @@ lenloop:
|
||||||
|
|
||||||
irq set 0 rel
|
irq set 0 rel
|
||||||
|
|
||||||
|
;set x, 15
|
||||||
|
mov x, isr
|
||||||
|
offloop2:
|
||||||
|
jmp x-- offloop2 ;[15]
|
||||||
public wait2:
|
public wait2:
|
||||||
wait 0 pin 0 ; or "nop"
|
wait 0 pin 0 ; or "nop"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue