Вообщето непонятно почему спрашиваете, вот из Атмеловского примера:
//------------------------------------------------------------------------------ /// Configures a TWI peripheral to operate in master mode, at the given /// frequency (in Hz). The duty cycle of the TWI clock is set to 50%. /// \param pTwi Pointer to an AT91S_TWI instance. /// \param twck Desired TWI clock frequency. /// \param mck Master clock frequency. //------------------------------------------------------------------------------ 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; }
Вызов TWI_ConfigureMaster(AT91C_BASE_TWI, TWCK, BOARD_MCK);
TWCK частота TWI в герцах, BOARD_MCK частота прцесора в герцах.
|