Description
Source
Call Graph
Start Line: 86
void TWI_ConfigureMaster(AT91S_TWI *pTwi, unsigned int twck, unsigned int mck)
{
unsigned int ckdiv = 0;
unsigned int cldiv;
unsigned char ok = 0;
TRACE_DEBUG("TWI_ConfigureMaster()\n\r");
SANITY_CHECK(pTwi);
#ifdef AT91C_TWI_SVEN // TWI slave
// SVEN: TWI Slave Mode Enabled
pTwi->TWI_CR = AT91C_TWI_SVEN;
#endif
// Reset the TWI
pTwi->TWI_CR = AT91C_TWI_SWRST;
pTwi->TWI_RHR;
// TWI Slave Mode Disabled, TWI Master Mode Disabled
#ifdef AT91C_TWI_SVEN // TWI slave
pTwi->TWI_CR = AT91C_TWI_SVDIS;
#endif
pTwi->TWI_CR = AT91C_TWI_MSDIS;
// Set master mode
pTwi->TWI_CR = AT91C_TWI_MSEN;
// Configure clock
while (!ok) {
#if defined(__ARMCC_VERSION)
cldiv = ((mck / (2 * twck)) - 3) / pow(2, ckdiv);
#else
cldiv = ((mck / (2 * twck)) - 3) / power(2, ckdiv);
#endif
if (cldiv <= 255) {
ok = 1;
}
else {
ckdiv++;
}
}
ASSERT(ckdiv < 8, "-F- Cannot find valid TWI clock parameters\n\r");
TRACE_DEBUG("Using CKDIV = %u and CLDIV/CHDIV = %u\n\r", ckdiv, cldiv);
pTwi->TWI_CWGR = 0;
pTwi->TWI_CWGR = (ckdiv << 16) | (cldiv << 8) | cldiv;
}