主题中讨论的其他器件:MSP430FR4133、 TIDM-FRAM-WATERMETER
工具/软件:Code Composer Studio
大家好、
我正在尝试使用 MSP430FR2311构建水表,并参考使用 MSP430FR4133的 TDIM FRAM 水表。 已提及以下链接... 问题在于 MSP430fr4133具有不同的寄存器集、MSP430FR2311具有不同的寄存器集。 我无法转换适用于 MSP430FR2311的编码。 并且还尝试了另一个示例来计算脉冲,但当我将其与 UART 中断集成时,我在 UART 中没有获得任何中断。 我想计算脉冲,在 UART 中断时,脉冲必须通过 UART 传输到另一个器件。
用于计算脉冲的源代码..
#include
//初始化变量
volatile unsigned int counter=0;
volatile unsigned int prev_counter=0;
unsigned int difference = 0;
//double flow_rate = 0.0;
__attribute__(ramfunc);
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
// P2.1/TB1.2
P2DIR &=~BIT1;//将 P2.1设置为输入方向
P2SEL1 &=~BIT1;
P2SEL0 |= BIT1;
// TB1CCR2;CCI2A 输入;
TB1CCTL2 = CAP + CM_1 + CCIE + SCS + CCIS_0;//捕捉模式+在上升沿+启用中断+同步捕捉源+捕捉输入选择 CCI2A
// SMCLK、控制模式;启动计时器
TB1CTL |= TBSSEL_2 + MC_2 + TBCLR;
while (1){
_bis_SR_register (LPM0_bits + GIE);//进入具有中断使能的低功耗模式0
__no_operation();
__DELAY_CYCLES (1000000);//延迟1秒以在1秒内获得上升脉冲边沿的数量
差值=计数器- prev_counter;//上升脉冲边沿的数量
//flow_rate =((double) difference *60)/4.7;//将上升脉冲边沿相乘以60以获得每分钟的脉冲数 除以数据表中的常数、以获得 L/min
if (TB1CCTL2 & COV)//检查捕捉溢出
{
TB1CCTL2 &=~COV;//在检测到 COV 位时将其清零
}
}
}
//Timer_B1 TBCCR2中断向量处理程序例程
#pragma vector = Timer1_B1_vector
_interrupt void Timer1_B1_ISR (void)
{
switch (__event_in_range (TB1IV、TB1IV_TBIFG))
{
案例 TBIV_none:中断;//Vector 0:无中断
案例 TBIV_TBCCR1:break;//Vector 2:TBCCR1 CCIFG。 中断源:捕捉/比较 R1。 中断标志:TBxCCR1 CCIFG。
案例 TBIV_TBCCR2://Vector 4:TBCCR2 CCIFG
Previ_counter =计数器;
计数器= TB1CCR2;//"计数器"值被复制到 TB1CCR2寄存器
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS + GIE);//退出 LPM0
中断;
案例 TBIV_TBCCR3:break;
案例 TBIV_TBCCR4:中断;
案例 TBIV_TBCCR5:中断;
案例 TBIV_TBCCR6:中断;
案例 TBIV_TBIFG:break;//Vector 6:TBIFG
默认值:break;
}
}