Skip to content

Commit

Permalink
Make delays more accurate (#23).
Browse files Browse the repository at this point in the history
  • Loading branch information
agatti committed Nov 20, 2016
1 parent 965846d commit 4685d15
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 66 deletions.
17 changes: 3 additions & 14 deletions Firmware/1wire.c
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,6 @@ void onewire_reset(void) {

onewire_bus_reset_result_t perform_bus_reset(void) {
onewire_bus_reset_result_t result;
size_t delay;

result = ONEWIRE_BUS_RESET_OK;

Expand All @@ -579,16 +578,8 @@ onewire_bus_reset_result_t perform_bus_reset(void) {
/*
* According to specification a minimum of 480us need to be waited before
* reading the line.
*
* @todo: why not bp_delay_us(490); instead? Need to test on an analyzer.
*
* On the old code it was mentioned that looping 34 times, including
* compensating the loop code being executed, pauses the board for exactly
* 491us.
*/
for (delay = 0; delay < 34; delay++) {
bp_delay_us(10);
}
bp_delay_us(500);

/* Release the bus. */
ONEWIRE_DATA_DIRECTION = INPUT;
Expand All @@ -600,10 +591,8 @@ onewire_bus_reset_result_t perform_bus_reset(void) {
result = ONEWIRE_BUS_RESET_NO_DEVICE;
}

/* Wait for 506us. */
for (delay = 0; delay < 35; delay++) {
bp_delay_us(10);
}
/* Wait for 500us. */
bp_delay_us(500);

/* Read the data line. */
if (ONEWIRE_DATA_LINE == LOW) {
Expand Down
35 changes: 0 additions & 35 deletions Firmware/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,41 +207,6 @@ void bp_write_formatted_integer(unsigned int value) {
}
}

void bp_delay_ms(unsigned int milliseconds) {
unsigned int counter;

for (counter = 0; counter < milliseconds; counter++) {
bp_delay_us(250);
bp_delay_us(250);
bp_delay_us(250);
bp_delay_us(250);
}
}

void bp_delay_us(unsigned int microseconds) {
unsigned int counter;

/* When running at 32MHz, it can execute 16 instructions per uS */
for (counter = 0; counter < microseconds; counter++) {
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
}
}

unsigned int bp_reverse_integer(unsigned int value) {
unsigned int reversed = 0, bitmask;

Expand Down
12 changes: 9 additions & 3 deletions Firmware/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,17 @@
#ifndef BP_BASE_H
#define BP_BASE_H

#include <p24Fxxxx.h>
/**
* MCU Operating Frequency, in Hz.
*/
#define FCY 16000000UL

#include <libpic30.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <xc.h>

#include "configuration.h"
#include "messages.h"
Expand Down Expand Up @@ -182,13 +188,13 @@ void bp_write_formatted_integer(unsigned int value);
*
* @param[in] milliseconds the amount of milliseconds to wait.
*/
void bp_delay_ms(unsigned int milliseconds);
#define bp_delay_ms(milliseconds) __delay_ms(milliseconds)

/**
* Pauses execution for the given amount of microseconds.
*
* @param[in] microseconds the amount of microseconds to wait.
*/
void bp_delay_us(unsigned int microseconds);
#define bp_delay_us(microseconds) __delay_us(microseconds)

#endif /* !BP_BASE_H */
36 changes: 22 additions & 14 deletions Firmware/busPirate.X/nbproject/configurations.xml
Original file line number Diff line number Diff line change
Expand Up @@ -433,26 +433,19 @@
<property key="memories.flashdata" value="true"/>
<property key="memories.id" value="true"/>
<property key="memories.instruction.ram" value="true"/>
<property key="memories.instruction.ram.end"
value="${memories.instruction.ram.end.value}"/>
<property key="memories.instruction.ram.start"
value="${memories.instruction.ram.start.value}"/>
<property key="memories.instruction.ram.ranges"
value="${memories.instruction.ram.ranges}"/>
<property key="memories.programmemory" value="true"/>
<property key="memories.programmemory.end" value="0xabfb"/>
<property key="memories.programmemory.partition2" value="true"/>
<property key="memories.programmemory.partition2.end"
value="${memories.programmemory.partition2.end.value}"/>
<property key="memories.programmemory.partition2.start"
value="${memories.programmemory.partition2.start.value}"/>
<property key="memories.programmemory.start" value="0x0"/>
<property key="memories.programmemory.ranges" value="0-abfb"/>
<property key="poweroptions.powerenable" value="false"/>
<property key="programoptions.donoteraseauxmem" value="false"/>
<property key="programoptions.eraseb4program" value="true"/>
<property key="programoptions.preservedataflash" value="false"/>
<property key="programoptions.preservedataflash.ranges" value=""/>
<property key="programoptions.preserveeeprom" value="false"/>
<property key="programoptions.preserveeeprom.ranges" value=""/>
<property key="programoptions.preserveprogram.ranges" value=""/>
<property key="programoptions.preserveprogramrange" value="false"/>
<property key="programoptions.preserveprogramrange.end" value="0xabfb"/>
<property key="programoptions.preserveprogramrange.start" value="0x0"/>
<property key="programoptions.preserveuserid" value="false"/>
<property key="programoptions.programcalmem" value="false"/>
<property key="programoptions.programuserotp" value="false"/>
Expand Down Expand Up @@ -925,7 +918,7 @@
<property key="general-write-protect" value="no_write_protect"/>
<property key="generate-cross-reference-file" value="true"/>
<property key="heap-size" value=""/>
<property key="input-libraries" value=""/>
<property key="input-libraries" value="pic30-elf"/>
<property key="linker-stack" value="true"/>
<property key="linker-symbols" value=""/>
<property key="map-file" value="BusPirate_V4.map"/>
Expand Down Expand Up @@ -1070,6 +1063,9 @@
value="report"/>
<property key="warningmessagebreakoptions.W0027_CORE_UNIMPLEMENTED_EDSACCESS"
value="report"/>
<property key="warningmessagebreakoptions.W0028_TBLRD_WORM_CONFIG_MEMORY"
value="report"/>
<property key="warningmessagebreakoptions.W0029_TBLRD_DEVICE_ID" value="report"/>
<property key="warningmessagebreakoptions.W0031_BSLIM_INSUFFICIENT_BOOT_SEGMENT"
value="report"/>
<property key="warningmessagebreakoptions.W0032_BSLIM_LIMITS_EXCEEDS_PROG_MEMORY"
Expand Down Expand Up @@ -1199,6 +1195,12 @@
<property key="warningmessagebreakoptions.W1600_PPS_INVALID_MAP" value="report"/>
<property key="warningmessagebreakoptions.W1601_PPS_INVALID_PIN_DESCRIPTION"
value="report"/>
<property key="warningmessagebreakoptions.W1800_PWM_TIMER_SELECTION_NOT_AVIALABLE"
value="report"/>
<property key="warningmessagebreakoptions.W1801_PWM_TIMER_SELECTION_BAD_CLOCK_INPUT"
value="report"/>
<property key="warningmessagebreakoptions.W1802_PWM_TIMER_MISSING_PERSCALER_INFO"
value="report"/>
<property key="warningmessagebreakoptions.W2001_INPUTCAPTURE_TMR3_UNAVAILABLE"
value="report"/>
<property key="warningmessagebreakoptions.W2002_INPUTCAPTURE_CAPTURE_EMPTY"
Expand All @@ -1219,6 +1221,8 @@
value="report"/>
<property key="warningmessagebreakoptions.W7003_SMT_WIN_SELECTION_NOT_SUPPORT"
value="report"/>
<property key="warningmessagebreakoptions.W8001_OSC_INVALID_CLOCK_SOURCE"
value="report"/>
<property key="warningmessagebreakoptions.W9001_TMR_GATE_AND_EXTCLOCK_ENABLED"
value="report"/>
<property key="warningmessagebreakoptions.W9002_TMR_NO_PIN_AVAILABLE"
Expand Down Expand Up @@ -1248,6 +1252,10 @@
value="report"/>
<property key="warningmessagebreakoptions.W9605_COMP_PRG_SOURCE_UNAVAILABLE"
value="report"/>
<property key="warningmessagebreakoptions.W9607_COMP_DGTL_FLTR_OPTION_UNAVAILABLE"
value="report"/>
<property key="warningmessagebreakoptions.W9609_COMP_DGTL_FLTR_CLK_UNAVAILABLE"
value="report"/>
<property key="warningmessagebreakoptions.W9801_FVR_INVALID_MODE_SELECTION"
value="report"/>
<property key="warningmessagebreakoptions.W9801_SCL_BAD_SUBTYPE_INDICATION"
Expand Down

0 comments on commit 4685d15

Please sign in to comment.