Skip to content

Commit 4068eec

Browse files
committed
Merge branch 'due_wire_setClock' into ide-1.5.x
2 parents 807f509 + 75ec6a1 commit 4068eec

File tree

7 files changed

+60
-39
lines changed

7 files changed

+60
-39
lines changed

hardware/arduino/sam/libraries/Wire/Wire.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@ static inline bool TWI_STATUS_NACK(uint32_t status) {
9595
TwoWire::TwoWire(Twi *_twi, void(*_beginCb)(void)) :
9696
twi(_twi), rxBufferIndex(0), rxBufferLength(0), txAddress(0),
9797
txBufferLength(0), srvBufferIndex(0), srvBufferLength(0), status(
98-
UNINITIALIZED), onBeginCallback(_beginCb) {
99-
// Empty
98+
UNINITIALIZED), onBeginCallback(_beginCb), twiClock(TWI_CLOCK) {
10099
}
101100

102101
void TwoWire::begin(void) {
@@ -106,7 +105,7 @@ void TwoWire::begin(void) {
106105
// Disable PDC channel
107106
twi->TWI_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS;
108107

109-
TWI_ConfigureMaster(twi, TWI_CLOCK, VARIANT_MCK);
108+
TWI_ConfigureMaster(twi, twiClock, VARIANT_MCK);
110109
status = MASTER_IDLE;
111110
}
112111

@@ -127,6 +126,11 @@ void TwoWire::begin(int address) {
127126
begin((uint8_t) address);
128127
}
129128

129+
void TwoWire::setClock(uint32_t frequency) {
130+
twiClock = frequency;
131+
TWI_SetClock(twi, twiClock, VARIANT_MCK);
132+
}
133+
130134
uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) {
131135
if (quantity > BUFFER_LENGTH)
132136
quantity = BUFFER_LENGTH;

hardware/arduino/sam/libraries/Wire/Wire.h

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class TwoWire : public Stream {
3535
void begin();
3636
void begin(uint8_t);
3737
void begin(int);
38+
void setClock(uint32_t);
3839
void beginTransmission(uint8_t);
3940
void beginTransmission(int);
4041
uint8_t endTransmission(void);
@@ -100,6 +101,7 @@ class TwoWire : public Stream {
100101

101102
// TWI clock frequency
102103
static const uint32_t TWI_CLOCK = 100000;
104+
uint32_t twiClock;
103105

104106
// Timeouts (
105107
static const uint32_t RECV_TIMEOUT = 100000;

hardware/arduino/sam/libraries/Wire/keywords.txt

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#######################################
1212

1313
begin KEYWORD2
14+
setClock KEYWORD2
1415
beginTransmission KEYWORD2
1516
endTransmission KEYWORD2
1617
requestFrom KEYWORD2

hardware/arduino/sam/system/libsam/include/twi.h

+2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767

6868
extern void TWI_ConfigureMaster(Twi *pTwi, uint32_t twck, uint32_t mck);
6969

70+
extern void TWI_SetClock( Twi *pTwi, uint32_t dwTwCk, uint32_t dwMCk );
71+
7072
extern void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress);
7173

7274
extern void TWI_Stop(Twi *pTwi);

hardware/arduino/sam/system/libsam/source/twi.c

+14-4
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@
9696
*/
9797
void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk )
9898
{
99-
uint32_t dwCkDiv = 0 ;
100-
uint32_t dwClDiv ;
101-
uint32_t dwOk = 0 ;
102-
10399
assert( pTwi ) ;
104100

105101
/* SVEN: TWI Slave Mode Enabled */
@@ -115,6 +111,19 @@ void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk )
115111
/* Set master mode */
116112
pTwi->TWI_CR = TWI_CR_MSEN ;
117113

114+
/* Configure clock */
115+
TWI_SetClock(pTwi, dwTwCk, dwMCk);
116+
}
117+
118+
119+
void TWI_SetClock( Twi *pTwi, uint32_t dwTwCk, uint32_t dwMCk )
120+
{
121+
assert( pTwi ) ;
122+
123+
uint32_t dwCkDiv = 0 ;
124+
uint32_t dwClDiv ;
125+
uint32_t dwOk = 0 ;
126+
118127
/* Configure clock */
119128
while ( !dwOk )
120129
{
@@ -137,6 +146,7 @@ void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk )
137146
pTwi->TWI_CWGR = (dwCkDiv << 16) | (dwClDiv << 8) | dwClDiv ;
138147
}
139148

149+
140150
/**
141151
* \brief Configures a TWI peripheral to operate in slave mode.
142152
* \param pTwi Pointer to an Twi instance.
Binary file not shown.

hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a.txt

+34-32
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ pmc.o:
7272
00000000 T pmc_switch_udpck_to_upllck
7373

7474
pwmc.o:
75-
00000000 r C.9.8049
75+
00000000 r C.9.8054
7676
00000000 t FindClockConfiguration
7777
00000000 T PWMC_ConfigureChannel
7878
00000000 T PWMC_ConfigureChannelExt
@@ -100,14 +100,14 @@ pwmc.o:
100100
00000000 T PWMC_SetSyncChannelUpdateUnlock
101101
00000000 T PWMC_WriteBuffer
102102
U __assert_func
103-
00000000 r __func__.6631
104-
00000000 r __func__.6642
105-
00000000 r __func__.6657
106-
00000000 r __func__.6668
107-
00000000 r __func__.6679
108-
00000000 r __func__.6686
109-
00000000 r __func__.6770
110-
00000000 r __func__.6776
103+
00000000 r __func__.6635
104+
00000000 r __func__.6646
105+
00000000 r __func__.6661
106+
00000000 r __func__.6672
107+
00000000 r __func__.6683
108+
00000000 r __func__.6690
109+
00000000 r __func__.6774
110+
00000000 r __func__.6780
111111

112112
rtc.o:
113113
00000000 T RTC_ClearSCCR
@@ -123,9 +123,9 @@ rtc.o:
123123
00000000 T RTC_SetTime
124124
00000000 T RTC_SetTimeAlarm
125125
U __assert_func
126-
00000000 r __func__.6628
127-
00000000 r __func__.6637
128-
00000000 r __func__.6642
126+
00000000 r __func__.6632
127+
00000000 r __func__.6641
128+
00000000 r __func__.6646
129129

130130
rtt.o:
131131
00000000 T RTT_EnableIT
@@ -134,8 +134,8 @@ rtt.o:
134134
00000000 T RTT_SetAlarm
135135
00000000 T RTT_SetPrescaler
136136
U __assert_func
137-
00000000 r __func__.6635
138-
00000000 r __func__.6643
137+
00000000 r __func__.6639
138+
00000000 r __func__.6647
139139

140140
spi.o:
141141
00000000 T SPI_Configure
@@ -161,9 +161,9 @@ tc.o:
161161
00000000 T TC_Start
162162
00000000 T TC_Stop
163163
U __assert_func
164-
00000000 r __func__.6630
165-
00000000 r __func__.6636
166-
00000000 r __func__.6642
164+
00000000 r __func__.6634
165+
00000000 r __func__.6640
166+
00000000 r __func__.6646
167167

168168
timetick.o:
169169
00000000 T GetTickCount
@@ -184,24 +184,26 @@ twi.o:
184184
00000000 T TWI_GetStatus
185185
00000000 T TWI_ReadByte
186186
00000000 T TWI_SendSTOPCondition
187+
00000000 T TWI_SetClock
187188
00000000 T TWI_StartRead
188189
00000000 T TWI_StartWrite
189190
00000000 T TWI_Stop
190191
00000000 T TWI_TransferComplete
191192
00000000 T TWI_WriteByte
192193
U __assert_func
193-
00000000 r __func__.7003
194-
00000000 r __func__.7018
195-
00000000 r __func__.7022
196-
00000000 r __func__.7029
197-
00000000 r __func__.7033
198-
00000000 r __func__.7038
199-
00000000 r __func__.7046
200-
00000000 r __func__.7060
201-
00000000 r __func__.7065
202-
00000000 r __func__.7069
203-
00000000 r __func__.7074
204-
00000000 r __func__.7078
194+
00000000 r __func__.7004
195+
00000000 r __func__.7010
196+
00000000 r __func__.7028
197+
00000000 r __func__.7032
198+
00000000 r __func__.7039
199+
00000000 r __func__.7043
200+
00000000 r __func__.7048
201+
00000000 r __func__.7056
202+
00000000 r __func__.7070
203+
00000000 r __func__.7075
204+
00000000 r __func__.7079
205+
00000000 r __func__.7084
206+
00000000 r __func__.7088
205207

206208
usart.o:
207209
00000000 T USART_Configure
@@ -220,7 +222,7 @@ usart.o:
220222
00000000 T USART_Write
221223
00000000 T USART_WriteBuffer
222224
U __assert_func
223-
00000000 r __func__.6924
225+
00000000 r __func__.6928
224226

225227
wdt.o:
226228
00000000 T WDT_Disable
@@ -298,7 +300,7 @@ startup_sam3xa.o:
298300
U main
299301

300302
adc.o:
301-
00000000 r C.0.8141
303+
00000000 r C.0.8146
302304
00000000 T adc_configure_power_save
303305
00000000 T adc_configure_sequence
304306
00000000 T adc_configure_timing
@@ -488,7 +490,7 @@ efc.o:
488490
00000000 T efc_set_flash_access_mode
489491
00000000 T efc_set_wait_state
490492
0000006c T efc_write_fmr
491-
00000000 b iap_perform_command.6905
493+
00000000 b iap_perform_command.6909
492494

493495
gpbr.o:
494496
00000000 T gpbr_read

0 commit comments

Comments
 (0)