Hi.
I'm struggling in the same onewire lib right now.
I've made it to compile, but it doesn't work anyway.
in the defines I've this:
// Platform specific I/O definitions
#if defined(__AVR__)
#define PIN_TO_BASEREG(pin)Â Â Â Â Â Â (portInputRegister(digitalPinToPort(pin)))
#define PIN_TO_BITMASK(pin)Â Â Â Â Â Â (digitalPinToBitMask(pin))
#define IO_REG_TYPE uint8_t
#define IO_REG_ASM asm("r30")
#define DIRECT_READ(base, mask)Â Â Â Â (((*(base)) & (mask)) ? 1 : 0)
#define DIRECT_MODE_INPUT(base, mask)Â ((*(base+1)) &= ~(mask))
#define DIRECT_MODE_OUTPUT(base, mask)Â ((*(base+1)) |= (mask))
#define DIRECT_WRITE_LOW(base, mask)Â Â ((*(base+2)) &= ~(mask))
#define DIRECT_WRITE_HIGH(base, mask)Â ((*(base+2)) |= (mask))
#elif defined(__SAM3X8E__)
#define PIN_TO_BASEREG(pin)Â Â Â Â Â Â (portInputRegister(digitalPinToPort(pin)))
#define PIN_TO_BITMASK(pin)Â Â Â Â Â Â (digitalPinToBitMask(pin))
#define IO_REG_TYPE uint32_t
#define IO_REG_ASM
#define DIRECT_READ(base, mask)Â Â Â Â (((*(base)) & (mask)) ? 1 : 0)
#define DIRECT_MODE_INPUT(base, mask)Â ((*(base+1)) &= ~(mask))
#define DIRECT_MODE_OUTPUT(base, mask)Â ((*(base+1)) |= (mask))
#define DIRECT_WRITE_LOW(base, mask)Â Â ((*(base+2)) &= ~(mask))
#define DIRECT_WRITE_HIGH(base, mask)Â ((*(base+2)) |= (mask))
#include "pgmspace.h"
#elif defined(__PIC32MX__)
//- #include <plib.h>Â // is this necessary?
#define PIN_TO_BASEREG(pin)Â Â Â Â Â Â (portModeRegister(digitalPinToPort(pin)))
#define PIN_TO_BITMASK(pin)Â Â Â Â Â Â (digitalPinToBitMask(pin))
#define IO_REG_TYPE uint32_t
#define IO_REG_ASM
#define DIRECT_READ(base, mask)Â Â Â Â (((*(base+4)) & (mask)) ? 1 : 0)Â //PORTX + 0x10
#define DIRECT_MODE_INPUT(base, mask)Â ((*(base+2)) = (mask))Â Â Â Â Â Â //TRISXSET + 0x08
#define DIRECT_MODE_OUTPUT(base, mask)Â ((*(base+1)) = (mask))Â Â Â Â Â Â //TRISXCLR + 0x04
#define DIRECT_WRITE_LOW(base, mask)Â Â ((*(base+8+1)) = (mask))Â Â Â Â Â //LATXCLRÂ + 0x24
#define DIRECT_WRITE_HIGH(base, mask)Â ((*(base+8+2)) = (mask))Â Â Â Â Â //LATXSET + 0x28
#else
#error "Please define I/O register types here"
#endif
the line #include "pgmspace.h" call the attached file.
The program compiles and works, except that I don't have temperature readings.
I'm looking for understanding of this line:
#define IO_REG_ASM asm("r30")
This line is present for AVR, and since this is called in the communication functions, this might be the problem.
If anyone can explain this line, maybe I can move forward faster.
Help is appreciated, the developers of onewire doesn't seem to care about Due.
Regards,
Joao
pgmspace.h (1.23 KB)