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.

[参考译文] MSP430G2955:使用带看门狗计时器的引脚坐加电容式触控

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/600912/msp430g2955-capacitive-touch-using-pin-osciallator-with-watchdog-timer

器件型号:MSP430G2955

您好,戴尔斯,

自从我开始阅读数据表、用户指南并浏览了 TI 的 CapacitiveTouch 示例以及一些网上 与此相关的代码示例后、我尝试使用引脚振荡器和看门狗计时器作为栅极计时器及其中断来编写03个按钮的代码。 但是、在代码进入中断并在寄存器 TACCR1上获取一些恒定数据的第一个阶段、我还测量了焊盘上振荡器的频率(无触控时为1.7Mhz、触摸时为700kHz)、 但是、现在我使用的最后一个代码是 WDTCTL |= WDT_MEAS_Setting;             // WDT、SMCLK、间隔定时器、并且我的编译器转到(逐步运行它)名为 boot_special .c 的特定文件、并指向  if (_system_pre_init ()!= 0)_auto_init (); 我也注意到引脚 anymore.please 中没有任何问题、如果您能帮您弄清楚、那将会非常好。谢谢

/*主函数*/
#include "msp430g2955.h"

#define NUM_SEN 3. //定义传感器数
#define LED_1 BIT2 // P1.0 LED 输出
//为传感器测量定义 WDT SMCLK 间隔*/
#define WDT_MEAS_Setting (DIV_SMCLK_512)
#define DIV_SMCLK_512 (WDT_MDLY_0_5) // SMCLK/512

//用于感应
unsigned int meas _cnt [NUM_SEN]的全局变量;

const unsigned char bote_P1[NUM_SEN]={BIT0、BIT3、BIT7};

void pin_osc_measure (void);
void main (void)
{


unsigned int i、j、k;
TCTL = WDWPW + WDTPW //停止看门狗定时器
BCSCTL1 = CALBC1_16MHz; //将 DCO 设置为16MHz
DCOCTL = CALDCO_16MHz; //CPU 运行、MCLK 来自 DCO 源
//BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
BCSCTL2 |=SELM_0 + DIVM_3 + DIVS_3; //SELM_0-->MCLK 源来自 DCOCLK、DIVM_3 --> MCLK = DCO/8、DIVS_3 --> SMCLK = DCO/8。
IE1|= WDTIE; //启用 WDT 中断

// P2SEL = 0x00; //无 XTAL
P2DIR |= BIT2;
__bis_SR_register (GIE); //为

(;)
{启用中断
对于(k=0;k<10;k++){
PIN_osc_measure(); //建立电容测量


对于(i = 0;i < NUM_SEN;i++)
{
if (meas _cnt[i]< 1000)
{
P2OUT &=~BIT2;
}
其他
{
对于(j=0;j<3;j++)
P2OUT ^= BIT2;
//__delay_cycles (2000);
}
}

}
}} //结束主


void pin_osc_measure (void)
{
unsigned int i;
TA0CTL = tassel_0+MC_2; // tassel_0=TACLK 由外部提供:、MC_2=连续启动模式、
TA0CCTL1 = CM_3+CCIS_2+CAP; // TA0CCTL1=CAPTURE/COMPARE 控制寄存器1;CM_3=Pos&Neg、CCIS_2=GND、Cap=捕捉模式:1、
/CCTL0 = CCIE; //timer intfut 不需要、因为我将 WDT

用于(i = 0;i 

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

    您好!

    看门狗计时器似乎正在复位、我怀疑"WDTCTL |= WDT_meas 设置;"代码行导致了该问题。 这是因为任何读取或写入访问都必须使用字指令、而写入访问必须在高字节中包含写入密码05Ah。 任何用05Ah 以外的任何高字节值写入 WDTCTL 都是一个安全密钥违反并且触发一个 PUC 系统复位、而不管定时器模式如何。 对 WDTCTL 的任何读取都将读取高字节中的069h。 您的"WDT_MEAS_setting"定义应与"430g2955.h"头文件中的格式相匹配。

    有关 WDT 操作的更多详细信息、请参阅 用户指南的第10.2节

    此致、

    James

    MSP 客户应用

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

    由于不活动、我将关闭此线程。

    此致、

    James

    MSP 客户应用