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

【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闪烁了。
我要赚赏金
