This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好,
我正在制作捕捉程序。
我正在使用 MSP430FR6972 (我正在制作脉冲计数器)
我的目的 是1)通过捕获程序获取模拟值、
2)、然后将值发送到示波器(以检查频率)。
我还在使用 UART 程序,并将"Tx Data"检查为范围
(我不确定……我做的是正确还是不正确…… 捕获接收到的数据..... 通过 UART 发送)
但我在示波器处获得了一些随机值(某些时间 MHz、有时是 KHz)
unsigned int timerAcapturePointer = 0; int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 PM5CTL0 &=~LOCKLPM5; //================================= 引脚已定义================================================================================ P1SEL0 |=BIT3; //脉冲捕捉 P1SEL1 &=~BIT3; P1DIR &=~BIT3; //======================================== clock======================================================================================== /* //时钟系统设置 CSCTL0_H = CSKEY >> 8; //注释 CSCTL2 |= SE拉美 经济体系7; //注释 CSCTL2 |= SELA_VLOCLK; //注释 CSCTL0_H = 0x00; //注释 //_delay_cycles (1000); //注释 */ CSCTL0_H = CSKEY >> 8; CSCTL1 = DCOFSEL_0; CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK; CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; CSCTL4 &=~LFXTOFF; 操作 { CSCTL5 &=~LFXTOFFG; SFRIFG1 &=~OFIFG; } while (SFRIFG1&OFIFG); CSCTL0_H = 0; //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ // lcd_init(); //注释 UART_INIT(); // adc (); //tal意见///================================= 捕获======================================================================================================================== // Timer0_A3设置 TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;//捕获上升沿,使用 CCI2B=ACLK,同步捕获,启用捕获模式,启用捕获中断 TA0CTL = tassel_SMCLK | MC_Continuous;//使用 SMCLK 作为时钟源 ,启用 PMIS_1中断模式;{_PMIS_Rsbis}在 PM_bis_bis_bis}寄存器中的 中断模式下 #pragma vector = TIMER0_A1_vector __interrupt void Timer0_A1_ISR (void) { switch (__even_in_range (TA0IV、TA0IV_TAIFG)}{ 案例 TA0IV_TA0CCR1: 中断; 案例 TA0IV_TA0CCR2: timerAcapturePointer = TA0CCR2; putchar (timerAcapturePointer); _DELAY_CYCLES (100000); LPM3_EXIT; 中断; 案例 TA0IV_TA0IFG: 中断; 默认值: break; } 我 正在使用 MSP430FR6972。 我想检查"示波器"上的频率。 UART 没有问题。
您能检查一下吗、
请告诉我 …
我在哪里出错了?
(我也不知道该计划… 请回复)
此致、
Srijit。
>
TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;
// Capture rising edge,Use CCI2B=ACLK,Synchronous capture,Enable capture mode,Enable capture interrupt
P1.3 is [TA1.]CCI2A, not [TA0.]CCI2B [Ref Data Sheet (SLASE23E) Table 6-19]. [TA0.]CCI2A is over on P1.7 [Table 6-20].
You can move your input wire or change TA0->TA1. Then:
>
TA0CCTL2 = CM_1 | CCIS_0 | SCS | CAP | CCIE;
// Capture rising edge,Use CCI2A=P1.7,Synchronous capture,Enable capture mode,Enable capture interrupt
---------------
>
putchar
(timerAcapturePointer);
这只会发送捕获值的低字节、这并不是很有用。 您应该发送两个字节、但如果您只能发送一个字节、那么高字节将(稍微)更有用:
>
putchar
((timerAcapturePointer >> 8) & 0xFF); // high byte of timer value
---------------
[编辑:在重新阅读数据表时、我注意到 P1.3根本不会进入 TA0、而是进入 TA1。 已相应地更新。]
您好、Bruce、
非常感谢您的回复。
我做了一些改变:
中断: #pragma vector = Timer1_A1_vector __interrupt void Timer1_A1_ISR (void) { switch (__even_in_range (TA1IV、TA1IV_TAIFG)){ 案例 TA1IV_TA1CCR1: 中断; 案例 TA1IV_TA1CCR2: timerAcapturePointer = TA1CCR2; putchar ((timerAcapturePointer >> 8)& 0xFF); _DELAY_CYCLES (100000); LPM3_EXIT; 中断; 案例 TA1IV_TA1IFG: 中断; 默认值: 中断; } 主域: TA1CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;//捕捉上升沿,使用 CCI2B=ACLK,同步捕捉,启用捕捉模式,启用捕捉中断 TA1CTL = tassel_SMCLK | MC__Continous;//使用 SMCLK 作为时钟源,以连续模式启动计时 器#如果我使用 CCIS_0 (对于 CCI2A):中断不起作用, 但是、如果我使用 CCIS_0 (CCI2B)...中断工作。
您能告诉我吗,
有什么想法吗?
(根据数据表,它应该是 CCIS_0 (CCI2A)。
此致、
Srijit。
HII、
[引用 user="Srijit Munian"]But
if
I use CCIS_0(CCI2B)...the interrupts is working.
:
它将为"CCIS_1 "而不是"CCIS_0"。
我也看不到任何明显的东西。 您仍在将 P1.3用于输入信号?
如果您使用 LPM0而不是 LPM3、它会发生什么变化吗?
HII.I 使用同一个引脚。
P1.3。
它是定制板。
我现在需要使用该引脚。
此致、
Srijit
我将代码放在 MSP430FR6989 Launchpad 上、在 P1.7上生成(1kHz)信号、并将其修补为 P1.3。 结果:CCIS=0时、我按预期获得捕获。 我必须添加"PJSEL0 |=(BIT4|BIT5);"才能通过 LFXT 启动循环。
我能想到的是、您的信号不会达到 P1.3、因为其他一切似乎都已到位。 您是否有观察 P1.3的范围?