F5529 定时器 A 中断

定时器A有两个中断向量

  • CCR0 的中断向量
  • TAxIV 的中断向量。TAxIV 是中断管理器,类似 8259 芯片。除了 CCR0 以外的 CCRx 的中断和 TAx 的中断都由 TAxIV 代理请求,它们自己不能直接请求。TAxIV占用一个中断向量,而不是多个。无论哪个中断源产生中断,进入的都是同一个中断服务程序。这时候要在中断服务程序中查询 TAxIV 寄存器的值来判断是哪个中断源引起中断,然后执行相应的程序。在 C 语言中可以使用 switch - case 语句。

TAxCCR0 CCIFG的优先级最高。

在捕获模式时,TAxCCRn 中被放入捕获值时就会置位对应的 CCIFG 中断标志位。在比较模式时,计数值达到 TAxCCRn中的值时就会置位对应的 CCIFG 中断标志位。只有TAxCCR0 CCIFG能自己发送中断请求,其他的 TAxCCRn CCIFG都由TAxIV代理。

定时器计数值达到某个数时,继续计数发生溢出,计数到 0H 时,会置位 TAIFG 中断标志位,由 TAxIV 代理请求中断。

在头文件中,对这两个中断向量的宏定义如下

#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_A1_VECTOR        ".int52"                     /* 0xFFE8 Timer0_A5 CC1-4, TA */
#else
#define TIMER0_A1_VECTOR        (52 * 1u)                    /* 0xFFE8 Timer0_A5 CC1-4, TA */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_A0_VECTOR        ".int53"                     /* 0xFFEA Timer0_A5 CC0 */
#else
#define TIMER0_A0_VECTOR        (53 * 1u)                    /* 0xFFEA Timer0_A5 CC0 */
#endif

TIMER0_A0_VECTOR 是 CCR0 的中断向量,TIMER0_A1_VECTOR 是 TAxIV 的中断向量。

F5529 的中断服务函数的定义方式如下

#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR (void)
{
    __delay_cycles(20);
    GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
}

#pragma vector 后面的源操作数必须是头文件中的宏定义。

第二行中的函数名随便取,前面要有 __interrupt 标号

TAxIV 寄存器中的值在头文件中也有定义

/* T0A5IV Definitions */
#define TA0IV_NONE             (0x0000)       /* No Interrupt pending */
#define TA0IV_TACCR1           (0x0002)       /* TA0CCR1_CCIFG */
#define TA0IV_TACCR2           (0x0004)       /* TA0CCR2_CCIFG */
#define TA0IV_TACCR3           (0x0006)       /* TA0CCR3_CCIFG */
#define TA0IV_TACCR4           (0x0008)       /* TA0CCR4_CCIFG */
#define TA0IV_5                (0x000A)       /* Reserved */
#define TA0IV_6                (0x000C)       /* Reserved */
#define TA0IV_TAIFG            (0x000E)       /* TA0IFG */

例子

定时器A增计数模式产生中断使LED灯闪烁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值