本帖为TI MSPM0 MCU 焕新大作战活动中的课程1任务1的完成贴。
根据用户收手册,开发板上和LED有关的电路为:
通过短跳线,LED分别连接到PA13,PA26,PA27三个GPIO口。将三个GPIO口生命为输出模式驱动LED,使用DL_GPIO_initDigitalOutput函数,它的声明方式为:
__STATIC_INLINE void DL_GPIO_initDigitalOutput(uint32_t pincmIndex);
是通过控制对应的寄存器位,控制GPIO口输入口还是输出口,代码很好理解,和Arduino中对输入输出的设置方式很像,应该不难理解。
在例程“gpio_toggle_output_LP_MSPM0L1306_nortos_ticlang”,这三个LED刚好是被程序用到了的,所以,课程1就在这个例程上进行改造。很简单。
依旧使用TI的CCS IDE作为开发工具,导入例程。
在文件“ti_msp_dl_config.h”中有如下定义:
/* Defines for USER_LED_1: GPIOA.27 with pinCMx 28 on package pin 31 */ #define GPIO_LEDS_USER_LED_1_PIN (DL_GPIO_PIN_27) #define GPIO_LEDS_USER_LED_1_IOMUX (IOMUX_PINCM28) /* Defines for USER_LED_2: GPIOA.26 with pinCMx 27 on package pin 30 */ #define GPIO_LEDS_USER_LED_2_PIN (DL_GPIO_PIN_26) #define GPIO_LEDS_USER_LED_2_IOMUX (IOMUX_PINCM27) /* Defines for USER_LED_3: GPIOA.13 with pinCMx 14 on package pin 17 */ #define GPIO_LEDS_USER_LED_3_PIN (DL_GPIO_PIN_13) #define GPIO_LEDS_USER_LED_3_IOMUX (IOMUX_PINCM14) /* Defines for USER_TEST: GPIOA.1 with pinCMx 2 on package pin 2 */ #define GPIO_LEDS_USER_TEST_PIN (DL_GPIO_PIN_1) #define GPIO_LEDS_USER_TEST_IOMUX (IOMUX_PINCM2)
与电路图是一致的。
程序做了简单处理,代码如下:
#include "ti_msp_dl_config.h" /* This results in approximately 0.5s of delay assuming 32MHz CPU_CLK */ #define DELAY (16000000) int main(void) { /* Power on GPIO, initialize pins as digital outputs */ SYSCFG_DL_init(); /* Default: LED1 and LED3 ON, LED2 OFF */ DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_2_PIN); DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_LED_3_PIN | GPIO_LEDS_USER_TEST_PIN); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_LED_3_PIN | GPIO_LEDS_USER_TEST_PIN); while (1) { // delay_cycles(DELAY); // DL_GPIO_togglePins(GPIO_LEDS_PORT, // GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_LED_2_PIN | // GPIO_LEDS_USER_LED_3_PIN | GPIO_LEDS_USER_TEST_PIN); // 点亮红色LED delay_cycles(DELAY); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN); DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_2_PIN); // 灭掉红色,点亮绿色 delay_cycles(DELAY); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_2_PIN); DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_3_PIN); // 灭掉绿色,点亮蓝色 delay_cycles(DELAY); DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_3_PIN); DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN); } }
就是间隔一定周期(0.5秒),依次点亮和灭掉红色、绿色、蓝色的LED。
运行效果如下: