EFM32: Add logic to initialize and use ITM system
This commit is contained in:
parent
d1472cbf2a
commit
9df5ba14f2
@ -86,6 +86,10 @@ CMN_CSRCS += up_copyarmstate.c
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARMV7M_ITMSYSLOG),y)
|
||||||
|
CMN_CSRCS += arm_itm_syslog.c
|
||||||
|
endif
|
||||||
|
|
||||||
CHIP_ASRCS =
|
CHIP_ASRCS =
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARMV7M_CMNVECTOR),y)
|
ifeq ($(CONFIG_ARMV7M_CMNVECTOR),y)
|
||||||
|
@ -48,9 +48,11 @@
|
|||||||
#include "up_arch.h"
|
#include "up_arch.h"
|
||||||
|
|
||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
|
#include "itm_syslog.h"
|
||||||
#include "efm32_gpio.h"
|
#include "efm32_gpio.h"
|
||||||
#include "chip/efm32_msc.h"
|
#include "chip/efm32_msc.h"
|
||||||
#include "chip/efm32_cmu.h"
|
#include "chip/efm32_cmu.h"
|
||||||
|
#include "chip/efm32_gpio.h"
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
@ -658,7 +660,7 @@ static inline uint32_t efm32_lfaclk_config(uint32_t lfaclksel, bool ulfrco,
|
|||||||
*
|
*
|
||||||
* LFBCLK is the selected clock for the Low Energy B Peripherals. There
|
* LFBCLK is the selected clock for the Low Energy B Peripherals. There
|
||||||
* are four selectable sources for LFBCLK: LFRCO, LFXO, HFCORECLK/2 and
|
* are four selectable sources for LFBCLK: LFRCO, LFXO, HFCORECLK/2 and
|
||||||
* ULFRCO. In addition, the LFBCLK can be disabled. From reset, the LFBCLK
|
* ULFRCO. In addition, the LFBCLK can be disabled. From reset, the LFBCLK
|
||||||
* source is set to LFRCO. However, note that the LFRCO is disabled from
|
* source is set to LFRCO. However, note that the LFRCO is disabled from
|
||||||
* reset. The selection is configured using the LFB field in CMU_LFCLKSEL.
|
* reset. The selection is configured using the LFB field in CMU_LFCLKSEL.
|
||||||
* The HFCORECLK/2 setting allows the Low Energy B Peripherals to be used
|
* The HFCORECLK/2 setting allows the Low Energy B Peripherals to be used
|
||||||
@ -822,6 +824,48 @@ static inline void efm32_gpioclock(void)
|
|||||||
putreg32(regval, EFM32_CMU_HFPERCLKEN0);
|
putreg32(regval, EFM32_CMU_HFPERCLKEN0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: efm32_itm_syslog
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Enable Serial wire output pin, configure debug clocking, and enable
|
||||||
|
* ITM syslog support.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_SYSLOG) || defined(CONFIG_ARMV7M_ITMSYSLOG)
|
||||||
|
static inline void efm32_itm_syslog(void)
|
||||||
|
{
|
||||||
|
int regval;
|
||||||
|
|
||||||
|
/* Enable Serial wire output pin
|
||||||
|
*
|
||||||
|
* Set location and enable output on the pin. All pin configuration
|
||||||
|
* information must be provided in the board.h header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
regval = getreg32(EFM32_GPIO_ROUTE);
|
||||||
|
regval &= _GPIO_ROUTE_SWLOCATION_MASK;
|
||||||
|
regval |= GPIO_ROUTE_SWOPEN;
|
||||||
|
regval |= ((uint32_t)BOARD_SWOPORT_LOCATION << _GPIO_ROUTE_SWLOCATION_SHIFT);
|
||||||
|
putreg32(regval, EFM32_GPIO_ROUTE);
|
||||||
|
|
||||||
|
/* Enable output on pin */
|
||||||
|
|
||||||
|
efm32_configgpio(BOARD_GPIO_SWOPORT);
|
||||||
|
|
||||||
|
/* Enable debug clock AUXHFRCO */
|
||||||
|
|
||||||
|
efm32_enable_auxhfrco();
|
||||||
|
|
||||||
|
/* Then perform ARMv7-M ITM SYSLOG initialization */
|
||||||
|
|
||||||
|
itm_syslog_initialize();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
# define efm32_itm_syslog()
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -863,4 +907,10 @@ void efm32_clockconfig(void)
|
|||||||
/* Enable clocking of the GPIO ports */
|
/* Enable clocking of the GPIO ports */
|
||||||
|
|
||||||
efm32_gpioclock();
|
efm32_gpioclock();
|
||||||
|
|
||||||
|
/* Enable Serial wire output pin, configure debug clocking, and enable ITM
|
||||||
|
* syslog support.
|
||||||
|
*/
|
||||||
|
|
||||||
|
efm32_itm_syslog();
|
||||||
}
|
}
|
||||||
|
@ -44,11 +44,14 @@
|
|||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
#include <nuttx/init.h>
|
#include <nuttx/init.h>
|
||||||
|
#include <nuttx/syslog/syslog.h>
|
||||||
|
|
||||||
#include <arch/board/board.h>
|
#include <arch/board/board.h>
|
||||||
#include <arch/efm32/chip.h>
|
#include <arch/efm32/chip.h>
|
||||||
|
|
||||||
#include "up_arch.h"
|
#include "up_arch.h"
|
||||||
#include "up_internal.h"
|
#include "up_internal.h"
|
||||||
|
#include "efm32_config.h"
|
||||||
#include "efm32_lowputc.h"
|
#include "efm32_lowputc.h"
|
||||||
#include "efm32_clockconfig.h"
|
#include "efm32_clockconfig.h"
|
||||||
#include "efm32_start.h"
|
#include "efm32_start.h"
|
||||||
@ -75,7 +78,13 @@ static void go_os_start(void *pv, unsigned int nbytes)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG
|
#ifdef CONFIG_DEBUG
|
||||||
# define showprogress(c) up_lowputc(c)
|
# if defined(CONFIG_ARMV7M_ITMSYSLOG)
|
||||||
|
# define showprogress(c) (void)syslog_putc(c)
|
||||||
|
# elif defined(HAVE_UART_CONSOLE) || defined(HAVE_LEUART_CONSOLE)
|
||||||
|
# define showprogress(c) up_lowputc(c)
|
||||||
|
# else
|
||||||
|
# define showprogress(c)
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# define showprogress(c)
|
# define showprogress(c)
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user