定时器A配置和控制的函数:
Timer_A_startCounter(uint16_t baseAddress, uint16_t timerMode)
//定时器A开始计数
Timer_A_initUpMode(uint16_t baseAddress, Timer_A_initUpModeParam ∗param)
//配置定时器A为增计数模式
Timer_A_initUpDownMode(uint16_t baseAddress, Timer_A_initUpDownModeParam
∗param)
//配置定时器A为增/减计数模式
Timer_A_initContinuousMode(uint16_t baseAddress, Timer_A_initContinuousModeParam ∗param)
//配置定时器A为连续计数模式
Timer_A_initCaptureMode(uint16_t baseAddress, Timer_A_initCaptureModeParam ∗param)
//初始化为捕获模式。
Timer_A_initCompareMode(uint16_t baseAddress, Timer_A_initCompareModeParam ∗param)
//初始化为比较模式
Timer_A_clear(uint16_t baseAddress)
//复位/清除计时器时钟分频器,计数方向,计数值
Timer_A_stop(uint16_t baseAddress)
//停止计时器计时
参数:baseAddress
是TIMER_A模块的基地址
TIMER_A0_BASE ,TIMER_A1_BASE, TIMER_A2_BASE
参数:timerMode
TIMER_A_STOP_MODE ,TIMER_A_UP_MODE ,TIMER_A_CONTINUOUS_MODE // [Default] ,TIMER_A_UPDOWN_MODE
Timer_A共有4种工作模式:停止模式、增计数模式、连续计数模式和增/减计数模式,具体工作模式可以通过MC控制位进行选择,具体配置如表所示。
参数:Timer_A_initUpModeParam
//*****************************************************************************
//
//! \brief Used in the Timer_A_initUpMode() function as the param parameter.
//
//*****************************************************************************
typedef struct Timer_A_initUpModeParam {
//! Selects Clock source.
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK [Default]
//! - \b TIMER_A_CLOCKSOURCE_ACLK
//! - \b TIMER_A_CLOCKSOURCE_SMCLK
//! - \b TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK
uint16_t clockSource;
//! Is the desired divider for the clock source
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_1 [Default]
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_2
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_3
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_4
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_5
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_6
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_7
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_8
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_10
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_12
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_14
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_16
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_20
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_24
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_28
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_32
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_40
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_48
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_56
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_64
uint16_t clockSourceDivider;
//! Is the specified Timer_A period. This is the value that gets written
//! into the CCR0. Limited to 16 bits[uint16_t]
uint16_t timerPeriod;
//! Is to enable or disable Timer_A interrupt
//! \n Valid values are:
//! - \b TIMER_A_TAIE_INTERRUPT_ENABLE
//! - \b TIMER_A_TAIE_INTERRUPT_DISABLE [Default]
uint16_t timerInterruptEnable_TAIE;
//! Is to enable or disable Timer_A CCR0 captureComapre interrupt.
//! \n Valid values are:
//! - \b TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE
//! - \b TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE [Default]
uint16_t captureCompareInterruptEnable_CCR0_CCIE;
//! Decides if Timer_A clock divider, count direction, count need to be
//! reset.
//! \n Valid values are:
//! - \b TIMER_A_DO_CLEAR
//! - \b TIMER_A_SKIP_CLEAR [Default]
uint16_t timerClear;
//! Whether to start the timer immediately
bool startTimer;
} Timer_A_initUpModeParam;
参数:Timer_A_initUpDownModeParam
//*****************************************************************************
//
//! \brief Used in the Timer_A_initUpDownMode() function as the param
//! parameter.
//
//*****************************************************************************
typedef struct Timer_A_initUpDownModeParam {
//! Selects Clock source.
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK [Default]
//! - \b TIMER_A_CLOCKSOURCE_ACLK
//! - \b TIMER_A_CLOCKSOURCE_SMCLK
//! - \b TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK
uint16_t clockSource;
//! Is the desired divider for the clock source
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_1 [Default]
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_2
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_3
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_4
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_5
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_6
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_7
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_8
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_10
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_12
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_14
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_16
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_20
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_24
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_28
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_32
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_40
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_48
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_56
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_64
uint16_t clockSourceDivider;
//! Is the specified Timer_A period
uint16_t timerPeriod;
//! Is to enable or disable Timer_A interrupt
//! \n Valid values are:
//! - \b TIMER_A_TAIE_INTERRUPT_ENABLE
//! - \b TIMER_A_TAIE_INTERRUPT_DISABLE [Default]
uint16_t timerInterruptEnable_TAIE;
//! Is to enable or disable Timer_A CCR0 captureComapre interrupt.
//! \n Valid values are:
//! - \b TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE
//! - \b TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE [Default]
uint16_t captureCompareInterruptEnable_CCR0_CCIE;
//! Decides if Timer_A clock divider, count direction, count need to be
//! reset.
//! \n Valid values are:
//! - \b TIMER_A_DO_CLEAR
//! - \b TIMER_A_SKIP_CLEAR [Default]
uint16_t timerClear;
//! Whether to start the timer immediately
bool startTimer;
} Timer_A_initUpDownModeParam;
参数:Timer_A_initContinuousModeParam
//*****************************************************************************
//
//! \brief Used in the Timer_A_initContinuousMode() function as the param
//! parameter.
//
//*****************************************************************************
typedef struct Timer_A_initContinuousModeParam {
//! Selects Clock source.
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK [Default]
//! - \b TIMER_A_CLOCKSOURCE_ACLK
//! - \b TIMER_A_CLOCKSOURCE_SMCLK
//! - \b TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK
uint16_t clockSource;
//! Is the desired divider for the clock source
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_1 [Default]
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_2
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_3
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_4
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_5
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_6
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_7
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_8
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_10
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_12
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_14
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_16
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_20
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_24
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_28
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_32
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_40
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_48
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_56
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_64
uint16_t clockSourceDivider;
//! Is to enable or disable Timer_A interrupt
//! \n Valid values are:
//! - \b TIMER_A_TAIE_INTERRUPT_ENABLE
//! - \b TIMER_A_TAIE_INTERRUPT_DISABLE [Default]
uint16_t timerInterruptEnable_TAIE;
//! Decides if Timer_A clock divider, count direction, count need to be
//! reset.
//! \n Valid values are:
//! - \b TIMER_A_DO_CLEAR
//! - \b TIMER_A_SKIP_CLEAR [Default]
uint16_t timerClear;
//! Whether to start the timer immediately
bool startTimer;
} Timer_A_initContinuousModeParam;
参数:Timer_A_initCaptureModeParam
//*****************************************************************************
//
//! \brief Used in the Timer_A_initCaptureMode() function as the param
//! parameter.
//
//*****************************************************************************
typedef struct Timer_A_initCaptureModeParam {
//! Selects the Capture register being used. Refer to datasheet to ensure
//! the device has the capture compare register being used.
//! \n Valid values are:
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_0
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_1
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_2
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_3
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_4
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_5
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_6
uint16_t captureRegister;
//! Is the capture mode selected.
//! \n Valid values are:
//! - \b TIMER_A_CAPTUREMODE_NO_CAPTURE [Default]
//! - \b TIMER_A_CAPTUREMODE_RISING_EDGE
//! - \b TIMER_A_CAPTUREMODE_FALLING_EDGE
//! - \b TIMER_A_CAPTUREMODE_RISING_AND_FALLING_EDGE
uint16_t captureMode;
//! Decides the Input Select
//! \n Valid values are:
//! - \b TIMER_A_CAPTURE_INPUTSELECT_CCIxA
//! - \b TIMER_A_CAPTURE_INPUTSELECT_CCIxB
//! - \b TIMER_A_CAPTURE_INPUTSELECT_GND
//! - \b TIMER_A_CAPTURE_INPUTSELECT_Vcc
uint16_t captureInputSelect;
//! Decides if capture source should be synchronized with timer clock
//! \n Valid values are:
//! - \b TIMER_A_CAPTURE_ASYNCHRONOUS [Default]
//! - \b TIMER_A_CAPTURE_SYNCHRONOUS
uint16_t synchronizeCaptureSource;
//! Is to enable or disable timer captureComapre interrupt.
//! \n Valid values are:
//! - \b TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE [Default]
//! - \b TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE
uint16_t captureInterruptEnable;
//! Specifies the output mode.
//! \n Valid values are:
//! - \b TIMER_A_OUTPUTMODE_OUTBITVALUE [Default]
//! - \b TIMER_A_OUTPUTMODE_SET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE_RESET
//! - \b TIMER_A_OUTPUTMODE_SET_RESET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE
//! - \b TIMER_A_OUTPUTMODE_RESET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE_SET
//! - \b TIMER_A_OUTPUTMODE_RESET_SET
uint16_t captureOutputMode;
} Timer_A_initCaptureModeParam;
参数:Timer_A_initCompareModeParam
//*****************************************************************************
//
//! \brief Used in the Timer_A_initCompareMode() function as the param
//! parameter.
//
//*****************************************************************************
typedef struct Timer_A_initCompareModeParam {
//! Selects the Capture register being used. Refer to datasheet to ensure
//! the device has the capture compare register being used.
//! \n Valid values are:
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_0
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_1
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_2
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_3
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_4
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_5
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_6
uint16_t compareRegister;
//! Is to enable or disable timer captureComapre interrupt.
//! \n Valid values are:
//! - \b TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE [Default]
//! - \b TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE
uint16_t compareInterruptEnable;
//! Specifies the output mode.
//! \n Valid values are:
//! - \b TIMER_A_OUTPUTMODE_OUTBITVALUE [Default]
//! - \b TIMER_A_OUTPUTMODE_SET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE_RESET
//! - \b TIMER_A_OUTPUTMODE_SET_RESET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE
//! - \b TIMER_A_OUTPUTMODE_RESET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE_SET
//! - \b TIMER_A_OUTPUTMODE_RESET_SET
uint16_t compareOutputMode;
//! Is the count to be compared with in compare mode
uint16_t compareValue;
} Timer_A_initCompareModeParam;
定时器A 输出相关函数:
Timer_A_getSynchronizedCaptureCompareInput((uint16_t baseAddress, uint16_t
captureCompareRegister, uint16_t synchronized)
//获取同步的capturecompare输入
Timer_A_getOutputForOutputModeOutBitValue(uint16_t baseAddress, uint16_t
captureCompareRegister)
//为输出模式获取输出位
Timer_A_setOutputForOutputModeOutBitValue(uint16_t baseAddress, uint16_t
captureCompareRegister, uint8_t outputModeOutBitValue)
//为输出模式设置输出位
Timer_A_outputPWM(uint16_t baseAddress, Timer_A_outputPWMParam ∗param)
//计时器A运行在增计数模式产生PWM
Timer_A_getCaptureCompareCount(uint16_t baseAddress, uint16_t
captureCompareRegister)
//获取当前capturecompare计数值
Timer_A_setCompareValue(uint16_t baseAddress, uint16_t compareRegister, uint16_t
compareValue)
//设置捕获比较寄存器的值
Timer_A_getCounterValue(uint16_t baseAddress)
//读取当前计时器A计数值
参数:captureCompareRegister
TIMER_A_CAPTURECOMPARE_REGISTER_0
TIMER_A_CAPTURECOMPARE_REGISTER_1
TIMER_A_CAPTURECOMPARE_REGISTER_2
TIMER_A_CAPTURECOMPARE_REGISTER_3
TIMER_A_CAPTURECOMPARE_REGISTER_4
TIMER_A_CAPTURECOMPARE_REGISTER_5
TIMER_A_CAPTURECOMPARE_REGISTER_6
参数:compareRegister
TIMER_A_CAPTURECOMPARE_REGISTER_0
TIMER_A_CAPTURECOMPARE_REGISTER_1
TIMER_A_CAPTURECOMPARE_REGISTER_2
TIMER_A_CAPTURECOMPARE_REGISTER_3
TIMER_A_CAPTURECOMPARE_REGISTER_4
TIMER_A_CAPTURECOMPARE_REGISTER_5
TIMER_A_CAPTURECOMPARE_REGISTER_6
参数:synchronized
TIMER_A_READ_SYNCHRONIZED_CAPTURECOMPAREINPUT
TIMER_A_READ_CAPTURE_COMPARE_INPUT
参数:outputModeOutBitValue
TIMER_A_OUTPUTMODE_OUTBITVALUE_HIGH
TIMER_A_OUTPUTMODE_OUTBITVALUE_LOW
参数:Timer_A_outputPWMParam
//*****************************************************************************
//
//! \brief Used in the Timer_A_outputPWM() function as the param parameter.
//
//*****************************************************************************
typedef struct Timer_A_outputPWMParam {
//! Selects Clock source.
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK [Default]
//! - \b TIMER_A_CLOCKSOURCE_ACLK
//! - \b TIMER_A_CLOCKSOURCE_SMCLK
//! - \b TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK
uint16_t clockSource;
//! Is the desired divider for the clock source
//! \n Valid values are:
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_1 [Default]
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_2
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_3
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_4
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_5
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_6
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_7
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_8
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_10
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_12
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_14
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_16
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_20
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_24
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_28
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_32
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_40
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_48
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_56
//! - \b TIMER_A_CLOCKSOURCE_DIVIDER_64
uint16_t clockSourceDivider;
//! Selects the desired timer period
uint16_t timerPeriod;
//! Selects the compare register being used. Refer to datasheet to ensure
//! the device has the capture compare register being used.
//! \n Valid values are:
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_0
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_1
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_2
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_3
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_4
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_5
//! - \b TIMER_A_CAPTURECOMPARE_REGISTER_6
uint16_t compareRegister;
//! Specifies the output mode.
//! \n Valid values are:
//! - \b TIMER_A_OUTPUTMODE_OUTBITVALUE [Default]
//! - \b TIMER_A_OUTPUTMODE_SET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE_RESET
//! - \b TIMER_A_OUTPUTMODE_SET_RESET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE
//! - \b TIMER_A_OUTPUTMODE_RESET
//! - \b TIMER_A_OUTPUTMODE_TOGGLE_SET
//! - \b TIMER_A_OUTPUTMODE_RESET_SET
uint16_t compareOutputMode;
//! Specifies the dutycycle for the generated waveform
uint16_t dutyCycle;
} Timer_A_outputPWMParam;
参数:compareValue
是比较模式下需要比较的计数值
管理定时器A中断的程序:
Timer_A_enableInterrupt(uint16_t baseAddress)
//使能定时器中断
Timer_A_disableInterrupt(uint16_t baseAddress)
//禁用定时器中断
Timer_A_getInterruptStatus(uint16_t baseAddress)
//获取定时器中断状态
Timer_A_enableCaptureCompareInterrupt(uint16_t baseAddress, uint16_t
captureCompareRegister)
//启用捕获比较中断
Timer_A_disableCaptureCompareInterrupt(uint16_t baseAddress, uint16_t
captureCompareRegister)
//禁用捕获比较中断
Timer_A_getCaptureCompareInterruptStatus(uint16_t baseAddress, uint16_t
captureCompareRegister, uint16_t mask)
//返回捕获比较中断状态
Timer_A_clearCaptureCompareInterrupt(uint16_t baseAddress, uint16_t
captureCompareRegister)
//清除捕获比较中断标志
Timer_A_clearTimerInterrupt(uint16_t baseAddress)
//清除Timer TAIFG中断标志
参数:mask
TIMER_A_CAPTURE_OVERFLOW
TIMER_A_CAPTURECOMPARE_INTERRUPT_FLAG
中断向量
TIMERx_A0_VECTOR 是 CCR0 的中断向量
TIMERx_A1_VECTOR 是 TAIV 的中断向量
#define TIMER2_A1_VECTOR (43 * 1u) /* 0xFFD6 Timer2_A5 CC1-4, TA */
#define TIMER2_A0_VECTOR (44 * 1u) /* 0xFFD8 Timer2_A5 CC0 */
#define TIMER1_A1_VECTOR (48 * 1u) /* 0xFFE0 Timer1_A3 CC1-2, TA1 */
#define TIMER1_A0_VECTOR (49 * 1u) /* 0xFFE2 Timer1_A3 CC0 */
#define TIMER0_A1_VECTOR (52 * 1u) /* 0xFFE8 Timer0_A5 CC1-4, TA */
#define TIMER0_A0_VECTOR (53 * 1u) /* 0xFFEA Timer0_A5 CC0 */
Timer_A中断(重要)
16位定时器Timer_A具有两个中断向量,分别如下:
TAxCCR0的中断向量CCIFG0;
具有其余TAxCCRn的中断标志CCIFGn及TAIFG的中断向量TAIV。
在捕获模式下,当定时计数器TAR的值被捕获到TAxCCRn寄存器内时,置位相关的CCIFGn中断标志位。在比较模式下,当定时计数器TAR的值计数到TAxCCRn的值时,置位相关的CCIFGn中断标志位。也可利用软件置位或清除任意一个CCIFG中断标志位,当相关的CCIE中断允许位和GIE总中断允许位置位,CCIFGn中断标志位将请求产生中断。
① TAxCCR0中断
TAxCCR0中断标志位CCIFG0在Timer_A中断中具有最高的中断优先级,TAxCCR0中断产生逻辑如图所示。当相应的TAxCCR0中断请求被响应后,TAxCCR0中断标志位CCIFG0自动复位。
② TAIV中断
TAxIV中断主要包括TAxCCRn的中断标志CCIFGn和TAIFG中断标志。中断向量寄存器可被用来判断当前被挂起的Timer_A中断,之后通过查中断向量表得到中断服务程序的入口地址,并将其添加到程序计数器中,程序将自动转入中断服务程序。禁用Timer_A中断功能并不影响TAxIV中断向量寄存器的值。
对TAxIV中断向量寄存器的读或写,都将自动清除挂起的最高优先级中断标志位。如果同时也置位了其他中断标志位,在当前中断服务程序执行完毕后,将自动立即响应新的中断请求。
例如,当中断服务程序访问TAxIV中断向量寄存器时,同时TAxCCRI和TAxCCR2的CCIFG中断标志位置位。首先响应TAxCCRI的CCIFG中断请求,并且自动复位TAxCCR1的CCIFG中断标志位。当在中断服务程序中执行RETI断回执后,CPU响应TAXCCR2的CCIFG中断请求。
Timer_A具有丰富的寄存器资源供用户使用,详细列表如表所示