您好!
当我处理引脚振荡器并尝试了解电容式触控软件库时、我得出结论:timer0_A3 (用作振荡计数器) 和 Timer1_A3 (用作选通时间)的配置如下:
因此我的问题是、当输入时钟来自 P1.0 (振荡)时、timer0_A3工作正常。 但是、引脚 P1.1 (即使在示波器上看到振荡)不进行计数、这意味着引脚 P1.1不会路由到计时器、我在用户指南上已经阅读过、某些引脚振荡器输出会路由到计时器时钟输入或计时器捕捉通道、 那么、我的问题是如何将引脚振荡器输出路由到计时器时钟输入或带有微控制器上的寄存器的计时器捕捉通道?
#include "msp430g2955.h" char t=0; int meas _cnt[8]; void main (void) { WDTCTL = WDTPW + WDTHOLD;//停止 WDT 以防止复位 BCSCTL1 = CALBC1_16MHz; //将 DCO 设置为1MHz DCOCTL = CALDCO_16MHz; P2DIR |= BIT2; //P2.2输出 while (1){ //******** Timer0_A3作为计数器 // //配置 Timer0_A3 TA0CTL =tassel_0|ID_3|MC_2|TACLR; // TACLK (PinOsc 时钟源)=tassel_0、ID_0=输入分频器:0、MC_2=继续 TA0CCTL0 =CM_3|CCIS_0|CAP|SCS; //CM_3=正边沿、CCIS_2=GND、CAP=捕获模式 //********* PIN_LOCATOR********* // //配置端口1按钮的引脚振荡器 P1DIR &=~ BIT1; //P1.1 P1SEL &=~ BIT1; P1SEL2 |= BIT1; //******** Timer1_A0作为选通时间 // TA1CCTL0 |= CCIE; //启用 CCR0中断 TA1CTL |= tassel_2 + MC_1 + ID_3; // SMCLK/8、upmode TA1CCR0 = 5; //保留与 TA1R (SMCLK/8)/8000 = 250Hz 4ms 进行比较的数据。 _BIS_SR (GIE);//Enter LPM0和中断被启用 while (t = 0); T = 0; MEAS_cnt[0]= TA0CCR0; //保存结果 TA1CTL|=TACLR; P1SEL2 &=~BIT1; } } //计时器 A1中断服务例程 #pragma vector=Timer1_A0_vector __interrupt void Timer_A (void) { t=1; //TA0CCTL0 ^= CCIS0; //创建 CCR0 TA1CCTL0的软件捕获&&~ CCIE; //禁用 CCR0中断 }