3131 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3232 *
3333 *****************************************************************************/
34- #include "mpconfigport.h"
35- #if MICROPY_HW_ENABLE_CC3K
3634
3735#include <string.h>
3836
4442#include "obj.h"
4543#include "runtime.h"
4644#include "pin.h"
47- #include "genhdr/pins.h"
4845#include "led.h"
4946#include "extint.h"
5047#include "spi.h"
5855#define DEBUG_printf (args ...) (void)0
5956#endif
6057
61- #define PIN_CS MICROPY_HW_WLAN_PIN_CS
62- #define PIN_EN MICROPY_HW_WLAN_PIN_EN
63- #define PIN_IRQ MICROPY_HW_WLAN_PIN_IRQ
64- #define SPI_HANDLE MICROPY_HW_WLAN_SPI_HANDLE
65- #define IRQ_LINE MICROPY_HW_WLAN_IRQ_LINE
58+ // these need to be set to valid values before anything in this file will work
59+ STATIC SPI_HandleTypeDef * SPI_HANDLE = NULL ;
60+ STATIC const pin_obj_t * PIN_CS = NULL ;
61+ STATIC const pin_obj_t * PIN_EN = NULL ;
62+ STATIC const pin_obj_t * PIN_IRQ = NULL ;
6663
67- #define CS_LOW () HAL_GPIO_WritePin(PIN_CS. gpio, PIN_CS. pin_mask, GPIO_PIN_RESET)
68- #define CS_HIGH () HAL_GPIO_WritePin(PIN_CS. gpio, PIN_CS. pin_mask, GPIO_PIN_SET)
64+ #define CS_LOW () HAL_GPIO_WritePin(PIN_CS-> gpio, PIN_CS-> pin_mask, GPIO_PIN_RESET)
65+ #define CS_HIGH () HAL_GPIO_WritePin(PIN_CS-> gpio, PIN_CS-> pin_mask, GPIO_PIN_SET)
6966
7067#define READ 3
7168#define WRITE 1
@@ -106,10 +103,19 @@ tSpiInformation sSpiInformation;
106103char spi_buffer [CC3000_RX_BUFFER_SIZE ];
107104unsignedchar wlan_tx_buffer [CC3000_TX_BUFFER_SIZE ];
108105
109- static const mp_obj_fun_native_t irq_callback_obj ;
106+ STATIC const mp_obj_fun_builtin_t irq_callback_obj ;
110107void SpiWriteDataSynchronous (unsignedchar * data ,unsigned short size );
111108void SpiReadDataSynchronous (unsignedchar * data ,unsigned short size );
112109
110+ // set the pins to use to communicate with the CC3000
111+ // the arguments must be of type pin_obj_t* and SPI_HandleTypeDef*
112+ void SpiInit (void * spi ,const void * pin_cs ,const void * pin_en ,const void * pin_irq ) {
113+ SPI_HANDLE = spi ;
114+ PIN_CS = pin_cs ;
115+ PIN_EN = pin_en ;
116+ PIN_IRQ = pin_irq ;
117+ }
118+
113119void SpiClose (void )
114120{
115121if (sSpiInformation .pRxPacket ) {
@@ -118,7 +124,7 @@ void SpiClose(void)
118124
119125tSLInformation .WlanInterruptDisable ();
120126
121- //HAL_SPI_DeInit(& SPI_HANDLE);
127+ //HAL_SPI_DeInit(SPI_HANDLE);
122128}
123129
124130void SpiOpen (gcSpiHandleRx pfRxHandler )
@@ -136,18 +142,18 @@ void SpiOpen(gcSpiHandleRx pfRxHandler)
136142wlan_tx_buffer [CC3000_TX_BUFFER_SIZE - 1 ]= CC3000_BUFFER_MAGIC_NUMBER ;
137143
138144/* SPI configuration */
139- SPI_HANDLE . Init .Mode = SPI_MODE_MASTER ;
140- SPI_HANDLE . Init .Direction = SPI_DIRECTION_2LINES ;
141- SPI_HANDLE . Init .DataSize = SPI_DATASIZE_8BIT ;
142- SPI_HANDLE . Init .CLKPolarity = SPI_POLARITY_LOW ;
143- SPI_HANDLE . Init .CLKPhase = SPI_PHASE_2EDGE ;
144- SPI_HANDLE . Init .NSS = SPI_NSS_SOFT ;
145- SPI_HANDLE . Init .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8 ;
146- SPI_HANDLE . Init .FirstBit = SPI_FIRSTBIT_MSB ;
147- SPI_HANDLE . Init .TIMode = SPI_TIMODE_DISABLED ;
148- SPI_HANDLE . Init .CRCCalculation = SPI_CRCCALCULATION_DISABLED ;
149- SPI_HANDLE . Init .CRCPolynomial = 7 ;
150- spi_init (& SPI_HANDLE );
145+ SPI_HANDLE -> Init .Mode = SPI_MODE_MASTER ;
146+ SPI_HANDLE -> Init .Direction = SPI_DIRECTION_2LINES ;
147+ SPI_HANDLE -> Init .DataSize = SPI_DATASIZE_8BIT ;
148+ SPI_HANDLE -> Init .CLKPolarity = SPI_POLARITY_LOW ;
149+ SPI_HANDLE -> Init .CLKPhase = SPI_PHASE_2EDGE ;
150+ SPI_HANDLE -> Init .NSS = SPI_NSS_SOFT ;
151+ SPI_HANDLE -> Init .BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8 ;
152+ SPI_HANDLE -> Init .FirstBit = SPI_FIRSTBIT_MSB ;
153+ SPI_HANDLE -> Init .TIMode = SPI_TIMODE_DISABLED ;
154+ SPI_HANDLE -> Init .CRCCalculation = SPI_CRCCALCULATION_DISABLED ;
155+ SPI_HANDLE -> Init .CRCPolynomial = 7 ;
156+ spi_init (SPI_HANDLE );
151157
152158// configure wlan CS and EN pins
153159GPIO_InitTypeDef GPIO_InitStructure ;
@@ -156,48 +162,48 @@ void SpiOpen(gcSpiHandleRx pfRxHandler)
156162GPIO_InitStructure .Pull = GPIO_NOPULL ;
157163GPIO_InitStructure .Alternate = 0 ;
158164
159- GPIO_InitStructure .Pin = PIN_CS . pin_mask ;
160- HAL_GPIO_Init (PIN_CS . gpio ,& GPIO_InitStructure );
165+ GPIO_InitStructure .Pin = PIN_CS -> pin_mask ;
166+ HAL_GPIO_Init (PIN_CS -> gpio ,& GPIO_InitStructure );
161167
162- GPIO_InitStructure .Pin = PIN_EN . pin_mask ;
163- HAL_GPIO_Init (PIN_EN . gpio ,& GPIO_InitStructure );
168+ GPIO_InitStructure .Pin = PIN_EN -> pin_mask ;
169+ HAL_GPIO_Init (PIN_EN -> gpio ,& GPIO_InitStructure );
164170
165- HAL_GPIO_WritePin (PIN_CS . gpio ,PIN_CS . pin_mask ,GPIO_PIN_SET );
166- HAL_GPIO_WritePin (PIN_EN . gpio ,PIN_EN . pin_mask ,GPIO_PIN_RESET );
171+ HAL_GPIO_WritePin (PIN_CS -> gpio ,PIN_CS -> pin_mask ,GPIO_PIN_SET );
172+ HAL_GPIO_WritePin (PIN_EN -> gpio ,PIN_EN -> pin_mask ,GPIO_PIN_RESET );
167173
168174/* do a dummy read, this ensures SCLK is low before
169175 actual communications start, it might be required */
170176CS_LOW ();
171177uint8_t buf [1 ];
172- HAL_SPI_Receive (& SPI_HANDLE ,buf ,sizeof (buf ),SPI_TIMEOUT );
178+ HAL_SPI_Receive (SPI_HANDLE ,buf ,sizeof (buf ),SPI_TIMEOUT );
173179CS_HIGH ();
174180
175181// register EXTI
176- extint_register ((mp_obj_t )& PIN_IRQ ,GPIO_MODE_IT_FALLING ,GPIO_PULLUP , (mp_obj_t )& irq_callback_obj , true,NULL );
177- extint_enable (IRQ_LINE );
182+ extint_register ((mp_obj_t )PIN_IRQ ,GPIO_MODE_IT_FALLING ,GPIO_PULLUP , (mp_obj_t )& irq_callback_obj , true,NULL );
183+ extint_enable (PIN_IRQ -> pin );
178184
179- DEBUG_printf ("SpiOpen finished; IRQ.pin=%d IRQ_LINE=%d\n" ,PIN_IRQ . pin ,IRQ_LINE );
185+ DEBUG_printf ("SpiOpen finished; IRQ.pin=%d IRQ_LINE=%d\n" ,PIN_IRQ -> pin ,PIN_IRQ -> pin );
180186}
181187
182188
183189void SpiPauseSpi (void )
184190{
185- extint_disable (IRQ_LINE );
191+ extint_disable (PIN_IRQ -> pin );
186192}
187193
188194void SpiResumeSpi (void )
189195{
190- extint_enable (IRQ_LINE );
196+ extint_enable (PIN_IRQ -> pin );
191197}
192198
193199long ReadWlanInterruptPin (void )
194200{
195- return HAL_GPIO_ReadPin (PIN_IRQ . gpio ,PIN_IRQ . pin_mask );
201+ return HAL_GPIO_ReadPin (PIN_IRQ -> gpio ,PIN_IRQ -> pin_mask );
196202}
197203
198204void WriteWlanPin (unsignedchar val )
199205{
200- HAL_GPIO_WritePin (PIN_EN . gpio ,PIN_EN . pin_mask ,
206+ HAL_GPIO_WritePin (PIN_EN -> gpio ,PIN_EN -> pin_mask ,
201207 (WLAN_ENABLE )?GPIO_PIN_SET :GPIO_PIN_RESET );
202208}
203209
@@ -306,7 +312,7 @@ void SpiWriteDataSynchronous(unsigned char *data, unsigned short size)
306312{
307313DEBUG_printf ("SpiWriteDataSynchronous(data=%p [%x %x %x %x], size=%u)\n" ,data ,data [0 ],data [1 ],data [2 ],data [3 ],size );
308314__disable_irq ();
309- if (HAL_SPI_TransmitReceive (& SPI_HANDLE ,data ,data ,size ,SPI_TIMEOUT )!= HAL_OK ) {
315+ if (HAL_SPI_TransmitReceive (SPI_HANDLE ,data ,data ,size ,SPI_TIMEOUT )!= HAL_OK ) {
310316//BREAK();
311317 }
312318__enable_irq ();
@@ -317,7 +323,7 @@ void SpiReadDataSynchronous(unsigned char *data, unsigned short size)
317323{
318324memset (data ,READ ,size );
319325__disable_irq ();
320- if (HAL_SPI_TransmitReceive (& SPI_HANDLE ,data ,data ,size ,SPI_TIMEOUT )!= HAL_OK ) {
326+ if (HAL_SPI_TransmitReceive (SPI_HANDLE ,data ,data ,size ,SPI_TIMEOUT )!= HAL_OK ) {
321327//BREAK();
322328 }
323329__enable_irq ();
@@ -453,5 +459,3 @@ STATIC mp_obj_t irq_callback(mp_obj_t line)
453459}
454460
455461STATIC MP_DEFINE_CONST_FUN_OBJ_1 (irq_callback_obj ,irq_callback );
456-
457- #endif // MICROPY_HW_ENABLE_CC3K