大家好、
我不熟悉 MSP430平台、我正在从事一个项目、在这个项目中、需要在两个上升沿之间以200us 的延迟生成一个双脉冲(请见所附图片)。 我目前正在尝试使用 Timer B 来生成这些信号。 当前使用标准1MHz SMCLK 作为计时器 B 的输入
下面的代码是我当前的代码、我不知道 TBxCCRn 寄存器是如何工作的。 我想知道是否有人可以帮忙? 还是提供更好的说明来说明数据表/系列用户手册中的内容? 令我感到困惑的是放在 TB1CCR1和 TB1CCR2寄存器中的值
感谢您提前提供的所有帮助。
#include int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器。 //触发输入(P1.0) P1DIR &=~BIT0; P1REN |= BIT0;//启用内部上拉/下拉电阻器 P1OUT |= BIT0;//为 P1.0选择上拉模式 P1IE |= BIT0;//启用中断 P1IES |= BIT0;//HIGH -> LOW 设置标志 P1IFG &=~BIT0;//清除中断标志寄存器 p1.1上的//输出(init_q_drive) P1DIR |= BIT1;//在特定引脚上设置方向 P1OUT &=~BIT1;//将初始输出设置为0 PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 加电默认值以激活先前配置的设置 //TB1CCTL1 |=(OUTMOD_7 | CCIE);// Timer B1捕获/比较控制寄存器1设置为设置/复位 TB1CCTL1 |= CCIE;//Timer B1捕获/比较控制寄存器1为中断启用 //TB1CCTL2 |=(OUTMOD_7 | CCIE);// Timer B1捕获/比较控制寄存器1设置/复位 TB1CCTL2 |= CCIE;//Timer B1捕获/比较控制寄存器1为中断启用 TB1CCR1 = 10; TB1CCR2 = 20; while (1){ _bis_SR_register (LPM3_bits | GIE);//进入低功耗模式并启用中断 } } // I/O 端口上的中断(引脚 P1.0) #pragma vector = Port1_vector __interrupt void Port_1_ISR (void) { P1IE &=~BIT0;//禁用中断,因此在此例程中不会发生任何中断 P1IFG &=~BIT0;//清除 p1.0上发生的中断标志 //低于需要设置不同的延迟时间(200、400、800、1000us) //检查输入引脚以查看所选内容。 根据旋转开关检查 TB1CCR0 = 208;//200us 延迟(此硬编码是临时的) //启动计时器 TB1CTL = TBSSEL_2 | MC_1 | TBCLR | TBIE;//启动计时器 SMCLK (1MHz)、向上计数模式、清除 TBR、启用中断 } //计时器 b 中断服务例程当计时器 b 导致中断时,此例程称为 #pragma vector = Timer1_B1_vector __interrupt void Timer1_b1_ISR (void) switch (__event_in_range (TB1IV、TB1IV_TBIFG)) { TB1IV_NONE 案例: 中断;//无中断 案例 TB1IV_TBCCR1: P1OUT ^= BIT1;//输出...两个波形的上升沿 中断; 案例 TB1IV_TBCCR2: P1OUT ^= BIT1;//输出...两个波形的下降沿 中断; 案例 TB1IV_TBIFG: P1IE |= BIT0;//中断被启用 P1IFG &=~BIT0;//清除中断标志... 计时器停止时 TB1CTL = TBSSEL_2 | MC_0 | TBCLR | TBIE;//停止计时器 中断; 默认值: 中断; } }