onewire_slave: minor, add space around operators
This commit is contained in:
parent
11e0653fba
commit
842b1e26bb
|
@ -12,10 +12,10 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/** library for 1-wire protocol as master (code)
|
/** library for 1-wire protocol as master
|
||||||
* @file onewire_slave.c
|
* @file
|
||||||
* @author King Kévin <kingkevin@cuvoodoo.info>
|
* @author King Kévin <kingkevin@cuvoodoo.info>
|
||||||
* @date 2017
|
* @date 2017-2020
|
||||||
* @note peripherals used: GPIO and timer @ref onewire_slave_timer, GPIO @ref onewire_slave_gpio
|
* @note peripherals used: GPIO and timer @ref onewire_slave_timer, GPIO @ref onewire_slave_gpio
|
||||||
* @note overdrive mode is not supported
|
* @note overdrive mode is not supported
|
||||||
* @implements 1-Wire protocol description from Book of iButton Standards
|
* @implements 1-Wire protocol description from Book of iButton Standards
|
||||||
|
@ -125,15 +125,15 @@ void onewire_slave_setup(uint8_t family, uint64_t serial)
|
||||||
rcc_periph_clock_enable(RCC_TIM(ONEWIRE_SLAVE_TIMER)); // enable clock for timer peripheral
|
rcc_periph_clock_enable(RCC_TIM(ONEWIRE_SLAVE_TIMER)); // enable clock for timer peripheral
|
||||||
rcc_periph_reset_pulse(RST_TIM(ONEWIRE_SLAVE_TIMER)); // reset timer state
|
rcc_periph_reset_pulse(RST_TIM(ONEWIRE_SLAVE_TIMER)); // reset timer state
|
||||||
timer_set_mode(TIM(ONEWIRE_SLAVE_TIMER), TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); // set timer mode, use undivided timer clock, edge alignment (simple count), and count up
|
timer_set_mode(TIM(ONEWIRE_SLAVE_TIMER), TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); // set timer mode, use undivided timer clock, edge alignment (simple count), and count up
|
||||||
timer_set_prescaler(TIM(ONEWIRE_SLAVE_TIMER), 1-1); // don't use prescale since this 16 bits timer allows to wait > 480 us used for the reset pulse ( 1/(72E6/1/(2**16))=910us )
|
timer_set_prescaler(TIM(ONEWIRE_SLAVE_TIMER), 1 - 1); // don't use prescale since this 16 bits timer allows to wait > 480 us used for the reset pulse ( 1/(72E6/1/(2**16))=910us )
|
||||||
|
|
||||||
// use comparator to time signal (without using the output), starting at slot start
|
// use comparator to time signal (without using the output), starting at slot start
|
||||||
timer_set_period(TIM(ONEWIRE_SLAVE_TIMER), 480*(rcc_ahb_frequency/1000000)-1-1300); // minimum time needed for a reset pulse (480 < Trst), plus hand tuning
|
timer_set_period(TIM(ONEWIRE_SLAVE_TIMER), 480 * (rcc_ahb_frequency / 1000000) - 1 - 1300); // minimum time needed for a reset pulse (480 < Trst), plus hand tuning
|
||||||
timer_set_oc_mode(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC1, TIM_OCM_FROZEN);
|
timer_set_oc_mode(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC1, TIM_OCM_FROZEN);
|
||||||
timer_set_oc_value(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC1, 16*(rcc_ahb_frequency/1000000)-1); // time to wait before sending the presence pulse, after the rising edge of the reset pulse (15 < Tpdh < 60)
|
timer_set_oc_value(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC1, 16 * (rcc_ahb_frequency / 1000000) - 1); // time to wait before sending the presence pulse, after the rising edge of the reset pulse (15 < Tpdh < 60)
|
||||||
timer_set_oc_mode(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC2, TIM_OCM_FROZEN);
|
timer_set_oc_mode(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC2, TIM_OCM_FROZEN);
|
||||||
timer_set_oc_value(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC2, 45*(rcc_ahb_frequency/1000000)-1-350); // time to sample the bit after being set (1 < Tlow1 < 15, 60 < Tslot < 120), or stop sending the bit use compare function to detect slave presence (15 = Trdv + 0 < Trelease < 45), plus hand tuning
|
timer_set_oc_value(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC2, 45 * (rcc_ahb_frequency / 1000000) - 1 - 350); // time to sample the bit after being set (1 < Tlow1 < 15, 60 < Tslot < 120), or stop sending the bit use compare function to detect slave presence (15 = Trdv + 0 < Trelease < 45), plus hand tuning
|
||||||
timer_set_oc_value(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC3, 90*(rcc_ahb_frequency/1000000)-1); // time to stop the presence pulse (60 < Tpdl < 120)
|
timer_set_oc_value(TIM(ONEWIRE_SLAVE_TIMER), TIM_OC3, 90 * (rcc_ahb_frequency / 1000000) - 1); // time to stop the presence pulse (60 < Tpdl < 120)
|
||||||
timer_clear_flag(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_UIF | TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF); // clear all interrupt flags
|
timer_clear_flag(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_UIF | TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF); // clear all interrupt flags
|
||||||
timer_update_on_overflow(TIM(ONEWIRE_SLAVE_TIMER)); // only use counter overflow as UEV source (use overflow as start time or timeout)
|
timer_update_on_overflow(TIM(ONEWIRE_SLAVE_TIMER)); // only use counter overflow as UEV source (use overflow as start time or timeout)
|
||||||
timer_enable_irq(TIM(ONEWIRE_SLAVE_TIMER), TIM_DIER_UIE); // enable update interrupt for overflow
|
timer_enable_irq(TIM(ONEWIRE_SLAVE_TIMER), TIM_DIER_UIE); // enable update interrupt for overflow
|
||||||
|
@ -156,13 +156,13 @@ void onewire_slave_setup(uint8_t family, uint64_t serial)
|
||||||
|
|
||||||
bool onewire_slave_function_read(uint8_t* data, size_t size)
|
bool onewire_slave_function_read(uint8_t* data, size_t size)
|
||||||
{
|
{
|
||||||
if (NULL==data || 0==size) { // verify input
|
if (NULL == data || 0 == size) { // verify input
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (UINT32_MAX/8<size) { // too many bits to transfer
|
if (UINT32_MAX / 8 < size) { // too many bits to transfer
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (onewire_slave_state!=ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data
|
if (onewire_slave_state != ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
onewire_slave_transfer_data = data; // save buffer to write to
|
onewire_slave_transfer_data = data; // save buffer to write to
|
||||||
|
@ -175,13 +175,13 @@ bool onewire_slave_function_read(uint8_t* data, size_t size)
|
||||||
|
|
||||||
bool onewire_slave_function_write(const uint8_t* data, size_t size)
|
bool onewire_slave_function_write(const uint8_t* data, size_t size)
|
||||||
{
|
{
|
||||||
if (NULL==data || 0==size) { // verify input
|
if (NULL == data || 0 == size) { // verify input
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (onewire_slave_state!=ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data
|
if (onewire_slave_state != ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (UINT32_MAX/8<size) { // too many bits to transfer
|
if (UINT32_MAX / 8 < size) { // too many bits to transfer
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
onewire_slave_transfer_data = (uint8_t*)data; // save buffer to read from
|
onewire_slave_transfer_data = (uint8_t*)data; // save buffer to read from
|
||||||
|
@ -234,7 +234,7 @@ void EXTI_ISR(ONEWIRE_SLAVE_PIN)(void)
|
||||||
case ONEWIRE_STATE_ROM_SEARCH_FALSE: // send ROM code bit while searching ROM, already negated
|
case ONEWIRE_STATE_ROM_SEARCH_FALSE: // send ROM code bit while searching ROM, already negated
|
||||||
case ONEWIRE_STATE_FUNCTION_WRITE: // write function data bit
|
case ONEWIRE_STATE_FUNCTION_WRITE: // write function data bit
|
||||||
timer_enable_irq(TIM(ONEWIRE_SLAVE_TIMER), TIM_DIER_CC2IE); // enable timer for reading bit
|
timer_enable_irq(TIM(ONEWIRE_SLAVE_TIMER), TIM_DIER_CC2IE); // enable timer for reading bit
|
||||||
if (0==(bits_buffer&(1<<(bits_bit%8)))) { // need to send a 0 bit
|
if (0 == (bits_buffer & (1 << (bits_bit % 8)))) { // need to send a 0 bit
|
||||||
gpio_clear(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN)); // hold low to send 0 bit
|
gpio_clear(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN)); // hold low to send 0 bit
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -252,7 +252,7 @@ void EXTI_ISR(ONEWIRE_SLAVE_PIN)(void)
|
||||||
void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
{
|
{
|
||||||
if (timer_interrupt_source(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_UIF)) { // reset timer triggered, verify if it's a reset
|
if (timer_interrupt_source(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_UIF)) { // reset timer triggered, verify if it's a reset
|
||||||
if (0==gpio_get(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN))) { // signal it still low, thus it must be a reset
|
if (0 == gpio_get(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN))) { // signal it still low, thus it must be a reset
|
||||||
onewire_slave_state = ONEWIRE_STATE_RESET; // update state
|
onewire_slave_state = ONEWIRE_STATE_RESET; // update state
|
||||||
}
|
}
|
||||||
timer_disable_counter(TIM(ONEWIRE_SLAVE_TIMER)); // stop timer since there is nothing more to measure
|
timer_disable_counter(TIM(ONEWIRE_SLAVE_TIMER)); // stop timer since there is nothing more to measure
|
||||||
|
@ -261,7 +261,7 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
}
|
}
|
||||||
if (timer_interrupt_source(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC1IF)) { // wait for presence pulse timer triggered
|
if (timer_interrupt_source(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC1IF)) { // wait for presence pulse timer triggered
|
||||||
timer_clear_flag(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC1IF); // clear flag
|
timer_clear_flag(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC1IF); // clear flag
|
||||||
if (ONEWIRE_STATE_WAIT_PRESENCE==onewire_slave_state) { // we can now send the pulse
|
if (ONEWIRE_STATE_WAIT_PRESENCE == onewire_slave_state) { // we can now send the pulse
|
||||||
onewire_slave_state = ONEWIRE_STATE_PULSE_PRESENCE; // save new state
|
onewire_slave_state = ONEWIRE_STATE_PULSE_PRESENCE; // save new state
|
||||||
gpio_clear(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN)); // send presence pulse (will also trigger the timer start)
|
gpio_clear(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN)); // send presence pulse (will also trigger the timer start)
|
||||||
}
|
}
|
||||||
|
@ -275,9 +275,9 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
case ONEWIRE_STATE_ROM_SEARCH_SELECT: // read selected ROM code bit
|
case ONEWIRE_STATE_ROM_SEARCH_SELECT: // read selected ROM code bit
|
||||||
case ONEWIRE_STATE_FUNCTION_READ: // read function data bit
|
case ONEWIRE_STATE_FUNCTION_READ: // read function data bit
|
||||||
if (gpio_get(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN))) { // bit is set to 1
|
if (gpio_get(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN))) { // bit is set to 1
|
||||||
bits_buffer |= (1<<(bits_bit%8)); // set bit
|
bits_buffer |= (1 << (bits_bit % 8)); // set bit
|
||||||
} else { // bit is set to 0
|
} else { // bit is set to 0
|
||||||
bits_buffer &= ~(1<<(bits_bit%8)); // clear bit
|
bits_buffer &= ~(1 << (bits_bit % 8)); // clear bit
|
||||||
}
|
}
|
||||||
bits_bit++; // go to next bit
|
bits_bit++; // go to next bit
|
||||||
break;
|
break;
|
||||||
|
@ -297,7 +297,7 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
// act on bit count
|
// act on bit count
|
||||||
switch (onewire_slave_state) {
|
switch (onewire_slave_state) {
|
||||||
case ONEWIRE_STATE_ROM_COMMAND: // read ROM command
|
case ONEWIRE_STATE_ROM_COMMAND: // read ROM command
|
||||||
if (bits_bit>7) { // complete ROM command code received
|
if (bits_bit > 7) { // complete ROM command code received
|
||||||
bits_bit = 0; // reset buffer
|
bits_bit = 0; // reset buffer
|
||||||
rom_code_byte = 0; // reset ROM code byte index
|
rom_code_byte = 0; // reset ROM code byte index
|
||||||
switch (bits_buffer) { // act depending on ROM command code
|
switch (bits_buffer) { // act depending on ROM command code
|
||||||
|
@ -322,7 +322,7 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_ROM_READ: // send ROM code
|
case ONEWIRE_STATE_ROM_READ: // send ROM code
|
||||||
if (bits_bit>7) { // complete byte transmitted
|
if (bits_bit > 7) { // complete byte transmitted
|
||||||
rom_code_byte++; // go to next ROM code byte
|
rom_code_byte++; // go to next ROM code byte
|
||||||
if (rom_code_byte>LENGTH(onewire_slave_rom_code)) { // complete ROM code send
|
if (rom_code_byte>LENGTH(onewire_slave_rom_code)) { // complete ROM code send
|
||||||
onewire_slave_state = ONEWIRE_STATE_IDLE; // go back to default idle state
|
onewire_slave_state = ONEWIRE_STATE_IDLE; // go back to default idle state
|
||||||
|
@ -333,11 +333,11 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_ROM_MATCH: // compare ROM code
|
case ONEWIRE_STATE_ROM_MATCH: // compare ROM code
|
||||||
if (bits_bit>7) { // complete byte received
|
if (bits_bit > 7) { // complete byte received
|
||||||
if (bits_buffer==onewire_slave_rom_code[rom_code_byte]) { // ROM code byte matches
|
if (bits_buffer == onewire_slave_rom_code[rom_code_byte]) { // ROM code byte matches
|
||||||
bits_bit = 0; // reset buffer
|
bits_bit = 0; // reset buffer
|
||||||
rom_code_byte++; // go to next ROM code byte
|
rom_code_byte++; // go to next ROM code byte
|
||||||
if (rom_code_byte>=LENGTH(onewire_slave_rom_code)) { // complete ROM code matches
|
if (rom_code_byte >= LENGTH(onewire_slave_rom_code)) { // complete ROM code matches
|
||||||
onewire_slave_state = ONEWIRE_STATE_FUNCTION_COMMAND; // now read function command code
|
onewire_slave_state = ONEWIRE_STATE_FUNCTION_COMMAND; // now read function command code
|
||||||
}
|
}
|
||||||
} else { // ROM code does not match
|
} else { // ROM code does not match
|
||||||
|
@ -346,22 +346,22 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_ROM_SEARCH_TRUE: // ROM code bit is send, prepare to send negated version
|
case ONEWIRE_STATE_ROM_SEARCH_TRUE: // ROM code bit is send, prepare to send negated version
|
||||||
bits_buffer ^= (1<<bits_bit); // negate bit
|
bits_buffer ^= (1 << bits_bit); // negate bit
|
||||||
onewire_slave_state = ONEWIRE_STATE_ROM_SEARCH_FALSE; // send negated version
|
onewire_slave_state = ONEWIRE_STATE_ROM_SEARCH_FALSE; // send negated version
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_ROM_SEARCH_FALSE: // negated ROM code bit is send, prepare to read selected bit
|
case ONEWIRE_STATE_ROM_SEARCH_FALSE: // negated ROM code bit is send, prepare to read selected bit
|
||||||
onewire_slave_state = ONEWIRE_STATE_ROM_SEARCH_SELECT; // read selected
|
onewire_slave_state = ONEWIRE_STATE_ROM_SEARCH_SELECT; // read selected
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_ROM_SEARCH_SELECT: // check if we are selected
|
case ONEWIRE_STATE_ROM_SEARCH_SELECT: // check if we are selected
|
||||||
if ((bits_buffer&(1<<(bits_bit-1)))==(onewire_slave_rom_code[rom_code_byte]&(1<<(bits_bit-1)))) { // we have been selected
|
if ((bits_buffer&(1 << (bits_bit - 1))) == (onewire_slave_rom_code[rom_code_byte] & (1 << (bits_bit - 1)))) { // we have been selected
|
||||||
onewire_slave_state = ONEWIRE_STATE_ROM_SEARCH_TRUE; // prepare to compare next bit
|
onewire_slave_state = ONEWIRE_STATE_ROM_SEARCH_TRUE; // prepare to compare next bit
|
||||||
} else { // we are no selected
|
} else { // we are no selected
|
||||||
onewire_slave_state = ONEWIRE_STATE_IDLE; // go back to idle
|
onewire_slave_state = ONEWIRE_STATE_IDLE; // go back to idle
|
||||||
}
|
}
|
||||||
if (bits_bit>7) { // complete byte searched
|
if (bits_bit > 7) { // complete byte searched
|
||||||
bits_bit = 0; // reset buffer
|
bits_bit = 0; // reset buffer
|
||||||
rom_code_byte++; // go to next ROM code byte
|
rom_code_byte++; // go to next ROM code byte
|
||||||
if (rom_code_byte>=LENGTH(onewire_slave_rom_code)) { // complete ROM code search
|
if (rom_code_byte >= LENGTH(onewire_slave_rom_code)) { // complete ROM code search
|
||||||
onewire_slave_state = ONEWIRE_STATE_FUNCTION_COMMAND; // now read function command code
|
onewire_slave_state = ONEWIRE_STATE_FUNCTION_COMMAND; // now read function command code
|
||||||
} else {
|
} else {
|
||||||
bits_buffer = onewire_slave_rom_code[rom_code_byte]; // prepare next ROM code byte
|
bits_buffer = onewire_slave_rom_code[rom_code_byte]; // prepare next ROM code byte
|
||||||
|
@ -369,27 +369,27 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_FUNCTION_COMMAND: // read function command
|
case ONEWIRE_STATE_FUNCTION_COMMAND: // read function command
|
||||||
if (bits_bit>7) { // complete function command code received
|
if (bits_bit > 7) { // complete function command code received
|
||||||
onewire_slave_function_code = bits_buffer; // save function command code to user buffer
|
onewire_slave_function_code = bits_buffer; // save function command code to user buffer
|
||||||
onewire_slave_state = ONEWIRE_STATE_FUNCTION_DATA; // let the user transfer data
|
onewire_slave_state = ONEWIRE_STATE_FUNCTION_DATA; // let the user transfer data
|
||||||
onewire_slave_function_code_received = true; // notify user
|
onewire_slave_function_code_received = true; // notify user
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_FUNCTION_READ: // save function data bit
|
case ONEWIRE_STATE_FUNCTION_READ: // save function data bit
|
||||||
if (0==bits_bit%8) { // complete byte received
|
if (0 == bits_bit % 8) { // complete byte received
|
||||||
onewire_slave_transfer_data[(bits_bit-1)/8] = bits_buffer; // save received bytes
|
onewire_slave_transfer_data[(bits_bit - 1) / 8] = bits_buffer; // save received bytes
|
||||||
}
|
}
|
||||||
if (bits_bit>=onewire_slave_transfer_bits) { // read transfer complete
|
if (bits_bit >= onewire_slave_transfer_bits) { // read transfer complete
|
||||||
onewire_slave_transfer_data[(bits_bit-1)/8] = bits_buffer; // save last bits
|
onewire_slave_transfer_data[(bits_bit - 1) / 8] = bits_buffer; // save last bits
|
||||||
onewire_slave_state = ONEWIRE_STATE_FUNCTION_DATA; // let the user transfer more data
|
onewire_slave_state = ONEWIRE_STATE_FUNCTION_DATA; // let the user transfer more data
|
||||||
onewire_slave_transfer_complete = true; // notify user
|
onewire_slave_transfer_complete = true; // notify user
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ONEWIRE_STATE_FUNCTION_WRITE: // update function data bit to write
|
case ONEWIRE_STATE_FUNCTION_WRITE: // update function data bit to write
|
||||||
if (0==bits_bit%8) { // complete byte transfer
|
if (0 == bits_bit % 8) { // complete byte transfer
|
||||||
bits_buffer = onewire_slave_transfer_data[bits_bit/8]; // prepare next byte to write
|
bits_buffer = onewire_slave_transfer_data[bits_bit / 8]; // prepare next byte to write
|
||||||
}
|
}
|
||||||
if (bits_bit>=onewire_slave_transfer_bits) { // write transfer complete
|
if (bits_bit >= onewire_slave_transfer_bits) { // write transfer complete
|
||||||
onewire_slave_state = ONEWIRE_STATE_FUNCTION_DATA; // let the user transfer more data
|
onewire_slave_state = ONEWIRE_STATE_FUNCTION_DATA; // let the user transfer more data
|
||||||
onewire_slave_transfer_complete = true; // notify user
|
onewire_slave_transfer_complete = true; // notify user
|
||||||
}
|
}
|
||||||
|
@ -401,7 +401,7 @@ void TIM_ISR(ONEWIRE_SLAVE_TIMER)(void)
|
||||||
}
|
}
|
||||||
if (timer_interrupt_source(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC3IF)) { // end of presence pulse timer triggered
|
if (timer_interrupt_source(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC3IF)) { // end of presence pulse timer triggered
|
||||||
timer_clear_flag(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC3IF); // clear flag
|
timer_clear_flag(TIM(ONEWIRE_SLAVE_TIMER), TIM_SR_CC3IF); // clear flag
|
||||||
if (ONEWIRE_STATE_PULSE_PRESENCE==onewire_slave_state) {
|
if (ONEWIRE_STATE_PULSE_PRESENCE == onewire_slave_state) {
|
||||||
gpio_set(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN)); // stop sending presence pulse
|
gpio_set(GPIO(ONEWIRE_SLAVE_PORT), GPIO(ONEWIRE_SLAVE_PIN)); // stop sending presence pulse
|
||||||
// if the pin stays low the reset timer will catch it
|
// if the pin stays low the reset timer will catch it
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,10 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/** library for 1-wire protocol as slave (API)
|
/** library for 1-wire protocol as slave
|
||||||
* @file onewire_slave.h
|
* @file
|
||||||
* @author King Kévin <kingkevin@cuvoodoo.info>
|
* @author King Kévin <kingkevin@cuvoodoo.info>
|
||||||
* @date 2017
|
* @date 2017-2020
|
||||||
* @note peripherals used: timer @ref onewire_slave_timer, GPIO @ref onewire_slave_gpio
|
* @note peripherals used: timer @ref onewire_slave_timer, GPIO @ref onewire_slave_gpio
|
||||||
* @note overdrive mode is not supported
|
* @note overdrive mode is not supported
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue