/* Board Support Package (BSP) for the EK-TM4C123GXL board */ #include /* Standard integers. WG14/N843 C99 Standard */ #include "bsp.h" #include "miros.h" #include "qassert.h" #include "TM4C123GH6PM.h" /* the TM4C MCU Peripheral Access Layer (TI) */ /* on-board LEDs */ #define LED_RED (1U << 1) #define LED_BLUE (1U << 2) #define LED_GREEN (1U << 3) #define TEST_PIN (1U << 4) static uint32_t volatile l_tickCtr; void SysTick_Handler(void) { GPIOF_AHB->DATA_Bits[TEST_PIN] = TEST_PIN; OS_tick(); __disable_irq(); OS_sched(); __enable_irq(); GPIOF_AHB->DATA_Bits[TEST_PIN] = 0U; } void BSP_init(void) { SYSCTL->GPIOHBCTL |= (1U << 5); /* enable AHB for GPIOF */ SYSCTL->RCGCGPIO |= (1U << 5); /* enable Run Mode for GPIOF */ GPIOF_AHB->DIR |= (LED_RED | LED_BLUE | LED_GREEN | TEST_PIN); GPIOF_AHB->DEN |= (LED_RED | LED_BLUE | LED_GREEN | TEST_PIN); } void BSP_ledRedOn(void) { GPIOF_AHB->DATA_Bits[LED_RED] = LED_RED; } void BSP_ledRedOff(void) { GPIOF_AHB->DATA_Bits[LED_RED] = 0U; } void BSP_ledBlueOn(void) { GPIOF_AHB->DATA_Bits[LED_BLUE] = LED_BLUE; } void BSP_ledBlueOff(void) { GPIOF_AHB->DATA_Bits[LED_BLUE] = 0U; } void BSP_ledGreenOn(void) { GPIOF_AHB->DATA_Bits[LED_GREEN] = LED_GREEN; } void BSP_ledGreenOff(void) { GPIOF_AHB->DATA_Bits[LED_GREEN] = 0U; } void OS_onStartup(void) { SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); /* set the SysTick interrupt priority (highest) */ NVIC_SetPriority(SysTick_IRQn, 0U); } void OS_onIdle(void) { GPIOF_AHB->DATA_Bits[LED_RED] = LED_RED; GPIOF_AHB->DATA_Bits[LED_RED] = 0U; //__WFI(); /* stop the CPU and Wait for Interrupt */ } //............................................................................ _Noreturn void Q_onAssert(char const * const module, int const id) { (void)module; // unused parameter (void)id; // unused parameter #ifndef NDEBUG // light up all LEDs GPIOF_AHB->DATA_Bits[LED_GREEN | LED_RED | LED_BLUE] = 0xFFU; // for debugging, hang on in an endless loop... for (;;) { } #endif NVIC_SystemReset(); } //............................................................................ _Noreturn void assert_failed(char const * const module, int const id); _Noreturn void assert_failed(char const * const module, int const id) { Q_onAssert(module, id); }