由于前面的COUNTER0和1 已经被占用了,现在调用COUNTER2来实现时间功能,但是调用后不工作,不知道哪里的问题,求大神帮忙解答一下


void RTC_Inst_user(void)
{
    /* Set WDT counter 2 to generate interrupt on match */
        CySysWdtWriteMode(CY_SYS_WDT_COUNTER2, CY_SYS_WDT_MODE_INT);
        CySysWdtWriteMatch(CY_SYS_WDT_COUNTER2, WDT_COUNT3_MATCH);
        CySysWdtWriteClearOnMatch(CY_SYS_WDT_COUNTER2, 1u);
        
        /* Enable WDT counters 2*/
        CySysWdtEnable(CY_SYS_WDT_COUNTER2_MASK);
        
        /* Lock WDT registers and try to disable WDT counters 2 */
        CySysWdtLock();
        CySysWdtDisable(CY_SYS_WDT_COUNTER2_MASK);
        CySysWdtUnlock();

    /* Start RTC component */
    RTC_Start();

    /* Set Date and Time */
    TIME_HR_MIN_SEC      = (TIME_HOUR << RTC_HOURS_OFFSET)  + (TIME_MIN << RTC_MINUTES_OFFSET) + TIME_SEC;
    DATE_MONTH_DAY_YEAR  = (DATE_MONTH << RTC_MONTH_OFFSET) + (DATE_DAY << RTC_DAY_OFFSET)     + DATE_YEAR;
    RTC_SetDateAndTime(TIME_HR_MIN_SEC,DATE_MONTH_DAY_YEAR);

    /* Set RTC time update period */
    RTC_SetPeriod(1u, TICK_EACH_1_HZ);

    RTC_Update();   //加速2s,减少复位重启引起的时间延迟
    RTC_Update();
}

    定时器2是比较特殊,它给计时器寄存器赋值不能使用这个API函数,这个API函数只适合用在定时器0和定时器1

    CySysWdtWriteMatch(CY_SYS_WDT_COUNTER2, WDT_COUNT3_MATCH);

    定时器2写计时器寄存器的API函数是以下这个API函数:

    /*******************************************************************************
        * Function Name: CySysWdtSetToggleBit
        ********************************************************************************
        *
        * Summary:
        *  Configures which bit in WDT counter 2 to monitor for a toggle. When that
        *  bit toggles, an interrupt is generated if the mode for counter 2 has
        *  enabled interrupts.
        *
        * Parameters:
        *  bit:
        *   Valid range [0-31].  Counter 2 bit to monitor for a toggle.
        *
        * Return:
        *   None.
        *
        * Side effects:
        *   WDT Counter 2 should be disabled. Otherwise this function call has no
        *   effect.
        *
        *   If the specified counter is enabled, call the CySysWdtDisable() function with
        *   the corresponding parameter to disable the specified counter and wait for it to
        *   stop. This may take up to 3 LFCLK cycles.
        *
        *******************************************************************************/
        void CySysWdtSetToggleBit(uint32 bits)

    定时的计算公式是:(2bits)/32768

      非常感谢,定时器工作了,但是不知道怎么了 时间不是太准,越跑越慢

        Wireless-Tech 非常感谢,定时器工作了,但是不知道怎么了 时间不是太准,越跑越慢

        这个你可以先只跑一个定时器2看看,慢慢排查问题

          这是什么蓝牙芯片?

            suozhang cypress的ble

              撰写回复...