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.

[参考译文] WEBENCH®︎工具/MSP430F6779A:MSP430F6779A

Guru**** 2394295 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/832391/webench-tools-msp430f6779a-msp430f6779a

器件型号:MSP430F6779A

工具/软件:WEBENCHRegistered设计工具

我正在尝试测量从一个上升沿到下一个上升沿的脉冲计数、为此、我在外部为 MCU 的一个引脚提供1Hz 脉冲。 我已经设置了一个计时器、也进行了端口设置、但我无法为脉冲计数建立逻辑。 我尝试了各种逻辑、但仍然无法找到计数。 我还在下面附上我的代码。 忽略我已声明但未在代码中使用的内容。

#include "io430f6779a.h"

#define ENABLE_GIE  _ bis_SR_register (GIE)

#define FLAG_STOP 0
#define BIT_true (A、B)   ((A)和(0x01<<(B)))

#define INPUT_PIN_STATUS      BIT_TRUE (P1OUT、6)
#define OUTPUT PIN_STATUS   BIT_TRUE (P1IN、6)


unsigned int OFFcount、total、off_set、count、CNT;
unsigned char Flag_Count;
字符 Flag_Stop;
读取无符号字符;
unsigned char Stat;
unsigned int High1[2]、Low1[2];
unsigned int old_off_set;

void Clock_Init();
int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止 WDT
Clock_Init();//时钟初始化
ENABLE_GIE;

P1IE |= BIT6;//Port1中断使能
P1SEL0 &=~ BIT6;//位选择
P1DIR &=~BIT6;//位方向
P1IN &=~BIT6;



P1IES &=~(BIT6);//边沿选择低到高
// P2IES |= BIT2;//边沿选择从高到低



TA0CCTL0= CCIE;//捕捉/比较中断使能
TA0CCR0 = 1050;// 1ms 秒
TA0CCTL1 = OUTMOD_7;//通过外部连接控制 TA
TA0CTL = tassel_2 | TACLR | MC_1;// SMCLK,向上计数模式
TA0EX0 = TAIDEX_7;//分频器

无符号长整型低电平、高电平;
Flag_Count = 1;
while (1)

WDTCTL = WDT_ARST_1000;//清除看门狗

if (Flag_Count = 1)

if (bit_true (P1IN、6))

High++;

其他

low++;


// Flag_Count =0;


//定时器溢出中断
#pragma vector=TIMER0_A0_VECTOR
_interrupt void TIMER0_A0_ISR (void)//8ms

// CNT++;
// OFFcount++;
// if (OFFcount>999)
if (OFF_SET)

OFFcount++;

// old_off_set=off_set;
// if (TAIFG)
//{
// Flag_Stop=1;
// OFFcount++;
//// total ++;
//// P1OUT ^= BIT6;
//}
//否则
//{
// OFFcount=0;
//
//}

//端口2中断
#pragma vector = Port1_vector
_interrupt void InterruptVectorPort1 ()

OFF_SET++;
P1IFG &=~(BIT6);

//Clock Initialli
空 Clock_Init()

UCSCTL6 &=~(XT1OFF);// XT1打开
UCSCTL6 |= XCAP_3;//内部负载电容
UCSCTL3 |= SELREF_XT1CLK;//设置 DCO FLL 基准= REFO
// PMMCTL0_H=PMMPW_H;
// PMMCTL0_L|=PMMCOREV_3;
操作

UCSCTL7 &=~XT1LFOFFG;//清除 XT1故障标志
} while (UCSCTL7 & XT1LFOFFG);//测试 XT1故障标志


// UCSCTL3 |= SELREF_2;//设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2;//设置 ACLK = REFO

_bis_SR_register (SCG0);//禁用 FLL 控制循环
UCSCTL0 = 0x0000;//设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_6;//选择 DCO 范围16MHz 运行

UCSCTL2 = FLLD_0 | 510;//将 DCO 乘法器设置为8MHz
//(N + 1)* FLLRef = Fdco
UCSCTL6 = XT1DRIVE_1;//(243 + 1)* 32768 = 8MHz
//设置 FLL Div = fDCOCLK/2


_BIC_SR_register (SCG0);//启用 FLL 控制环路
// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 8 MHz/32、768Hz = 250000 = MCLK 周期、DCO 才能稳定
_DELAY_CYCLES (250000);
//循环直到 XT1、XT2和 DCO 故障标志被清除
操作

UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1 & OFIFG);//测试振荡器故障标志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Aman、

    您的计时器是否完全触发?

    有一点可能会有所帮助-请查看以下链接、查看我们针对您的器件提供的一系列代码示例:

    http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slac648&fileType=zip

    我认为"msp430f677xA_P1_02.c"将有助于参考。 此示例展示了如何设置 GPIO 中断以在高到低边沿触发。 您需要修改此项以适合您的应用、但这是一个很好的大纲。

    如果您仍有问题、请告诉我。

    谢谢、

    Mitch