214 lines
4.9 KiB
C++
214 lines
4.9 KiB
C++
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
#include "analog.h"
|
|
#include "cmsis.h"
|
|
#include "hal_bootmode.h"
|
|
#include "hal_cmu.h"
|
|
#include "hal_dma.h"
|
|
#include "hal_iomux.h"
|
|
#include "hal_norflash.h"
|
|
#include "hal_sleep.h"
|
|
#include "hal_sysfreq.h"
|
|
#include "hal_timer.h"
|
|
#include "hal_trace.h"
|
|
#include "hwtimer_list.h"
|
|
#include "main_entry.h"
|
|
#include "pmu.h"
|
|
|
|
#ifdef RTOS
|
|
#include "cmsis_os.h"
|
|
#ifdef KERNEL_RTX
|
|
#include "rt_Time.h"
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef HWTEST
|
|
#include "hwtest.h"
|
|
#ifdef VD_TEST
|
|
#include "voice_detector.h"
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
#define EXTERN_C extern "C"
|
|
#else
|
|
#define EXTERN_C extern
|
|
#endif
|
|
|
|
#define TIMER_IRQ_PERIOD_MS 2500
|
|
#define DELAY_PERIOD_MS 4000
|
|
|
|
#ifndef FLASH_FILL
|
|
#define FLASH_FILL 1
|
|
#endif
|
|
|
|
#ifdef KERNEL_RTX
|
|
#define OS_TIME_STR "[%2u/%u]"
|
|
#define OS_CUR_TIME , SysTick->VAL, os_time
|
|
#else
|
|
#define OS_TIME_STR
|
|
#define OS_CUR_TIME
|
|
#endif
|
|
|
|
#if defined(MS_TIME)
|
|
#define TIME_STR "[%u]" OS_TIME_STR
|
|
#define CUR_TIME TICKS_TO_MS(hal_sys_timer_get()) OS_CUR_TIME
|
|
#elif defined(RAW_TIME)
|
|
#define TIME_STR "[0x%X]" OS_TIME_STR
|
|
#define CUR_TIME hal_sys_timer_get() OS_CUR_TIME
|
|
#else
|
|
#define TIME_STR "[%u/0x%X]" OS_TIME_STR
|
|
#define CUR_TIME \
|
|
TICKS_TO_MS(hal_sys_timer_get()), hal_sys_timer_get() OS_CUR_TIME
|
|
#endif
|
|
|
|
#ifndef NO_TIMER
|
|
static HWTIMER_ID hw_timer = NULL;
|
|
|
|
static void timer_handler(void *param) {
|
|
TRACE(1, TIME_STR " Timer handler: %u", CUR_TIME, (uint32_t)param);
|
|
hwtimer_start(hw_timer, MS_TO_TICKS(TIMER_IRQ_PERIOD_MS));
|
|
TRACE(1, TIME_STR " Start timer %u ms", CUR_TIME, TIMER_IRQ_PERIOD_MS);
|
|
}
|
|
#endif
|
|
|
|
const static unsigned char bytes[FLASH_FILL] = {
|
|
0x1,
|
|
};
|
|
|
|
// GDB can set a breakpoint on the main function only if it is
|
|
// declared as below, when linking with STD libraries.
|
|
|
|
int MAIN_ENTRY(void) {
|
|
int POSSIBLY_UNUSED ret;
|
|
|
|
hwtimer_init();
|
|
hal_audma_open();
|
|
hal_gpdma_open();
|
|
#ifdef DEBUG
|
|
#if (DEBUG_PORT == 3)
|
|
hal_iomux_set_analog_i2c();
|
|
hal_iomux_set_uart2();
|
|
hal_trace_open(HAL_TRACE_TRANSPORT_UART2);
|
|
#elif (DEBUG_PORT == 2)
|
|
hal_iomux_set_analog_i2c();
|
|
hal_iomux_set_uart1();
|
|
hal_trace_open(HAL_TRACE_TRANSPORT_UART1);
|
|
#else
|
|
hal_iomux_set_uart0();
|
|
hal_trace_open(HAL_TRACE_TRANSPORT_UART0);
|
|
#endif
|
|
#endif
|
|
|
|
#if !defined(SIMU) && !defined(FPGA)
|
|
uint8_t flash_id[HAL_NORFLASH_DEVICE_ID_LEN];
|
|
hal_norflash_get_id(HAL_NORFLASH_ID_0, flash_id, ARRAY_SIZE(flash_id));
|
|
TRACE(3, "FLASH_ID: %02X-%02X-%02X", flash_id[0], flash_id[1], flash_id[2]);
|
|
#endif
|
|
|
|
TRACE(1, TIME_STR " main started: filled@0x%08x", CUR_TIME, (uint32_t)bytes);
|
|
|
|
#ifndef NO_PMU
|
|
ret = pmu_open();
|
|
ASSERT(ret == 0, "Failed to open pmu");
|
|
#endif
|
|
analog_open();
|
|
|
|
hal_cmu_simu_pass();
|
|
|
|
#ifdef SIMU
|
|
hal_sw_bootmode_set(HAL_SW_BOOTMODE_FLASH_BOOT);
|
|
hal_cmu_sys_reboot();
|
|
#else
|
|
#ifdef SLEEP_TEST
|
|
hal_sleep_start_stats(10000, 10000);
|
|
hal_sysfreq_req(HAL_SYSFREQ_USER_INIT, HAL_CMU_FREQ_32K);
|
|
#else
|
|
hal_sysfreq_req(HAL_SYSFREQ_USER_INIT, HAL_CMU_FREQ_104M);
|
|
#endif
|
|
TRACE(1, "CPU freq: %u", hal_sys_timer_calc_cpu_freq(5, 0));
|
|
#endif
|
|
|
|
#ifdef HWTEST
|
|
|
|
#ifdef USB_SERIAL_TEST
|
|
pmu_usb_config(PMU_USB_CONFIG_TYPE_DEVICE);
|
|
usb_serial_test();
|
|
#endif
|
|
#ifdef USB_SERIAL_DIRECT_XFER_TEST
|
|
pmu_usb_config(PMU_USB_CONFIG_TYPE_DEVICE);
|
|
usb_serial_direct_xfer_test();
|
|
#endif
|
|
#ifdef USB_AUDIO_TEST
|
|
pmu_usb_config(PMU_USB_CONFIG_TYPE_DEVICE);
|
|
usb_audio_test();
|
|
#endif
|
|
#ifdef I2C_TEST
|
|
i2c_test();
|
|
#endif
|
|
#ifdef AF_TEST
|
|
af_test();
|
|
#endif
|
|
#ifdef VD_TEST
|
|
voice_detector_test();
|
|
#endif
|
|
#ifdef CP_TEST
|
|
cp_test();
|
|
#endif
|
|
#ifdef SEC_ENG_TEST
|
|
sec_eng_test();
|
|
#endif
|
|
#ifdef TDM_TEST
|
|
tdm_test();
|
|
#endif
|
|
#ifdef A7_DSP_TEST
|
|
a7_dsp_test();
|
|
#endif
|
|
#ifdef TRANSQ_TEST
|
|
transq_test();
|
|
#endif
|
|
#ifdef PSRAM_TEST
|
|
psram_test();
|
|
#endif
|
|
#ifdef PSRAMUHS_TEST
|
|
psramuhs_test();
|
|
#endif
|
|
|
|
SAFE_PROGRAM_STOP();
|
|
|
|
#endif // HWTEST
|
|
|
|
#ifdef NO_TIMER
|
|
TRACE(0, TIME_STR " Enter sleep ...", CUR_TIME);
|
|
#else
|
|
hw_timer = hwtimer_alloc(timer_handler, 0);
|
|
hwtimer_start(hw_timer, MS_TO_TICKS(TIMER_IRQ_PERIOD_MS));
|
|
TRACE(1, TIME_STR " Start timer %u ms", CUR_TIME, TIMER_IRQ_PERIOD_MS);
|
|
#endif
|
|
|
|
while (1) {
|
|
#if defined(SLEEP_TEST) && !defined(RTOS)
|
|
hal_sleep_enter_sleep();
|
|
#else
|
|
osDelay(DELAY_PERIOD_MS);
|
|
TRACE(1, TIME_STR " Delay %u ms done", CUR_TIME, DELAY_PERIOD_MS);
|
|
#endif
|
|
}
|
|
|
|
SAFE_PROGRAM_STOP();
|
|
return 0;
|
|
}
|