void SPI::Enable(bool enable) { if (enable) { EnablePeripheralClock(true); *_pSPI_CR1 |= SPI_CR1_SPE_ENABLED; _startedSending = false; } else { *_pSPI_CR1 &= ~SPI_CR1_SPE_ENABLED; EnablePeripheralClock(false); } }
void I2C::Initialize (uint32_t clockSpeed, bool isDuty16_9, bool isFmMode, bool initializeGPIO) { Enable(false); SetSoftwareReset(true); SetSoftwareReset(false); EnablePeripheralClock(true); SetClock(clockSpeed, isDuty16_9, isFmMode); if (initializeGPIO) { InitGPIO(); } Enable(true); _stuckBUSY = false; }
void ADC::Enable(bool enable) { EnablePeripheralClock(enable); if (enable) { *_pADC_CR2 |= ADC_CR2_ADON; Calibrate(); _initialized = true; } else { *_pADC_CR2 &= ~ADC_CR2_ADON; _initialized = false; _emptySequence = true; _emptyJSequence = true; } }
void I2C::Reset(void) { Enable(false); EnablePeripheralClock(false); }
void I2C::AutoRecover() { //save registers //cr1 bool isAck = (*_pI2C_CR1 & I2C_CR1_ACK); //isAck = true; bool isENARP = (*_pI2C_CR1 & I2C_CR1_ENARP); bool isENPEC = (*_pI2C_CR1 & I2C_CR1_ENPEC); bool isENGC = (*_pI2C_CR1 & I2C_CR1_ENGC); uint16_t cr2 = *_pI2C_CR2; uint16_t oar1 = *_pI2C_OAR1; uint16_t oar2 = *_pI2C_OAR2; uint16_t ccr = *_pI2C_CCR; uint16_t trise = *_pI2C_TRISE; if (_stuckBUSY) { ClearBUSY(); } /* Initialize(100000, false, false); SetModeI2C(); EnableACK(true); SetOwnAddr7Bit(0x00); return; */ Enable(false); SetSoftwareReset(true); SetSoftwareReset(false); EnablePeripheralClock(true); InitGPIO(); //restore registers; EnableACK(isAck); EnableARP(isENARP); EnablePEC(isENPEC); EnableGeneralCall(isENGC); *_pI2C_CR2 = cr2; *_pI2C_OAR1 = oar1; *_pI2C_OAR2 = oar2; *_pI2C_CCR = ccr; *_pI2C_TRISE = trise; _stuckBUSY = false; Enable(true); }