1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**************************************************************************//**
* @file     pan_hal.c
* @version  V0.0.0
* $Revision: 1 $
* $Date:    23/09/10 $
* @brief    Panchip HAL common source file.
* @note
* Copyright (C) 2023-2024 Panchip Technology Corp. All rights reserved.
*****************************************************************************/
#include "pan_hal.h"
 
void HAL_DelayMs(uint32_t ms)
{
    uint32_t timeout_tick = HAL_TimeConvMsToTick(ms);
    uint32_t uptime_ref = HAL_TimeGetCurrTick();
 
    while (HAL_TimeGetCurrTick() - uptime_ref < timeout_tick)
    {
        // Busy wait
    }
}
 
__WEAK uint32_t HAL_TimeConvMsToTick(uint32_t ms)
{
    uint64_t timeout_tick = (uint64_t)ms * (CLK->CLK_TOP_CTRL_3V & CLK_TOPCTL_32K_CLK_SEL_Msk_3v ? 32768 : 32000) / 1000ull;
 
    if (timeout_tick > UINT32_MAX)
    {
        timeout_tick = HAL_TIME_FOREVER;
    }
 
    return (uint32_t)timeout_tick;
}
 
__WEAK uint32_t HAL_TimeGetCurrTick(void)
{
#if 0
    return (*(volatile uint32_t *)(0x50020014)); // current 32K counter in llctlr
#else
    return LP_GetSlptmrCurrCount(ANA);
#endif
}
 
#if CONFIG_IO_TIMING_TRACK
void HAL_IoTimingTrackInit(void)
{
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_DMA_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_GPIO0_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_GPIO1_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_GPIO2_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_GPIO3_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_I2C_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_SPI0_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_SPI1_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_TMR0_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_TMR1_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_TMR2_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_UART0_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_UART1_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_WDT_IRQ, 0);
    PAN_IO_TIMING_TRACK_INIT_PIN(CONFIG_TRACK_PIN_WWDT_IRQ, 0);
}
#endif // CONFIG_IO_TIMING_TRACK
 
void HAL_DriverInit(void)
{
    // Init 32K timer counter
    ANA->LP_FL_CTRL_3V |= ANAC_FL_SLEEP_CNT_EN_Msk; // slptmr counter en
#if 0
    CLK_AHBPeriphClockCmd(CLK_AHBPeriph_BLE_32M | CLK_AHBPeriph_BLE_32K, ENABLE);
    (*(volatile uint32_t *)0x5002000C) |= BIT1; // current 32K counter en in llctlr
#endif
}