void configurePorts() { enableClock(); enablePortA(); enablePortB(); enablePortC(); enablePortD(); enablePortE(); enablePortF(); enableSSI1(); PA[0x3FC] = 0x00; PB[0x3FC] = 0xFF; PC[0x3FC] = 0x00; PD[0x3FC] = 0x00; PE[0x3FC] = 0x00; PA[0x3FC] |= 0xC4; //RESET and RDX high PA[0x3FC] &= 0xF7; // CSX chip select low PB[0x3FC] = 0x07; // LEDs active low, TP_CS low //interrupts PF[0x404] = 0x10; // PF4 level sensitive GPIOIS PF[0x40C] = 0x00; // low level GPIOIEV PF[0x410] = 0x10; // PF4 GPIOIM CORE[0x103] = 0x40; // enable interrupts PF }
void DW1000Class::begin(int irq, int rst) { // generous initial init/wake-up-idle delay delay(5); // start SPI SPI.begin(); SPI.usingInterrupt(irq); // pin and basic member setup _rst = rst; _irq = irq; _deviceMode = IDLE_MODE; pinMode(_rst, OUTPUT); digitalWrite(_rst, HIGH); // reset chip (either soft or hard) if(_rst <= 0) { softReset(); } else { reset(); } // try locking clock at PLL speed (should be done already, // but just to be sure) enableClock(AUTO_CLOCK); delay(5); // default network and node id writeValueToBytes(_networkAndAddress, 0xFF, LEN_PANADR); writeNetworkIdAndDeviceAddress(); // default system configuration memset(_syscfg, 0, LEN_SYS_CFG); setDoubleBuffering(false); setInterruptPolarity(true); writeSystemConfigurationRegister(); // default interrupt mask, i.e. no interrupts clearInterrupts(); writeSystemEventMaskRegister(); // attach interrupt attachInterrupt(_irq, DW1000Class::handleInterrupt, RISING); }