void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue ) { unsigned long ulLEDs; /* Suspend all other tasks, in order to make sure no other tasks excecutes this code at the same time. */ vTaskSuspendAll(); { ulLEDs = DVK_getLEDs(); if( xValue == pdTRUE ) { /* Turn the LED on if xValue is true. */ ulLEDs = ulLEDs | ( 1 << uxLED ); } else { /* Turn the LED off if xValue is not true. */ ulLEDs &= ~( 1 << uxLED ); } DVK_setLEDs( ulLEDs ); } xTaskResumeAll(); }
rt_uint8_t rt_hw_led_state(rt_uint8_t num) { RT_ASSERT(num < LEDS_MAX_NUMBER); #if defined(EFM32_G8XX_STK) return (rt_uint8_t)GPIO_PinInGet(leds_list[num][0], leds_list[num][1]); #elif (defined(EFM32_GXXX_DK) || defined(EFM32GG_DK3750)) return ((DVK_getLEDs() & (rt_uint16_t)(1 << num)) >> num); #endif }
void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) { unsigned long ulLEDs; vTaskSuspendAll(); { ulLEDs = DVK_getLEDs(); ulLEDs = ulLEDs ^ ( 1 << uxLED ); DVK_setLEDs( ulLEDs ); } xTaskResumeAll(); }
/***************************************************************************//** * @brief * Turn off a LED * * @details * * @note * * @param[in] num * LED number * ******************************************************************************/ void rt_hw_led_off(rt_uint8_t num) { RT_ASSERT(num < LEDS_MAX_NUMBER); #if defined(EFM32_G8XX_STK) GPIO_PinOutClear(leds_list[num][0], leds_list[num][1]); #elif (defined(EFM32_GXXX_DK) || defined(EFM32GG_DK3750)) { rt_uint16_t leds; leds = DVK_getLEDs() & ~(rt_uint16_t)(1 << num); DVK_setLEDs(leds); } #endif }
void list_leds(void) { rt_uint8_t i; rt_kprintf(" led \t port \t pin \t state\n"); rt_kprintf(" -----\t -----\t -----\t -----\n"); for (i = 0; i < LEDS_MAX_NUMBER; i++) { #if defined(EFM32_G8XX_STK) rt_kprintf(" %d \t %x \t %x \t %x \n", i, leds_list[i][0], leds_list[i][1], rt_hw_led_state(i)); #elif (defined(EFM32_GXXX_DK) || defined(EFM32GG_DK3750)) rt_uint16_t leds; leds = DVK_getLEDs(); rt_kprintf(" %d \t FPGA \t FPGA \t %x \n", i, (leds & (1 << i))? 1 : 0); #endif } }