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.

[参考译文] CCS/MSP430G2533:2.6 WFP上的PWM代码不起作用

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/629163/ccs-msp430g2533-code-for-pwm-on-p2-6-doesn-t-work

部件号:MSP430G2533

工具/软件:Code Composer Studio

我找到了一些实施PWM的代码。 我正在尝试进行修改,以便将换能器连接到WFP 2.6 ,以1 kHz PWM和50 % 占空比。 我的实施应该在启动板中生成红色LED变化强度,但它没有做任何事情。 PWM的新功能。 是否有人可以帮助正确实施?

我检查了TA0CCR0和TA0CCR1的值,结果显示无法读取

这是我的主要内容 
#include <MSP430.h>

#include "timera.h"

//全局变量
//char LEDBit = LED1;

//函数原型
void ConfigureClockModule(void);

void main (void)
{
//停止看门狗计时器,并配置时钟模块。
WDTCTL = WDTPW + WDTHOLD;
ConfigureClockModule();
TA0CCR0 = 249;
TA0CCR1 = 5;
TA0CCTL1 = OUTMOD_7;//重置或设置
TA0CTL =(tassel_2 | ID_3 | MC_1 | TCLR | TAIE);// SMCLK | div 1 | up | CLR | ENABLED interrupt (启用中断)

//初始化与LED相关的端口引脚,然后关闭LED。


//配置定时器A以生成所需的中断。
配置时间A();

_enable_interrupts();

//无限循环
同时(1){}


}/*void
TimeDelay (无符号int延迟,无符号int分辨率){
未签名的I;
TA0CTL =(MC_0 |TALL);
TA0CCR0 =分辨率;
TA0CTL =(tassel_2|ID_3|MC_1);

对于(i=0;i<延迟;i++){
while (!(TA0CTL和TAIFG));
TA0CTL &=!TAIFG;

TA0CTL =(mc_0|TALCLR);
}
}*/

void ConfigureClockModule(void){

//使用工厂校准配置数字控制振荡器(DCO)。
DCOCTL = CALDCO_1MHz;
BCSCTL1 = CALC1_1MHz
;}

#include "LED.h"
#include "timera.h"

void ConfigureTimerA (void)
{
TA0CTL =(MC0 | TCLR );
TA0CTL |=(tassel_2 |ID_3 | MC_1);
//将值分配给时间A0;捕获/比较寄存器0

//启用捕获
TA0CCTL0 |CTIE
| CCTA0I=
|= TAIE;
}

unsigned int direction =0;
#pragma vector = TIMER0_A0_vector
// CCIFG0
	__interrupt void Timer0_A0_routin(void){的中断服务例程

//最小强度
条件下的光(TACCR1 == 0)
方向= 1;
//最大强度时的光
,否则(TACCR0 = TACCR1)
方向= 0;
//最小值时的灯增加占空比
IF (方向= 0)
TACR1 --;//
最大减载占空比时的灯
,否则IF (方向== 1)
TACCR1+;
}

#pragma vector = TIMER0_A1_Vector
// CCIFG1和TAIFG
	__interrupt void Timer0_A1_routin(void){

交换机(TAIV){
	CASE TA0IV_NONE:
		中断;
	CASE TA0IV_TACTR1:// CCIFG1中断
	P1DIR || BIT0;//输出
	//P1OUT = 0;//清除输出引脚
	P2SEL &=~BIT6;
	P2SEL =~BIT7;//将WFP 2.6 设置为GPIO
	P2DIR || BIT6;// WFP 2.6 作为输出
	//P2OUT = 0;//清除输出引脚
		中断;

	CASE TA0IV_TAIFG:// TAIFG中断
	IF (TA0CCR1 <= 15){
	中断;
	}
	P1DIR || BIT0;//输出
P1OUT = 0;//清除输出引脚

P2SEL =~BIT6;//制作WFP 2.6 和7作为GPIO
P2DIR |= BIT6;// WFP 2.6 和2.7 作为输出
P2OUT =0;//清除输出引脚

		断开;
	默认值:对于(;;);//不能使用
	}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不能进行2.6 ,因为我只有20引脚DIP G25xx设备,但这里有一些代码演示了pp 1.6 的PWM
    如果使用G2启动板,请根据需要确保启动板在J5处有短接条。




    #include <MSP4S.h>


    unsigned Duty_cycle = 5;

    void softDelay( void )

    挥发性无符号长ix = 40万UL;

    { ix--;
    }
    while ( ix );
    }

    void main( void )



    WDTCTL =(WDTPW | WDTHOLD); //停止看门狗计时器

    BCSCTL1 = CALC1_8MHZ; //将范围设置为8MHz

    DCOCTL = CALDCO_8MHZ; //将DCO步进和调制设置为8MHz

    P1DIR |= BIT6;

    //将WFP 1.6 连接到timer a0
    // p1sel2不需要更改
    P1SEL || BIT6;

    //如果MCLK为8MHz,且计时器a0的时钟为1 DIV,则ta0ccr0增量为8倍/用户,
    //因此,将tA0ccr0设置为8000将获得1毫秒的总运行时间
    TA0CCR0 =(8000 - 1); // PRF 1 kHz

    TA0CCR1 = 40; //占空比5 %

    TA0CCTL1 = OUTMOD_7; //重置/设置

    TA0CTL =(tassel_2 | ID_3 | MC_1 | TCLR);// SMCLK,分隔符1,上模式,清除




    对于(;;)

    softDelay();


    如果(5 ==工作周期)

    占空比= 95;
    TA0CCR1 = 7900;
    }
    否则

    占空比= 5;
    TA0CCR1 = 40;
    }



    }//结束于()

    }//结束main()