Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 39 additions & 6 deletions bsp/nxp/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,41 @@
# NXP BSP 说明
# NXP BSP 支持说明

存放RT-Thread NXP BSP目录,目前支持MCX系列,之前一些老的IC支持(如LPC/Kinetis/I.MXRT)会逐步放到此目录下
NXP 系列 BSP 目前支持情况如下表所示:

| BSP 文件夹名称 | 开发板名称 |
|:------------------------- |:-------------------------- |
| mcxn | frdm-mcxn947 |
| mcxa | frdm-mcxa153 |
| **BSP 文件夹名称** | **开发板名称** |
|:------------------------------------------------ |:----------------------------------- |
| **MCXN 系列** | |
| [frdm-mcxn947](mcx/mcxn/frdm-mcxn947) | NXP 官方 FRDM-MCXN947 开发板 |
| [frdm-mcxn236](mcx/mcxn/frdm-mcxn236) | NXP 官方 FRDM-MCXN236 开发板 |
| **MCXA 系列** | |
| [frdm-mcxa153](mcx/mcxa/frdm-mcxa153) | NXP 官方 FRDM-MCXA153 开发板 |
| [frdm-mcxa156](mcx/mcxa/frdm-mcxa156) | NXP 官方 FRDM-MCXA156 开发板 |
| [frdm-mcxa346](mcx/mcxa/frdm-mcxa346) | NXP 官方 FRDM-MCXA346 开发板 |
| [frdm-mcxa344](mcx/mcxa/frdm-mcxa344) | NXP 官方 FRDM-MCXA344 开发板 |
| **MCXC 系列** | |
| [frdm-mcxc444](mcx/mcxc/frdm-mcxc444) | NXP 官方 FRDM-MCXC444 开发板 |
| **LPC 系列** | |
| [lpc43xx](lpc/lpc43xx) | NXP LPC43xx 系列开发板 |
| [lpc55sxx](lpc/lpc55sxx) | NXP LPC55Sxx 系列开发板 |
| [lpc176x](lpc/lpc176x) | NXP LPC176x 系列开发板 |
| [lpc178x](lpc/lpc178x) | NXP LPC178x 系列开发板 |
| [lpc408x](lpc/lpc408x) | NXP LPC408x 系列开发板 |
| [lpc824](lpc/lpc824) | NXP LPC824 开发板 |
| [lpc1114](lpc/lpc1114) | NXP LPC1114 开发板 |
| [lpc2148](lpc/lpc2148) | NXP LPC2148 开发板 |
| [lpc2478](lpc/lpc2478) | NXP LPC2478 开发板 |
| [lpc5410x](lpc/lpc5410x) | NXP LPC5410x 系列开发板 |
| [lpc54114-lite](lpc/lpc54114-lite) | NXP LPC54114-Lite 开发板 |
| [lpc54608-lpcxpresso](lpc/lpc54608-lpcxpresso) | NXP 官方 LPC54608-LPCXpresso 开发板 |

另外,我们还提供了一些热门开发板的上手说明:

* [NXP FRDM-MCXN947上手指南](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/frdm_mcxn947/quick-start)
* [NXP FRDM-MCXA156上手指南](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/frdm_mcxa156/quick-start)

## 注意事项

- MCX 系列是 NXP 最新推出的 MCU 系列,具有高性能和低功耗特性
- 部分老旧系列(LPC/Kinetis/i.MX RT)正在逐步迁移和更新中
- 建议优先选择 MCX 系列进行新项目开发
- 各系列 BSP 的具体支持功能请参考对应目录下的 README 文档
4 changes: 4 additions & 0 deletions bsp/nxp/mcx/mcxa/Libraries/drivers/drv_adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
#include "fsl_lpadc.h"
#include "fsl_spc.h"

#define DBG_TAG "drv.adc"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>

#ifdef RT_USING_ADC

#define DEFAULT_HW_AVG (kLPADC_HardwareAverageCount4)
Expand Down
65 changes: 61 additions & 4 deletions bsp/nxp/mcx/mcxa/Libraries/drivers/drv_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,27 @@

#ifdef RT_USING_I2C

#define DBG_TAG "drv.i2c"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>

enum
{
#ifdef BSP_USING_I2C0
I2C0_INDEX,
#endif
#ifdef BSP_USING_I2C1
I2C1_INDEX,
#endif
#ifdef BSP_USING_I2C2
I2C2_INDEX,
#endif
#ifdef BSP_USING_I2C3
I2C3_INDEX,
#endif
};


#define i2c_dbg rt_kprintf

