diff options
author | Clifford Wolf <clifford@clifford.at> | 2017-05-03 17:00:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-03 17:00:44 +0200 |
commit | dc93d5805a42511aa32ad947e97de2495289d87f (patch) | |
tree | f8376ab7aaf19335260e7ee41abfa6e384f775a5 /iceprog/iceprog.c | |
parent | 587363b64a8b5d210a05dd6e5f91c9992db496b7 (diff) | |
parent | 05f0f33c1c24d36a92109fb3171da6564ca647df (diff) | |
download | icestorm-dc93d5805a42511aa32ad947e97de2495289d87f.tar.gz icestorm-dc93d5805a42511aa32ad947e97de2495289d87f.tar.bz2 icestorm-dc93d5805a42511aa32ad947e97de2495289d87f.zip |
Merge pull request #79 from set-soft/fix_latency_timer
Fix latency timer
Diffstat (limited to 'iceprog/iceprog.c')
-rw-r--r-- | iceprog/iceprog.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/iceprog/iceprog.c b/iceprog/iceprog.c index b0a114f..5bb7ed1 100644 --- a/iceprog/iceprog.c +++ b/iceprog/iceprog.c @@ -38,6 +38,8 @@ struct ftdi_context ftdic; bool ftdic_open = false; bool verbose = false; +bool ftdic_latency_set = false; +unsigned char ftdi_latency; void check_rx() { @@ -53,8 +55,11 @@ void error() { check_rx(); fprintf(stderr, "ABORT.\n"); - if (ftdic_open) + if (ftdic_open) { + if (ftdic_latency_set) + ftdi_set_latency_timer(&ftdic, ftdi_latency); ftdi_usb_close(&ftdic); + } ftdi_deinit(&ftdic); exit(1); } @@ -454,6 +459,19 @@ int main(int argc, char **argv) error(); } + if (ftdi_get_latency_timer(&ftdic, &ftdi_latency) < 0) { + fprintf(stderr, "Failed to get latency timer (%s).\n", ftdi_get_error_string(&ftdic)); + error(); + } + + /* 2 is the ideal value, it means 500 Hz polling */ + if (ftdi_set_latency_timer(&ftdic, 2) < 0) { + fprintf(stderr, "Failed to set latency timer (%s).\n", ftdi_get_error_string(&ftdic)); + error(); + } + + ftdic_latency_set = true; + if (ftdi_set_bitmode(&ftdic, 0xff, BITMODE_MPSSE) < 0) { fprintf(stderr, "Failed set BITMODE_MPSSE on iCE FTDI USB device.\n"); error(); @@ -692,6 +710,7 @@ int main(int argc, char **argv) // --------------------------------------------------------- fprintf(stderr, "Bye.\n"); + ftdi_set_latency_timer(&ftdic, ftdi_latency); ftdi_disable_bitbang(&ftdic); ftdi_usb_close(&ftdic); ftdi_deinit(&ftdic); |