工具与软件:
您好:提前感谢您在这个问题上提供的任何帮助。
我正在尝试对连接到 LaunchPad 上 MSP430G2553芯片 P2.5的霍尔效应传感器的脉冲时序进行监控。
timerA 从不启动、TA1R 寄存器保持为零。 当我注释掉 InitHallSensor()代码时、计时器将按预期递增计数。
另外、当 LaunchPad (P2.5)的引脚13断开连接时、霍尔传感器电路会提供正确的脉冲、但当它连接时(在示波器上检测到的)保持低电平。
我将尝试简化操作、而不使用端口/引脚的数字 I/O。 我是否必须使用端口中断(引脚为数字 I/O)、或者我是否可以跳过该操作并直接转到通过 MSP430G2553数据表中所示的 CCI2B 输入触发计时器捕捉中断?
以下是我的霍尔效应传感器(018 412)电路。

以下是我的代码。
#include <intrinsics.h>
#include <msp430.h>
#include <stdio.h>
#include <stdint.h>
void InitPorts(void);
void InitHallSensor(void);
#define SENSOR_PIN BIT5 //attach hall sensor to P2_5 TA1.2
volatile unsigned int cntOvrFloTAR = 0;
volatile uint16_t currTimerCounts = 4;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
//set up Basic Clock Module
BCSCTL1 |= DIVA_3; //this write clears all other bits; divide ACLK/8
BCSCTL3 |= XCAP_3; //sets internal capacitance for watch crystal
InitPorts();
InitHallSensor();
//Set up Timer1A
// capture on rising edge, CCI2B input, synchronous cap, capture mode, ints enabled
TA1CCTL2 = CM_1 | CCIS_1 | CAP | CCIE | SCS;
// Continuous, divide clock by 1, ACLK, clear, enable
TA1CTL = MC_2 | ID_0 | TASSEL_1 | TACLR | TAIE;
__enable_interrupt();
for(;;){
// wait
}
}
#pragma vector = TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR (void){
switch (__even_in_range(TA1IV, 10)){
case 0:
break;
case TA1IV_TACCR2:
TA1CCTL2 &= ~CCIE; // disable further CCIE interrupts
currTimerCounts = TA1CCR2;
cntOvrFloTAR = 0; //reset TAR rollover counter
TA1CCTL2 &= ~CCIFG; // clear the CCRO flag
TA1CCTL2 |= CCIE; //enable interrupts
break;
case TA1IV_TAIFG:
++cntOvrFloTAR;
break;
default:
for (;;){
//Should not be possible
}
}
}
void InitPorts(void){
P1OUT = 0;
P1DIR = 0xFF;
P2OUT = 0;
P2DIR = 0xFF;
}
void InitHallSensor(void){
P2DIR &= ~SENSOR_PIN; //Set pin as input
P2SEL = SENSOR_PIN; //Set pin for Timer1_A CCI1A capture
}