[EtherCAT]ESC的RUN_LED和ERR_LED使用GPIO引脚
一、功能说明
承接上文《[EtherCAT]ESC的引脚功能说明》,ESC的RUN_LED和ERR_LED用于指示ESC的状态,推荐使用ESC的ESC.CTR[x]引脚通过IO_CFG配置出LED_RUN和LED_ERR功能去控制LED,但某些情况下引脚分配时无法分配ESC.CTR[x]功能,也可以使用GPIO功能去实现。
二、用GPIO实现ESC的RUN_LED和ERR_LED功能
2.1 SSC Tool中属性设置
根据ESC是否支持硬件控制RUN_LED和ERR_LED, SSC Tool工具用属性UC_SET_ECAT_LED
和ESC_SUPPORT_ECAT_LED
进行描述。
默认设置是ESC_SUPPORT_ECAT_LED
为1且UC_SET_ECAT_LED
为0,表示ESC支持控制RUN_LED和ERR_LED, 也就是由ESC的对应硬件引脚直接控制LED的状态。
在需要使用MCU的GPIO引脚控制LED时, 需要将属性设置为ESC_SUPPORT_ECAT_LED
为0且UC_SET_ECAT_LED
为1,此时生成SSC的协议栈代码会调用硬件接口void HW_SetLed(UINT8 RunLed,UINT8 ErrLed)
控制LED的状态
2.2 HW_SetLed(UINT8 RunLed,UINT8 ErrLed)接口实现
当由MCU控制LED状态时,SSC协议栈会调用HW_SetLed(UINT8 RunLed,UINT8 ErrLed)接口去实现,
该接口定义在hpm_ecat_hw.cz中, 需要用户根据实际使用引脚使用GPIO外设实现,例如:
#include "hpm_gpio_drv.h"
void HW_SetLed(BOOL RunLed, BOOL ErrLed) {
bool run_led = (RunLed ? BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
bool err_led = (ErrLed ? BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 3, run_led);
gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 2, err_led);
}
2.3 引脚配置修改
对于使用的GPIO引脚,需要进行初始化配置
HPM_IOC->PAD[IOC_PAD_PE02].FUNC_CTL = IOC_PE02_FUNC_CTL_GPIO_E_02; /* LED_ERROR function */
HPM_IOC->PAD[IOC_PAD_PE03].FUNC_CTL = IOC_PE03_FUNC_CTL_GPIO_E_03; /* LED_RUN function */
gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOE, 2, 0);
gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOE, 3, 0);
另外SDK中原本关于ESC的RUN_LED和ERR_LED的引脚定义和配置应当注释掉。