大家好!
我正在尝试将 MSP 设置为测量 MSP430FR5994的信号@ TB0.4 (引脚52)的频率。
我的代码如下。
初始化计时器 TB0.4
void init_TB0_4() { P1DIR &= ~BIT7; // Set P1.7 as an input P1SEL0 |= BIT7; // Select Timer_B function for P1.7 P1SEL1 &= ~BIT7; TB0CTL = TBSSEL__SMCLK | MC__CONTINOUS | TBIE | ID_1 | TBCLR; // Set Timer B0 clock source to system clock enable timer B interrupt TB0CCTL4 = CAP | CM_1 | CCIS_1 | SCS_1; // Configure Timer B0.4 CAPture mode. Rising edge. CCIxB. Synchronous capture }
中断处理程序
#pragma vector = TIMER0_B1_VECTOR __interrupt void Timer0_B1_ISR(void) { switch(__even_in_range(TB0IV,TB0IV_TB0IFG))// { case TB0IV_TB0CCR4: //FCount[Fpoint++] = TA1CCR1; if (TB0CCR4 < LastVal) { Overflow += 0x10000; } FCount[Fpoint++] = TB0CCR4 + Overflow; LastVal = TB0CCR4; if (Fpoint >=64) { TB0CCTL4 &= ~CCIE; Freq = (FCount[63] - FCount[0])>>6; splitUint16(Freq, &f_msb, &f_lsb); // Split 16bit Freq into two 8bit numbers UART_TXBuffer[0] = f_msb; // Element 0 of UART_TXBuffer array hold frequency count msb UART_TXBuffer[1] = f_lsb; // Element 1 of UART_TXBuffer array hold frequency count lsb TXbyte = 0; // Initialise TXbyte TX_Data_Len = 2; // Number of bytes to be sent UCA1TXBUF = UART_TXBuffer[TXbyte++]; // Transmit the first byte from UART_TXBuffer array Fpoint = 0; LastVal = 0; //for(clrFCount=0; clrFCount<32; clrFCount++) //{ //FCount[clrFCount] = 0; //} } break; case TB0IV_TBIFG: break; default: break; } }
我在开发板上使用计时器 A1.1 (引脚3)作为输入的代码工作、全部正常工作。
现在我使用 TB0.4在自己的电路板上运行、它不起作用、我甚至 在 TB0IV_TB0CCR4情况下也没有碰到断点:当中断被启用(TB0CCTL4 |= CCIE)、在我的代码中的位置设置。
我对 C 和 MSP 编码完全陌生、所以如果这是基本错误、我就看不出为什么出错了。
谢谢。
伊恩