struct lpc_i2c_bus
{
struct rt_i2c_bus_device parent;
Expand All @@ -44,12 +55,58 @@ struct lpc_i2c_bus lpc_obj[] =
{
.I2C = LPI2C0,
.baud = 100000U,
#if (defined(CPU_MCXA346VLH) || defined(CPU_MCXA346VLL) || defined(CPU_MCXA346VLQ) || defined(CPU_MCXA346VPN))
.clock_attach_id = kFRO_LF_DIV_to_LPI2C0,
#else
.clock_attach_id = kFRO12M_to_LPI2C0,
#endif
.clock_div_name = kCLOCK_DivLPI2C0,
.clock_src = kCLOCK_Fro12M,
.name = "i2c0",
},
#endif
#ifdef BSP_USING_I2C1
{
.I2C = LPI2C1,
.baud = 100000U,
#if (defined(CPU_MCXA346VLH) || defined(CPU_MCXA346VLL) || defined(CPU_MCXA346VLQ) || defined(CPU_MCXA346VPN))
.clock_attach_id = kFRO_LF_DIV_to_LPI2C1,
#else
.clock_attach_id = kFRO12M_to_LPI2C1,
#endif
.clock_div_name = kCLOCK_DivLPI2C1,
.clock_src = kCLOCK_Fro12M,
.name = "i2c1",
},
#endif
#ifdef BSP_USING_I2C2
{
.I2C = LPI2C2,
.baud = 100000U,
#if (defined(CPU_MCXA346VLH) || defined(CPU_MCXA346VLL) || defined(CPU_MCXA346VLQ) || defined(CPU_MCXA346VPN))
.clock_attach_id = kFRO_LF_DIV_to_LPI2C2,
#else
.clock_attach_id = kFRO12M_to_LPI2C2,
#endif
.clock_div_name = kCLOCK_DivLPI2C2,
.clock_src = kCLOCK_Fro12M,
.name = "i2c2",
},
#endif
#ifdef BSP_USING_I2C3
{
.I2C = LPI2C3,
.baud = 100000U,
#if (defined(CPU_MCXA346VLH) || defined(CPU_MCXA346VLL) || defined(CPU_MCXA346VLQ) || defined(CPU_MCXA346VPN))
.clock_attach_id = kFRO_LF_DIV_to_LPI2C3,
#else
.clock_attach_id = kFRO12M_to_LPI2C3,
#endif
.clock_div_name = kCLOCK_DivLPI2C3,
.clock_src = kCLOCK_Fro12M,
.name = "i2c3",
},
#endif
};

static rt_ssize_t lpc_i2c_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num)
Expand Down Expand Up @@ -80,7 +137,7 @@ static rt_ssize_t lpc_i2c_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg

if (LPI2C_MasterTransferBlocking(lpc_i2c->I2C, &xfer) != kStatus_Success)
{
i2c_dbg("i2c bus read failed!\n");
LOG_D("i2c bus read failed!\n");
return i;
}
}
Expand All @@ -99,7 +156,7 @@ static rt_ssize_t lpc_i2c_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg

if (LPI2C_MasterTransferBlocking(lpc_i2c->I2C, &xfer) != kStatus_Success)
{
i2c_dbg("i2c bus write failed!\n");
LOG_D("i2c bus write failed!\n");
return i;
}
}
Expand Down
16 changes: 12 additions & 4 deletions bsp/nxp/mcx/mcxa/Libraries/drivers/drv_pin.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,25 @@

#ifdef RT_USING_PIN

#define DBG_TAG "drv.pin"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>

#define GET_GPIO_PORT(x) ((x) / 32)
#define GET_GPIO_PIN(x) ((x) % 32)

static struct rt_pin_ops mcx_pin_ops;

static GPIO_Type *GPIO_TYPE_TBL[] = {GPIO0, GPIO1, GPIO2, GPIO3};
static PORT_Type *PORT_TYPE_TBL[] = {PORT0, PORT1, PORT2, PORT3};
static IRQn_Type IRQ_TYPE_TBL[] = {GPIO0_IRQn, GPIO1_IRQn, GPIO2_IRQn, GPIO3_IRQn};
static GPIO_Type *GPIO_TYPE_TBL[] = GPIO_BASE_PTRS;
static PORT_Type *PORT_TYPE_TBL[] = PORT_BASE_PTRS;
static IRQn_Type IRQ_TYPE_TBL[] = GPIO_IRQS;


#define PIN2GPIO(x) GPIO_TYPE_TBL[GET_GPIO_PORT(x)]
#define PIN2PORT(x) PORT_TYPE_TBL[GET_GPIO_PORT(x)]
#define PIN2IRQ(x) IRQ_TYPE_TBL[GET_GPIO_PORT(x)]

struct rt_pin_irq_hdr pin_irq_hdr_tab[32*4] = {0};
struct rt_pin_irq_hdr pin_irq_hdr_tab[32*5] = {0};

static void mcx_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
{
Expand Down Expand Up @@ -143,6 +146,11 @@ void GPIO3_IRQHandler(void)
pin_irq_handler(3);
}

void GPIO4_IRQHandler(void)
{
pin_irq_handler(4);
}


static rt_err_t mcx_pin_attach_irq(struct rt_device *device, rt_base_t pin, rt_uint8_t mode, void (*hdr)(void *args), void *args)
{
Expand Down
Loading
Loading