本帖最后由 littleshrimp 于 2014-10-16 14:45 编辑
有一段时间没使用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
- }
复制代码