3131
3232const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
3333
34+ uint32_t mode2config (uint8_t mode)
35+ {
36+ uint32_t config = 0 ;
37+
38+ switch (mode)
39+ {
40+ default :
41+ case SPI_MODE0:
42+ config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
43+ config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
44+ break ;
45+
46+ case SPI_MODE1:
47+ config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
48+ config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
49+ break ;
50+
51+ case SPI_MODE2:
52+ config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
53+ config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
54+ break ;
55+
56+ case SPI_MODE3:
57+ config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
58+ config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
59+ break ;
60+ }
61+
62+ return config;
63+ }
64+
3465SPIClass::SPIClass (NRF_SPIM_Type *p_spi, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI)
3566{
3667 initialized = false ;
@@ -63,42 +94,6 @@ void SPIClass::begin()
6394 beginTransaction (DEFAULT_SPI_SETTINGS);
6495}
6596
66- void SPIClass::beginTransaction (SPISettings settings)
67- {
68- _p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
69-
70- this ->_bitOrder = (settings.bitOrder == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
71- uint32_t config = this ->_bitOrder ;
72-
73- switch (settings.dataMode ) {
74- default :
75- case SPI_MODE0:
76- config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
77- config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
78- break ;
79-
80- case SPI_MODE1:
81- config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
82- config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
83- break ;
84-
85- case SPI_MODE2:
86- config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
87- config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
88- break ;
89-
90- case SPI_MODE3:
91- config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
92- config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
93- break ;
94- }
95-
96- _p_spi->CONFIG = config;
97- setClockDivider (F_CPU / settings.clockFreq );
98-
99- _p_spi->ENABLE = (SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos);
100- }
101-
10297void SPIClass::end ()
10398{
10499 _p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
@@ -110,10 +105,18 @@ void SPIClass::usingInterrupt(int /*interruptNumber*/)
110105{
111106}
112107
113- // void SPIClass::beginTransaction(SPISettings settings)
114- // {
115- // config(settings);
116- // }
108+ void SPIClass::beginTransaction (SPISettings settings)
109+ {
110+ _p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
111+
112+ this ->_bitOrder = (settings.bitOrder == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
113+ this ->_dataMode = settings.dataMode ;
114+
115+ _p_spi->CONFIG = this ->_bitOrder | mode2config (this ->_dataMode );
116+ setClockDivider (F_CPU / settings.clockFreq );
117+
118+ _p_spi->ENABLE = (SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos);
119+ }
117120
118121void SPIClass::endTransaction (void )
119122{
@@ -124,64 +127,13 @@ void SPIClass::setBitOrder(BitOrder order)
124127{
125128 this ->_bitOrder = (order == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
126129
127- uint32_t config = this ->_bitOrder ;
128-
129- switch (this ->_dataMode ) {
130- default :
131- case SPI_MODE0:
132- config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
133- config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
134- break ;
135-
136- case SPI_MODE1:
137- config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
138- config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
139- break ;
140-
141- case SPI_MODE2:
142- config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
143- config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
144- break ;
145-
146- case SPI_MODE3:
147- config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
148- config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
149- break ;
150- }
151-
152- _p_spi->CONFIG = config;
130+ _p_spi->CONFIG = this ->_bitOrder | mode2config (this ->_dataMode );
153131}
154132
155133void SPIClass::setDataMode (uint8_t mode)
156134{
157135 this ->_dataMode = mode;
158-
159- uint32_t config = this ->_bitOrder ;
160-
161- switch (this ->_dataMode ) {
162- default :
163- case SPI_MODE0:
164- config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
165- config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
166- break ;
167-
168- case SPI_MODE1:
169- config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
170- config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
171- break ;
172-
173- case SPI_MODE2:
174- config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
175- config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
176- break ;
177-
178- case SPI_MODE3:
179- config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
180- config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
181- break ;
182- }
183-
184- _p_spi->CONFIG = config;
136+ _p_spi->CONFIG = this ->_bitOrder | mode2config (this ->_dataMode );
185137}
186138
187139void SPIClass::setClockDivider (uint32_t div)
0 commit comments