【MSP430】定时中断

中断的开关

中断这个,我试了好像不太好用,定时中断还是会启动~

// disable global interrupt关中断
__bic_SR_register(GIE);


// enable global interrupt开中断
__bis_SR_register(GIE);


_DINT();//关总中断 (可用于保护不希望受到中断打断的程序)
_()NOP; //在保护程序之前与关中断之间最少有一步操作
_EINT(); //开总中断  

定时中断

    TA0R = 0;
    TA0CCR0 = 32768; // 1s  = 32768 * (1 /32768)
    TA0CTL = TASSEL__ACLK | MC__UP | TACLR | TAIE;      // ACLK, count mode, clear TAR, enable interrupt

关于TA0CTL 以定时器A举例

  1. 时钟CLK
#define TASSEL__TACLK          (0*0x100u)     /* Timer A clock source select: 0 - TACLK 	外部输入*/
#define TASSEL__ACLK           (1*0x100u)     /* Timer A clock source select: 1 - ACLK  	32.768KHz*/
#define TASSEL__SMCLK          (2*0x100u)     /* Timer A clock source select: 2 - SMCLK 	16MHz*/
#define TASSEL__INCLK          (3*0x100u)     /* Timer A clock source select: 3 - INCLK 	外部输入*/
  1. 模式MC
#define MC__STOP               (0*0x10u)      /* Timer A mode control: 0 - Stop 			停止暂停定时器*/
#define MC__UP                 (1*0x10u)      /* Timer A mode control: 1 - Up to CCR0 		向上计数模式*/
#define MC__CONTINUOUS         (2*0x10u)      /* Timer A mode control: 2 - Continuous up 	连续模式*/
#define MC__UPDOWN             (3*0x10u)      /* Timer A mode control: 3 - Up/Down 			向上或向下模式*/
  1. TA0CCR0
    设定的计数阈值
    如果MC选择MC__UP,则就是说TA0R开始定时累计,当TA0R==TA0CCR0时,产生定时中断
  2. TACLR
    清空TAxR,这个是用来计数用的
#define TACLR                  (0x0004)       /* Timer A counter clear 						清空TAxR*/
  1. TAIE
    使能中断
#define TAIE                   (0x0002)       /* Timer A counter interrupt enable 			使能中断*/
#define TAIFG                  (0x0001)       /* Timer A counter interrupt flag 			中断产生标志位*/

你可能感兴趣的:(Hardware)