| /***************************************************************************** |
| * © 2015 Microchip Technology Inc. and its subsidiaries. |
| * You may use this software and any derivatives exclusively with |
| * Microchip products. |
| * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". |
| * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, |
| * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, |
| * AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP |
| * PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION. |
| * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, |
| * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND |
| * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS |
| * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. |
| * TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL |
| * CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF |
| * FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. |
| * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE |
| * OF THESE TERMS. |
| ****************************************************************************** |
| |
| Version Control Information (Perforce) |
| ****************************************************************************** |
| $Revision: #1 $ |
| $DateTime: 2016/04/08 10:18:28 $ |
| $Author: pramans $ |
| Last Change: Updated with unit testing feedbacks |
| ******************************************************************************/ |
| /** @file btimer.h |
| * \brief Basic Timer Peripheral Header file |
| * \author jvasanth |
| * |
| * This file is the header file for Basic Timer Peripheral |
| ******************************************************************************/ |
| |
| /** @defgroup Basic_Timer |
| * @{ |
| */ |
| |
| #ifndef _BTIMER_H |
| #define _BTIMER_H |
| |
| /******************************************************************************/ |
| /** Logical Timer ID for APIs. |
| * This is the timer IDs passed to Basic Timer API function calls |
| *******************************************************************************/ |
| enum _PID_BTIMER_ |
| { |
| PID_BTIMER_0, |
| PID_BTIMER_1, |
| PID_BTIMER_2, |
| PID_BTIMER_3, |
| PID_BTIMER_4, |
| PID_BTIMER_5, |
| PID_BTIMER_MAX |
| }; |
| |
| /* ---------------------------------------------------------------------- */ |
| /* Logical flags for Timer Control */ |
| /* ---------------------------------------------------------------------- */ |
| //This is for tmr_cntl parameter in btimer_init function |
| #define BTIMER_AUTO_RESTART (0x08u) |
| #define BTIMER_ONE_SHOT (0u) |
| #define BTIMER_COUNT_UP (0x04u) |
| #define BTIMER_COUNT_DOWN (0u) |
| #define BTIMER_INT_EN (0x01u) |
| #define BTIMER_NO_INT (0u) |
| /* ---------------------------------------------------------------------- */ |
| |
| |
| //Timer Block Hardware Bits and Masks |
| #define BTIMER_CNTL_HALT (0x80UL) |
| #define BTIMER_CNTL_RELOAD (0x40UL) |
| #define BTIMER_CNTL_START (0x20UL) |
| #define BTIMER_CNTL_SOFT_RESET (0x10UL) |
| #define BTIMER_CNTL_AUTO_RESTART (0x08UL) |
| #define BTIMER_CNTL_COUNT_UP (0x04UL) |
| #define BTIMER_CNTL_ENABLE (0x01UL) |
| |
| #define BTIMER_CNTL_HALT_BIT (7U) |
| #define BTIMER_CNTL_RELOAD_BIT (6U) |
| #define BTIMER_CNTL_START_BIT (5U) |
| #define BTIMER_CNTRL_SOFT_RESET_BIT (4U) |
| #define BTIMER_CNTL_AUTO_RESTART_BIT (3U) |
| #define BTIMER_CNTL_COUNT_DIR_BIT (2U) |
| #define BTIMER_CNTL_ENABLE_BIT (0U) |
| |
| #define BTIMER_GIRQ MEC_GIRQ23_ID |
| #define BTIMER_MAX_INSTANCE PID_BTIMER_MAX |
| |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Basic Timer Intitialization function */ |
| /* ---------------------------------------------------------------------- */ |
| |
| /** Initialize specified timer |
| * @param btimer_id Basic Timer ID |
| * @param tmr_cntl Logical flags for Timer Control |
| * @param initial_count Initial Count |
| * @param preload_count Preload Count |
| * @note Performs a soft reset of the timer before configuration |
| */ |
| void btimer_init(uint8_t btimer_id, |
| uint16_t tmr_cntl, |
| uint16_t prescaler, |
| uint32_t initial_count, |
| uint32_t preload_count); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Functions to program and read the Basic Timer Counter */ |
| /* ---------------------------------------------------------------------- */ |
| /** Program timer's counter register. |
| * @param btimer_id Basic Timer ID |
| * @param count new counter value |
| * @note Timer hardware may implement a 16-bit or 32-bit |
| * hardware counter. If the timer is 16-bit only the lower |
| * 16-bits of the count paramter are used. |
| */ |
| void btimer_count_set(uint8_t btimer_id, uint32_t count); |
| |
| /** Return current value of timer's count register. |
| * @param btimer_id Basic Timer ID. |
| * @return uint32_t timer count may be 32 or 16 bits depending |
| * upon the hardware. Timers 0-3 are 16-bit |
| * and Timers 4-5 are 32-bit. |
| */ |
| uint32_t btimer_count_get(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Function to reload counter from Preload Register */ |
| /* ---------------------------------------------------------------------- */ |
| /** Force timer to reload counter from preload |
| * register. |
| * @param btimer_id Basic Timer ID. |
| * @note Hardware will only reload counter if timer is running. |
| */ |
| void btimer_reload(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Functions for stopping and starting the basic Timer */ |
| /* ---------------------------------------------------------------------- */ |
| /** Start timer counting. |
| * @param btimer_id Basic Timer ID. |
| */ |
| void btimer_start(uint8_t btimer_id); |
| |
| /** Stop timer. |
| * @param btimer_id Basic Timer ID. |
| * @note When a stopped timer is started again it will reload |
| * the count register from preload value. |
| */ |
| void btimer_stop(uint8_t btimer_id); |
| |
| /** Return state of timer's START bit. |
| * @param btimer_id Basic Timer ID. |
| * @return uint8_t 0(timer not started), 1 (timer started) |
| */ |
| uint8_t btimer_is_started(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Function to perform basic timer soft reset */ |
| /* ---------------------------------------------------------------------- */ |
| /** Peform soft reset of specified timer. |
| * @param btimer_id Basic Timer ID |
| * @note Soft reset set all registers to POR values. |
| * Spins 256 times waiting on hardware to clear reset bit. |
| */ |
| void btimer_reset(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Functions to halt/unhalt the timer counting */ |
| /* ---------------------------------------------------------------------- */ |
| /** Halt timer counting with no reload on unhalt. |
| * @param btimer_id Basic Timer ID. |
| * @note A halted timer will not reload the count register when |
| * unhalted, it will continue counting from the current |
| * count value. |
| */ |
| void btimer_halt(uint8_t btimer_id); |
| |
| /** Unhalt timer counting. |
| * @param btimer_id Basic Timer ID. |
| */ |
| void btimer_unhalt(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Functions for Basic Timer interrupt */ |
| /* ---------------------------------------------------------------------- */ |
| /** Enable specified timer's interrupt from the block. |
| * @param btimer_id Basic Timer ID. |
| * @param ien Non-zero enable interrupt in timer block, 0 |
| * disable. |
| */ |
| void btimer_interrupt_enable(uint8_t btimer_id, uint8_t ien); |
| |
| /** Read Timer interrupt status and clear if set |
| * @param btimer_id Basic Timer ID. |
| * @return uint8_t 1 (Timer interrupt status set) else 0. |
| * @note If timer interrupt status is set then clear it before |
| * returning. |
| */ |
| uint8_t btimer_interrupt_status_get_clr(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Functions for Basic Timer GIRQ */ |
| /* ---------------------------------------------------------------------- */ |
| /** Enables GIRQ enable bit for the timer |
| * @param btimer_id Basic Timer ID. |
| */ |
| void btimer_girq_enable_set(uint8_t btimer_id); |
| |
| /** Clears GIRQ enable bit for the timer |
| * @param btimer_id Basic Timer ID. |
| */ |
| void btimer_girq_enable_clr(uint8_t btimer_id); |
| |
| /** Returns GIRQ source bit for the timer |
| * @param btimer_id Basic Timer ID. |
| * @return uint8_t 0(src bit not set), Non-zero (src bit set) |
| */ |
| uint8_t btimer_girq_src_get(uint8_t btimer_id); |
| |
| /** Clears GIRQ source bit for the timer |
| * @param btimer_id Basic Timer ID. |
| */ |
| void btimer_girq_src_clr(uint8_t btimer_id); |
| |
| /** Returns GIRQ result bit for the timer |
| * @param btimer_id Basic Timer ID. |
| * @return uint8_t 0(result bit not set), Non-zero (result bit set) |
| */ |
| uint8_t btimer_girq_result_get(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* API - Functions for Basic Timer Sleep */ |
| /* ---------------------------------------------------------------------- */ |
| /** Enable/Disable clock gating on idle of a timer |
| * @param btimer_id Basic Timer ID. |
| * @param sleep_en 1 = Sleep enable, 0 = Sleep disable |
| */ |
| void btimer_sleep(uint8_t btimer_id, uint8_t sleep_en); |
| |
| /** Returns clk required status for the timer block |
| * @param btimer_id Basic Timer ID. |
| * @return Non-zero if clk required, else 0 |
| */ |
| uint32_t btimer_clk_reqd_sts_get(uint8_t btimer_id); |
| |
| /** Enable/Disable reset on sleep for the timer block |
| * @param btimer_id Basic Timer ID. |
| * @param reset_en 1 to enable, 0 to disable |
| */ |
| void btimer_reset_on_sleep(uint8_t btimer_id, uint8_t reset_en); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* Peripheral Function - Functions to set and read Timer Counter Register */ |
| /* ---------------------------------------------------------------------- */ |
| /** Sets timer counter |
| * @param btimer_id Basic Timer ID |
| * @param count - 32-bit counter |
| */ |
| void p_btimer_count_set(uint8_t btimer_id, uint32_t count); |
| |
| /** Read the timer counter |
| * @param btimer_id Basic Timer ID |
| * @return count - 32-bit counter |
| */ |
| uint32_t p_btimer_count_get(uint8_t btimer_id); |
| |
| |
| /* ---------------------------------------------------------------------- */ |
| /* Peripheral Function - Function to program the Preload */ |
| /* ---------------------------------------------------------------------- */ |
| /** Sets preload for the counter |
| * @param btimer_id Basic Timer ID |
| * @param preload_count - 32-bit pre-load value |
| */ |
| void p_btimer_preload_set(uint8_t btimer_id, uint32_t preload_count); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* Peripheral Functions - Functions for basic timer interrupts */ |
| /* ---------------------------------------------------------------------- */ |
| /** Reads the interrupt status bit in the timer block |
| * @param btimer_id Basic Timer ID |
| * @return status - 1 if interrupt status set, else 0 |
| */ |
| uint8_t p_btimer_int_status_get(uint8_t btimer_id); |
| |
| /** Clears interrupt status bit in the timer block |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_int_status_clr(uint8_t btimer_id); |
| |
| /** Sets interrupt enable bit in the timer block |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_int_enable_set(uint8_t btimer_id); |
| |
| /** Clears interrupt enable bit for the timer block |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_int_enable_clr(uint8_t btimer_id); |
| |
| /* ---------------------------------------------------------------------- */ |
| /* Peripheral Functions - Functions for Control Register */ |
| /* ---------------------------------------------------------------------- */ |
| /** Writes the control register 32-bits |
| * @param btimer_id Basic Timer ID |
| * @param value - 32-bit value to program |
| */ |
| void p_btimer_ctrl_write(uint8_t btimer_id, uint32_t value); |
| |
| /** Reads the control register |
| * @param btimer_id Basic Timer ID |
| * @return uint32_t - 32-bit value |
| */ |
| uint32_t p_btimer_ctrl_read(uint8_t btimer_id); |
| |
| /** Clears enable bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_enable_set(uint8_t btimer_id); |
| |
| /** Clears enable bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_enable_clr(uint8_t btimer_id); |
| |
| /** Sets counter direction bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_counter_dir_set(uint8_t btimer_id); |
| |
| /** Clears counter direction bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_counter_dir_clr(uint8_t btimer_id); |
| |
| /** Sets auto restart bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_auto_restart_set(uint8_t btimer_id); |
| |
| /** Clears auto resetart bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_auto_restart_clr(uint8_t btimer_id); |
| |
| /** Sets soft reset bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_soft_reset_set(uint8_t btimer_id); |
| |
| /** Read Soft Reset bit |
| * @param btimer_id Basic Timer ID |
| * @return 0 if soft reset status bit cleared; else non-zero value |
| */ |
| uint8_t p_btimer_ctrl_soft_reset_sts_get(uint8_t btimer_id); |
| |
| /** Sets start bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_start_set(uint8_t btimer_id); |
| |
| /** Read start bit in the control register |
| * @param btimer_id Basic Timer ID |
| * @return 0 if start bit not set; else non-zero value |
| */ |
| uint8_t p_btimer_ctrl_start_get(uint8_t btimer_id); |
| |
| /** Clears start bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_start_clr(uint8_t btimer_id); |
| |
| /** Sets reload bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_reload_set(uint8_t btimer_id); |
| |
| /** Clears reload bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_reload_clr(uint8_t btimer_id); |
| |
| /** Sets halt bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| void p_btimer_ctrl_halt_set(uint8_t btimer_id); |
| |
| /** Clears halt bit in the control register |
| * @param btimer_id Basic Timer ID |
| */ |
| |
| void p_btimer_ctrl_halt_clr(uint8_t btimer_id); |
| |
| /** Sets prescale value |
| * @param btimer_id Basic Timer ID |
| * @param prescaler - 16-bit pre-scale value |
| */ |
| void p_btimer_ctrl_prescale_set(uint8_t btimer_id, uint16_t prescaler); |
| |
| |
| #endif // #ifndef _BTIMER_H |
| |
| /* end btimer_perphl.c */ |
| |
| /** @} //Peripherals Basic_Timer |
| */ |
| |