From 75ec6a1b3142916237abeb5dc2aa5688d0ac7327 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Sun, 6 Jul 2014 00:36:22 +0200 Subject: [PATCH] Due: Wire.setClock can be called at any time See #2157 --- hardware/arduino/sam/libraries/Wire/Wire.cpp | 4 +- hardware/arduino/sam/libraries/Wire/Wire.h | 1 + .../arduino/sam/system/libsam/include/twi.h | 2 + .../arduino/sam/system/libsam/source/twi.c | 18 +++-- .../arduino_due_x/libsam_sam3x8e_gcc_rel.a | Bin 116482 -> 116884 bytes .../libsam_sam3x8e_gcc_rel.a.txt | 66 +++++++++--------- 6 files changed, 53 insertions(+), 38 deletions(-) diff --git a/hardware/arduino/sam/libraries/Wire/Wire.cpp b/hardware/arduino/sam/libraries/Wire/Wire.cpp index f57ac8fe8..ed7a001db 100644 --- a/hardware/arduino/sam/libraries/Wire/Wire.cpp +++ b/hardware/arduino/sam/libraries/Wire/Wire.cpp @@ -95,8 +95,7 @@ static inline bool TWI_STATUS_NACK(uint32_t status) { TwoWire::TwoWire(Twi *_twi, void(*_beginCb)(void)) : twi(_twi), rxBufferIndex(0), rxBufferLength(0), txAddress(0), txBufferLength(0), srvBufferIndex(0), srvBufferLength(0), status( - UNINITIALIZED), onBeginCallback(_beginCb) { - setClock(100000); // Set clock frequency to 100000 Hz + UNINITIALIZED), onBeginCallback(_beginCb), twiClock(TWI_CLOCK) { } void TwoWire::begin(void) { @@ -129,6 +128,7 @@ void TwoWire::begin(int address) { void TwoWire::setClock(uint32_t frequency) { twiClock = frequency; + TWI_SetClock(twi, twiClock, VARIANT_MCK); } uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) { diff --git a/hardware/arduino/sam/libraries/Wire/Wire.h b/hardware/arduino/sam/libraries/Wire/Wire.h index ce3ea1136..c5e452d28 100644 --- a/hardware/arduino/sam/libraries/Wire/Wire.h +++ b/hardware/arduino/sam/libraries/Wire/Wire.h @@ -100,6 +100,7 @@ private: TwoWireStatus status; // TWI clock frequency + static const uint32_t TWI_CLOCK = 100000; uint32_t twiClock; // Timeouts ( diff --git a/hardware/arduino/sam/system/libsam/include/twi.h b/hardware/arduino/sam/system/libsam/include/twi.h index 3d383f4fd..0967089f7 100644 --- a/hardware/arduino/sam/system/libsam/include/twi.h +++ b/hardware/arduino/sam/system/libsam/include/twi.h @@ -67,6 +67,8 @@ extern void TWI_ConfigureMaster(Twi *pTwi, uint32_t twck, uint32_t mck); +extern void TWI_SetClock( Twi *pTwi, uint32_t dwTwCk, uint32_t dwMCk ); + extern void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress); extern void TWI_Stop(Twi *pTwi); diff --git a/hardware/arduino/sam/system/libsam/source/twi.c b/hardware/arduino/sam/system/libsam/source/twi.c index 2a961f6fd..4366e17c1 100644 --- a/hardware/arduino/sam/system/libsam/source/twi.c +++ b/hardware/arduino/sam/system/libsam/source/twi.c @@ -96,10 +96,6 @@ */ void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk ) { - uint32_t dwCkDiv = 0 ; - uint32_t dwClDiv ; - uint32_t dwOk = 0 ; - assert( pTwi ) ; /* SVEN: TWI Slave Mode Enabled */ @@ -115,6 +111,19 @@ void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk ) /* Set master mode */ pTwi->TWI_CR = TWI_CR_MSEN ; + /* Configure clock */ + TWI_SetClock(pTwi, dwTwCk, dwMCk); +} + + +void TWI_SetClock( Twi *pTwi, uint32_t dwTwCk, uint32_t dwMCk ) +{ + assert( pTwi ) ; + + uint32_t dwCkDiv = 0 ; + uint32_t dwClDiv ; + uint32_t dwOk = 0 ; + /* Configure clock */ while ( !dwOk ) { @@ -137,6 +146,7 @@ void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk ) pTwi->TWI_CWGR = (dwCkDiv << 16) | (dwClDiv << 8) | dwClDiv ; } + /** * \brief Configures a TWI peripheral to operate in slave mode. * \param pTwi Pointer to an Twi instance. diff --git a/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a b/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a index 7768e877cd4366cbab5664de520f7c7365a28114..4ccce8bd692be22e981d8029ea67ce19e972386a 100644 GIT binary patch delta 6143 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 JbqJcQ{{z&(4{iVe delta 6046 zcmcIo3vg7`8UD}RR~8{zHv0;jm@G*Mkr?*9n$fK zzrOST=bU>Uck?F0sttyX1v$R3JM0OCJ)2wwaj(BbERhiaWEDWw$_uAZFTh1o{9*wv z(m$TbAo4B1|C|!(? zsoel-I$Z~#q>uUm7@a>l9E9UPJU~B*LmaPzNJV-eC7Tr#S2Dx&9DX0jg;Kn62*_~L zyxl-9km46=IBa$+!$2|=S292Ty!s>%M)zTF4J*Yj0`SojKz@vNy$a;#=&3FsW7*G7 zlW@KMS4R5&@lS-EruAmQTiU6Sb`WpKFYGBj$qDyVIy6RcQ$bM;-CJrC4pjYZL`K9X zb`ZPpd?-?xk)fGgm=e8JOZ%4O(!sV|dZyPv_q3Vm#!D4vWVK+uvx5i4meAGdv@qtd;pHVagpgE{=IaCea|KpW!fV1s4p4m0YMs z$%V5lu|rZFp)~S)k&AYBw{^wDu7#ExgcH3!ZuA_0b_|Pa0>C{3xY^VZzlPM)NIXfV zQAc8WYHR~;8aZnh?o9kaN4)gU2l8<&e4$Kd*Gru}Zmr*NsW&TJpE9wa-z%)#P(d=V z@-%v2BuCe`+lY^iTs=QjOcHeI)g$@IcN2?ni9$yH69*EGfaKMsQrAi9Geqm*=!tYiqSv zc>k?A|9urXMSNd>Y?z=sWoR%o8Jq8=uL+KkA}9c!0KiIp{g;y`XtckS?4$SgS9o4> zS(>cP`ZJ@45_!5oQ^V*cbMq0Gc}Cwg=An4Kc5r0F%dU}4dCgyateK!amD6yP{-u99 z`GC3xD#+hy<3MF-Ri_mZ3?hPla5N(1H`krhjg~R4(jms|^Y?UKf+*(^MTaPL=L~e$ zz^|Q?MjJ6q;~Cfa>A%bZG*N+-#q*LcIw(+?%dh=-}QCpnrU=@IhjY-?yn$= z>7M-)$RYaP{tBu$&I>`RS&E7S10OtDu`z zBqXZbK1mk9wWgE{)*xr48xLBEM^yWm+DdBJ44p1cce>@%vdgq~fblpa6Optsv1u?1 ziLEQRgotGa(7^^6BJh$yB@Pnftx+!h0|)fS^#*`Z~Q%y3#2?bfQ0o)F#Xw&zV_W++@R>U5~r68_{8 zGOlKps)-odm!KU>tw3RatEveTzrC8+D{oP`Z&tWF74G-Z`7cyVTCK9~S6CM*tar$b zrMA6AxDDotTb=cQO0^tS7D>eh4FA)cH`KjU1F!ZaK1dwDgSEW-C50ot zt^|r@PO3Ce0&J$SVnHIvD~kqPP$>&Ac+|U;YRq>mgk%Y8haj&k8Ypdot7M5yG$>W- z5ugmNlO<9BWh#9+L}f`X6<)3|cBHx19=q`_nKRNja`($zKHc79uiPqgQechOpm3fx08FJ%LC<_vzzyuRyo-O`n{JS!X&xgh=-U2tve4S`-g(X?M9eQM5 z3ZMYi$~=AoK=im19?BBnk`i07xOzU6#h`3K=7<(@`xK|ZkUQj8>imjhR>&Px9Kp~s z%g^mo`UP)PoC48NaS{%>z3h-HUmQYiPZo?X3&vX`9vf6g33}{!A)WP%o_>G)Wj4+? zA#s!N`w^>a02avnBDoe1&dmURnGdsi8o-q@U&m_H;{q(=;0GAs>HtbW;@OZg{al$B z+q+t7FU}gyY7h;@22sxD8q;S1*Z&Zhy(wus+-$@E(65Ba5icU^#ddrEip1igqu3A{ zvdPJSR?2lRt6Ok6k$E?(1FD`t`zx6o{j=<@_;I^TLfHS@w2PNcWSD_hP#A{lqKD zG=IH5b7%1ik+YZNN+$TlI4s`U@Bin~9OB8`n+L{{y(Z!j8q8ZYe7l7>(~zDdUU@#{ zGCaEiIg$_C$y-Vx`#g}`G=?~|DNE@yLh|UPq$B-lA>c{YjU`hYDVusd!qXeJNmrOf