有一段时间没使用MSP430了,这回为了实现P2.4脚(TA1.2)输出PWM正经费了点小劲,MSP430官方的代码库里使用的都是这样的代码:下边的代码注释的引脚连接里写的P1.2/TA1,乍一看还为是让TA1.1输出75%的PWM信号,其实CCR0代表的是TA0CCR0,CCTL1代表的是TA0CCTL1。
也就是说控制的是TA0.1,这样的代码真心不容易让人理解,另外官方也没有关于TA1的的代码。
我刚刚写了一个TA1.2 的,放到这里,给像我一样菜的小朋友使用,也给自己留个记号,很早以前记得遇到过类似的问题的,因为没有归档,还得自己一点点调。这回好,”有了EEWORLD我再也不用担心记不住以前解决过的问题了。“
官方msp430g2xx3_ta_16.c部分代码
// MSP430G2xx3
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.2/TA1|--> CCR1 - 75% PWM
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x0C; // P1.2 and P1.3 output
P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 options
CCR0 = 512-1; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
CCR1 = 384; // CCR1 PWM duty cycle
TACTL = TASSEL_2 + MC_1; // SMCLK, up mode
_BIS_SR(CPUOFF); // Enter LPM0
}
控制P2.4(TA1.2)输出10%方波
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P2SEL |= BIT4; // P2.4 option select
P2DIR |= BIT4; // P2.4 outputs
TA1CCR0 = 100; // Add Offset to TA1CCR0
TA1CCR2 = 10; // Add Offset to TA1CCR2
TA1CCTL2 = OUTMOD_6 ; // TA1CCR1 PWM toggle/set
TA1CTL = TASSEL_2 + MC_1 ; // SMCLK, Up to CCR0
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
|