这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【纳芯微NS800】1、GPIO点灯

共2条 1/1 1 跳转至

【纳芯微NS800】1、GPIO点灯

高工
2026-05-13 21:25:04     打赏

【前言】

最近入手纳芯微NS800开发板一块。准备连载一系列的相关文档。

【芯片介绍】

NS800RTx 芯片基于 ARM 指令架构的 Cortex M7 内核,集成 eMATH 数学加速核,适用于工业和汽车领域复杂 计算场景。借助 eMATH 数学加速器,NS800RTx 具备强大的快速环路计算能力。从运算周期对比来看,eMATH 在 执行如三角函数等运算时,运算周期与C2000 硬件加速器相近。且在支持更多复杂运算(如指数、对数、滤波 器以及矩阵运算)方面具有显著优势。尤其在电力系统的谐波分析中,需频繁进行复杂的矩阵运算和滤波算法, eMATH 加速器可高效完成这些运算,确保系统能快速、准确地分析谐波情况,保障电力系统稳定运行。 其外设资源丰富,详件下图:

image.png

【GPIO外设使用】

GPIO的相关的命名

1、GPIO与其它的MCU也采用了相同的命名。在其gpio.h中接要如下:

/* GPIO TI name */
#define GPIO_PORT_A    GPIOA
#define GPIO_PORT_B    GPIOB
#define GPIO_PORT_C    GPIOC
#define GPIO_PORT_D    GPIOD
#define GPIO_PORT_E    GPIOE
#define GPIO_PORT_F    GPIOF
#define GPIO_PORT_G    GPIOG
#define GPIO_PORT_H    GPIOH


/* GPIO TI name */
#define GPIO_0      GPIOA, GPIO_PIN_0     /*!< GPIO 0 */
#define GPIO_1      GPIOA, GPIO_PIN_1     /*!< GPIO 1 */
#define GPIO_2      GPIOA, GPIO_PIN_2     /*!< GPIO 2 */
#define GPIO_3      GPIOA, GPIO_PIN_3     /*!< GPIO 3 */
----
#define GPIO_223    GPIOG, GPIO_PIN_31    /*!< GPIO 223 */
#define GPIO_224    GPIOH, GPIO_PIN_0     /*!< GPIO 224 *

/* GPIO TI name */
#define GPIO_0_GPIO0             GPIO_0, ALT0_FUNCTION
#define GPIO_0_EPWM1_A           GPIO_0, ALT1_FUNCTION
#define GPIO_0_CLB_OUTPUTXBAR1   GPIO_0, ALT5_FUNCTION
#define GPIO_0_I2C1_SDA          GPIO_0, ALT6_FUNCTION
#define GPIO_0_EMIF1_A13         GPIO_0, ALT9_FUNCTION
#define GPIO_0_I2CA_SDA          GPIO_0_I2C1_SDA
上面的宏定义了端口,管脚对应的端口,以及复用。

【GPIO的配置】

如果配置GPIO为普通输出他的配置为:

GPIO_setPinConfig(GPIO_68_GPIO68);

即配置GPIO68为普通输出。

输入输出与翻转的函数为:

/**
  * \brief  Writes a value to the specified pin.
  * \param  port    GPIO port address
  *                  - GPIOA: GPIO A port
  *                  - GPIOB: GPIO B port
  *                  - GPIOC: GPIO C port
  *                  - GPIOD: GPIO D port
  *                  - GPIOE: GPIO E port
  *                  - GPIOF: GPIO F port
  *                  - GPIOG: GPIO G port
  *                  - GPIOH: GPIO H port
  * \param  pin     GPIO pin number
  *                  This parameter can be any value of @ref GPIO_PINNUM
  * \param  outVal  Pin output value to write to the pin
  *                  - 0: Pin output value is low
  *                  - 1: Pin output value is high
  */
static inline void GPIO_writePin (GPIO_TypeDef *port, GPIO_PinNum pin, uint32_t outVal)
{
    if (outVal == 0UL)
    {
        WRITE_REG(port->CLR.WORDVAL, (0x1UL << pin));
    }
    else
    {
        WRITE_REG(port->SET.WORDVAL, (0x1UL << pin));
    }
}

/**
  * \brief  Sets the specified pin.
  * \param  port  GPIO port address
  *                - GPIOA: GPIO A port
  *                - GPIOB: GPIO B port
  *                - GPIOC: GPIO C port
  *                - GPIOD: GPIO D port
  *                - GPIOE: GPIO E port
  *                - GPIOF: GPIO F port
  *                - GPIOG: GPIO G port
  *                - GPIOH: GPIO H port
  * \param  pin   GPIO pin number
  *                This parameter can be any value of @ref GPIO_PINNUM
  */
static inline void GPIO_setPin (GPIO_TypeDef *port, GPIO_PinNum pin)
{
    WRITE_REG(port->SET.WORDVAL, (0x1UL << pin));
}

/**
  * \brief  Clears the specified pin.
  * \param  port  GPIO port address
  *                - GPIOA: GPIO A port
  *                - GPIOB: GPIO B port
  *                - GPIOC: GPIO C port
  *                - GPIOD: GPIO D port
  *                - GPIOE: GPIO E port
  *                - GPIOF: GPIO F port
  *                - GPIOG: GPIO G port
  *                - GPIOH: GPIO H port
  * \param  pin   GPIO pin number
  *                This parameter can be any value of @ref GPIO_PINNUM
  */
static inline void GPIO_clearPin (GPIO_TypeDef *port, GPIO_PinNum pin)
{
    WRITE_REG(port->CLR.WORDVAL, (0x1UL << pin));
}

/**
  * \brief  Toggles the specified pin.
  * \param  port  GPIO port address
  *                - GPIOA: GPIO A port
  *                - GPIOB: GPIO B port
  *                - GPIOC: GPIO C port
  *                - GPIOD: GPIO D port
  *                - GPIOE: GPIO E port
  *                - GPIOF: GPIO F port
  *                - GPIOG: GPIO G port
  *                - GPIOH: GPIO H port
  * \param  pin   GPIO pin number
  *                This parameter can be any value of @ref GPIO_PINNUM
  */
static inline void GPIO_togglePin (GPIO_TypeDef *port, GPIO_PinNum pin)
{
    WRITE_REG(port->TOGGLE.WORDVAL, (0x1UL << pin));
}

【例程】

main.c的示例程序为:

/**
 * @brief   Main function
 * @return  int  Force return 0
 */
int main(void)
{
    /* Initialize device clock and peripherals */
    Device_init();
    /* Disable peripheral register locks */
    Device_unlockPeriphReg();

    /* Board Initialization
       Setup LED pins, Key pins and Serial Communication Interface pins
     */
    Board_init();
    /* LED1 on */
    GPIO_setPin(BOARD_LED1_PIN);
    /* Debug information printing */
    printf("Gpio example 1 setup start!\n");

    /* Loop indefinitely */
    while(1)
    {
        /* Delay some times */
        Delay_us(50000);
        GPIO_togglePin(BOARD_LED1_PIN);
    }

}

这样就实现LED闪烁了。




关键词: NS800RT     GPIO     LED    

高工
2026-05-14 10:36:49     打赏
2楼

emath模块看起来不错,我之前也是看重这个和高速ad da,感觉可以拿来做信号分析用


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]