aboutsummaryrefslogtreecommitdiffstats
path: root/iceprog/iceprog.c
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2017-05-03 17:00:44 +0200
committerGitHub <noreply@github.com>2017-05-03 17:00:44 +0200
commitdc93d5805a42511aa32ad947e97de2495289d87f (patch)
treef8376ab7aaf19335260e7ee41abfa6e384f775a5 /iceprog/iceprog.c
parent587363b64a8b5d210a05dd6e5f91c9992db496b7 (diff)
parent05f0f33c1c24d36a92109fb3171da6564ca647df (diff)
downloadicestorm-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.c21
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);