19 #include <ti/drivers/SPI.h>
20 #include <ti/drivers/GPIO.h>
21 #include <ti/drivers/net/wifi/porting/cc_pal.h>
22 #include <ti/drivers/net/wifi/simplelink.h>
24 #define MSP_EXP432P401R_HOST_IRQ (2)
25 #define MSP_EXP432P401R_nHIB_pin (5)
26 #define MSP_EXP432P401R_CS_pin (6)
27 #define MAX_DMA_TRANSACTION_SIZE (1024)
28 #define SPI_RATE_8M (8000000)
29 #define SPI_RATE_10M (10000000)
30 #define SPI_RATE_13M (13000000)
31 #define SPI_RATE_20M (20000000)
32 #define ASSERT_CS() (GPIO_write(MSP_EXP432P401R_CS_pin, 0))
33 #define DEASSERT_CS() (GPIO_write(MSP_EXP432P401R_CS_pin, 1))
39 volatile Fd_t g_SpiFd = 0;
40 SL_P_EVENT_HANDLER g_Host_irq_Hndlr = NULL;
46 Fd_t spi_Open(
char *ifName,
unsigned long flags)
49 SPI_Params SPI_Config;
52 SPI_Config.transferMode = SPI_MODE_BLOCKING;
53 SPI_Config.mode = SPI_MASTER;
54 SPI_Config.bitRate = 20000000;
55 SPI_Config.dataSize = 8;
56 SPI_Config.frameFormat = SPI_POL0_PHA0;
59 SPI_Params_init(&SPI_Config);
62 lspi_hndl = SPI_open(0, &SPI_Config);
69 return (Fd_t)lspi_hndl;
74 int spi_Close(Fd_t fd)
76 SPI_close((
void *)fd);
81 int spi_Read(Fd_t fd,
unsigned char *pBuff,
int len)
83 SPI_Transaction transact_details;
95 transact_details.txBuf = NULL;
96 transact_details.arg = NULL;
97 transact_details.rxBuf = (
void*)(pBuff);
101 if(len > MAX_DMA_TRANSACTION_SIZE)
103 transact_details.count = MAX_DMA_TRANSACTION_SIZE ;
107 transact_details.count = len ;
110 if(SPI_transfer((SPI_Handle)fd, &transact_details))
112 read_size += transact_details.count;
113 len = len - transact_details.count;
114 transact_details.rxBuf = ((
unsigned char *)(transact_details.rxBuf) + read_size);
129 int spi_Write(Fd_t fd,
unsigned char *pBuff,
int len)
131 SPI_Transaction transact_details;
143 transact_details.rxBuf = NULL;
144 transact_details.arg = NULL;
145 transact_details.txBuf = (
void*)(pBuff);
149 if(len > MAX_DMA_TRANSACTION_SIZE)
151 transact_details.count = MAX_DMA_TRANSACTION_SIZE ;
155 transact_details.count = len ;
158 if(SPI_transfer((SPI_Handle)fd, &transact_details))
160 write_size += transact_details.count;
161 len = len - transact_details.count;
162 transact_details.txBuf = ((
unsigned char *)(transact_details.txBuf) + write_size);
177 int NwpRegisterInterruptHandler(P_EVENT_HANDLER InterruptHdl ,
void* pValue)
180 if(NULL == InterruptHdl)
182 GPIO_disableInt(MSP_EXP432P401R_HOST_IRQ);
183 GPIO_clearInt(MSP_EXP432P401R_HOST_IRQ);
184 g_Host_irq_Hndlr = NULL;
187 else if(NULL == g_Host_irq_Hndlr)
189 g_Host_irq_Hndlr = InterruptHdl;
190 GPIO_setCallback(MSP_EXP432P401R_HOST_IRQ, HostIrqGPIO_callback);
191 GPIO_enableInt(MSP_EXP432P401R_HOST_IRQ);
202 void HostIrqGPIO_callback(uint_least8_t index)
204 if((index == MSP_EXP432P401R_HOST_IRQ) && (NULL != g_Host_irq_Hndlr))
211 void NwpMaskInterrupt()
217 void NwpUnMaskInterrupt()
223 void NwpPowerOnPreamble(
void)
229 void NwpPowerOn(
void)
231 GPIO_write(MSP_EXP432P401R_nHIB_pin, 1);
237 void NwpPowerOff(
void)
239 GPIO_write(MSP_EXP432P401R_nHIB_pin, 0);
245 int Semaphore_create_handle(SemaphoreP_Handle* pSemHandle)
247 (*(pSemHandle)) = SemaphoreP_create(0, NULL);
251 return SemaphoreP_FAILURE ;
254 return SemaphoreP_OK;
258 int Mutex_create_handle(MutexP_Handle* pMutexHandle)
261 (*(pMutexHandle)) = MutexP_create(NULL);
263 if(!(*(pMutexHandle)))
265 return MutexP_FAILURE ;
272 int Mutex_unlock(MutexP_Handle pMutexHandle)
274 MutexP_unlock(pMutexHandle, 0);
279 int Mutex_lock(MutexP_Handle pMutexHandle)
281 MutexP_lock(pMutexHandle);
285 unsigned long TimerGetCurrentTimestamp()
287 return (ClockP_getSystemTicks());