CC1352P: 如何在应用中校准RTC

Part Number: CC1352P

使用PowerCC26XX_injectCalibration校准rtc,校准前后AONRTCSubSecIncrGet()获取到的值没有变化,怎么才能在应用中校准RTC

 

static void measureRtcAccuracy(const char *tag)
{
    uint32_t start, stop, delta_actual;
    uint32_t subsec_incr;
    float freq, ppm;
    char msgBuf[160];

    subsec_incr = AONRTCSubSecIncrGet();
    sprintf(msgBuf, "[%s] subsec_incr=%lu, \r\n",
            tag, (unsigned long)subsec_incr);
    uartPrint(msgBuf);
}

void *mainThread(void *arg0)
{
    UART2_Params uartParams;

    GPIO_init();
    AONRTCEnable();

    UART2_Params_init(&uartParams);
    uartParams.baudRate = 115200;
    uartParams.writeMode = UART2_Mode_BLOCKING;
    uartHandle = UART2_open(CONFIG_UART2_0, &uartParams);
    if (uartHandle == NULL) {
        while (1);
    }
    Power_setDependency(PowerCC26XX_XOSC_HF);
    uint32_t timeout = 5000;
    while (!PowerCC26XX_isStableXOSC_HF() && timeout--) {
        ClockP_usleep(1000);
    }
    if (timeout == 0) {
        uartPrint("XOSC_HF not stable!\r\n");
    } else {
        uartPrint("XOSC_HF stable.\r\n");
    }

    while (1) {
        measureRtcAccuracy("before");
        bool calStarted = PowerCC26XX_injectCalibration();
        char infoBuf[64];
        sprintf(infoBuf, "injectCalibration: %s\r\n", calStarted ? "started" : "failed");
        uartPrint(infoBuf);
        ClockP_usleep(CALIBRATION_WAIT_US);
        measureRtcAccuracy("after");
        uartPrint("-------------------\r\n");
        ClockP_usleep(500000);
    }

    return NULL;
}