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

}
示例#2
0
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;

}
示例#3
0
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;

	}
}
示例#4
0
void I2C::Reset(void)
{
    Enable(false);
    EnablePeripheralClock(false);
}
示例#5
0
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);


}