Exemple #1
0
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);
}