这个实验共用到P1、P1DIR、P1SEL、T3CTL、T3CCTL0、T3CC0、T3CCTL1和T3CC1几个个寄存器。其中前几个的作用前面的文章里应经介绍过了,这里就不再重复说明了。这里主要是讲一下后几个寄存器的作用。其中T3CTL为T3控制寄存器,T3CCTL0为T3通道0捕获/比较控制寄存器,T3CC0为T3通道0捕获/比较值寄存器,T3CCTL1为T3通道1捕获/比较控制寄存器,T3CC1为为T3通道1捕获/比较值寄存器。
在试验的相关程序里,想要看一下一个条件宏定义。
复位计时器相关寄存器的宏定义。
#define TIMER34_INIT(timer) \
do { \
T##timer##CTL = 0x06; \ 开溢出中断,模计数(反复从0x00 - T3CCX计数)
T##timer##CCTL0 = 0x00; \ T3通道0没有捕获
T##timer##CC0 = 0x00; \ T3通道0捕获/比较值为00
T##timer##CCTL1 = 0x00; \ T3通道1没有捕获
T##timer##CC1 = 0x00; \ T3通道1捕获/比较值为00
} while (0)
打开T3/4溢出中断宏定义。
#define TIMER34_ENABLE_OVERFLOW_INT(timer,val) \
(T##timer##CTL = (val) ? T##timer##CTL | 0x08 : T##timer##CTL & ~0x08)
设置T3的工作方式宏定义。
#define TIMER3_SET_MODE(val) \
do{ \
T3CTL &= ~0X03; \
(val==1)?(T3CTL|=0X01): \
(val==2)?(T3CTL|=0X02): \
(val==3)?(T3CTL|=0X03): \
(T3CTL|=0X00); \
}while(0)
时钟分步选择宏定义。
#define TIMER3_SET_CLOCK_DIVIDE(val) \
do{ \
T3CTL &= ~0XE0; \
(val==2) ? (T3CTL|=0X20): \
(val==4) ? (T3CTL|=0x40): \
(val==8) ? (T3CTL|=0X60): \
(val==16)? (T3CTL|=0x80): \
(val==32)? (T3CTL|=0xa0): \
用户444382 2013-5-12 11:31