summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbner <[email protected]>2024-04-12 17:18:42 +0800
committerMeco Man <[email protected]>2024-04-16 22:54:33 -0400
commitb4ba71e4eccaf8781010cde85d07316515401316 (patch)
tree21b1afe9e43fddd662703826296cc1b78db06032
parent24a279115f32e3c76b61a2e5f39910d4065636fe (diff)
[bsp][nxp] 增加drv_spi_sample_rw007驱动
-rw-r--r--bsp/nxp/mcx/mcxn/Libraries/drivers/drv_spi.c6
-rw-r--r--bsp/nxp/mcx/mcxn/frdm-mcxn947/board/MCUX_Config/board/pin_mux.c2
-rw-r--r--bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_spi_sample_rw007.c68
3 files changed, 72 insertions, 4 deletions
diff --git a/bsp/nxp/mcx/mcxn/Libraries/drivers/drv_spi.c b/bsp/nxp/mcx/mcxn/Libraries/drivers/drv_spi.c
index f539ace527..c29a2caa54 100644
--- a/bsp/nxp/mcx/mcxn/Libraries/drivers/drv_spi.c
+++ b/bsp/nxp/mcx/mcxn/Libraries/drivers/drv_spi.c
@@ -167,11 +167,11 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m
struct lpc_spi *spi = (struct lpc_spi *)(device->bus->parent.user_data);
-// struct lpc_sw_spi_cs *cs = device->parent.user_data;
+ struct lpc_sw_spi_cs *cs = device->parent.user_data;
if(message->cs_take)
{
- rt_pin_write(device->cs_pin, PIN_LOW);
+ rt_pin_write(cs->pin, PIN_LOW);
}
transfer.dataSize = message->length;
@@ -213,7 +213,7 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m
if(message->cs_release)
{
- rt_pin_write(device->cs_pin, PIN_HIGH);
+ rt_pin_write(cs->pin, PIN_HIGH);
}
return message->length;
diff --git a/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/MCUX_Config/board/pin_mux.c b/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/MCUX_Config/board/pin_mux.c
index e6d3e1c8f4..e9f7ca5f09 100644
--- a/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/MCUX_Config/board/pin_mux.c
+++ b/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/MCUX_Config/board/pin_mux.c
@@ -62,7 +62,7 @@ void BOARD_InitBootPins(void)
/* drv_pin.c works well, follow lines just notice that pins we used as GPIO function */
// PORT0->PCR[28] = PORT_PCR_MUX(0) | PORT_PCR_PS(1) | PORT_PCR_PE(1) | PORT_PCR_IBE(1); /* P0_28: P0_28 */
// PORT0->PCR[10] = PORT_PCR_MUX(0) | PORT_PCR_PS(0) | PORT_PCR_PE(1) | PORT_PCR_IBE(1); /* P0_10: P0_27 */
- // PORT0->PCR[27] = PORT_PCR_MUX(0) | PORT_PCR_PS(1) | PORT_PCR_PE(1) | PORT_PCR_IBE(1); /* P0_27: P0_27 */
+ PORT0->PCR[27] = PORT_PCR_MUX(0) | PORT_PCR_PS(1) | PORT_PCR_PE(1) | PORT_PCR_IBE(1); /* P0_27: P0_27 */
#endif
/* PMOD */
diff --git a/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_spi_sample_rw007.c b/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_spi_sample_rw007.c
new file mode 100644
index 0000000000..9f34ffba5c
--- /dev/null
+++ b/bsp/nxp/mcx/mcxn/frdm-mcxn947/board/ports/drv_spi_sample_rw007.c
@@ -0,0 +1,68 @@
+#include <rtthread.h>
+
+#ifdef BSP_USING_RW007
+#include <rtdbg.h>
+#include <rtdevice.h>
+#include <board.h>
+#include <spi_wifi_rw007.h>
+
+extern void spi_wifi_isr(int vector);
+
+static void rw007_gpio_init(void)
+{
+ /* Configure IO */
+ rt_pin_mode(BOARD_RW007_RST_PIN, PIN_MODE_OUTPUT);
+ rt_pin_mode(BOARD_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLDOWN);
+
+ /* Reset rw007 and config mode */
+ rt_pin_write(BOARD_RW007_RST_PIN, PIN_LOW);
+
+ rt_thread_delay(rt_tick_from_millisecond(1));
+ rt_pin_write(BOARD_RW007_RST_PIN, PIN_HIGH);
+
+ /* Wait rw007 ready(exit busy stat) */
+ while (!(BOARD_RW007_INT_BUSY_PIN))
+ {
+ rt_thread_delay(5);
+ }
+
+ rt_thread_delay(rt_tick_from_millisecond(200));
+ rt_pin_mode(BOARD_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLUP);
+}
+
+extern rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_uint32_t pin);
+
+int wifi_spi_device_init(void)
+{
+ char sn_version[32];
+ uint32_t cs_pin = BOARD_RW007_CS_PIN;
+
+ rw007_gpio_init();
+ rt_hw_spi_device_attach(BOARD_RW007_SPI_BUS_NAME, "rw007", cs_pin);
+ rt_hw_wifi_init("rw007");
+
+ rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);
+ rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP);
+
+ rw007_sn_get(sn_version);
+ rt_kprintf("\nrw007 sn: [%s]\n", sn_version);
+ rw007_version_get(sn_version);
+ rt_kprintf("rw007 ver: [%s]\n\n", sn_version);
+
+ return 0;
+}
+INIT_APP_EXPORT(wifi_spi_device_init);
+
+static void int_wifi_irq(void *p)
+{
+ ((void)p);
+ spi_wifi_isr(0);
+}
+
+void spi_wifi_hw_init(void)
+{
+ rt_pin_attach_irq(BOARD_RW007_INT_BUSY_PIN, PIN_IRQ_MODE_FALLING, int_wifi_irq, 0);
+ rt_pin_irq_enable(BOARD_RW007_INT_BUSY_PIN, RT_TRUE);
+}
+
+#endif \ No newline at end of file