【TI首届低功耗设计大赛】焊接完成,第一个程序,LED流水灯
[复制链接]
为了验证焊接是否成功,我只焊了复位电流和几个LED灯,先是用EXP430G2开发板下载程序,下了很多次都在downloading时提示通信错误,只有一次成功,平时下MSP430G2553都没有问题,怀疑是仿真器版本过低导致,后来换成EXP430FR5969的开发板问题解决了。 跑了一个LED流水灯程序,证明单片机焊接良好。 我焊好的最最小系统板 把EXP430FR5969的TST和RST的跳线取下,把TST RST引出,再接上VDD和GND就可以仿真外边的芯片了。 连接图 小视频 原理图 代码 - //******************************************************************************
- // MSP430FR59xx Demo - 流水灯程序,使用PJ.0 PJ.1 PJ.2 PJ.3循环控制单个LED点亮
- //
- // Description: Poll P1.4 in a loop, if hi P1.0 is set, if low, P1.0 reset.
- // ACLK = n/a, MCLK = SMCLK = default DCO
- //
- // MSP430FR5969
- // -----------------
- // /|\| XIN|-
- // | | |
- // --|RST XOUT|-
- // /|\ | |
- // --o--|P1.4 PJ.0|-->LED1
- // \|/ | PJ.1|-->LED2
- // | PJ.2|-->LED3
- // | PJ.3|-->LED4
- //
- // T. Witt
- // Texas Instruments Inc.
- // November 2011
- // Built with IAR Embedded Workbench V5.30 & Code Composer Studio V5.5
- //******************************************************************************
- #include <msp430.h>
- #include <stdint.h>
- uint16_t ta_lpm = 0;
- /*******************************************************************************
- * Function: timer_init
- * Description: 初始化,设置延时的功耗模式
- * Calls:
- * Input: uint16_t lpm 延时进入低功耗,可以是LPM0 LPM1 LPM2,不进低功耗时传0
- * Return: void
- ******************************************************************************/
- void timer_init(uint16_t lpm)
- {
- ta_lpm = lpm;
- }
- /*******************************************************************************
- * Function: delay_us
- * Description: 延时微秒,最长65535us
- * Calls:
- * Input: uint16_t us 延时长度
- * Return: void
- ******************************************************************************/
- void delay_us(uint16_t us)
- {
- _BIS_SR(GIE); // Enter LPM0 w/ interrupt
- TA0CCTL0 = CCIE; // CCR0 interrupt enabled
- TA0CCR0 = 1*us;
- TA0CTL = TASSEL_2 + MC_1; // SMCLK = 1Mhz, Up to CCR0
- if(ta_lpm)
- {
- __bis_SR_register(ta_lpm + GIE); // CPU off, interrupts enabled
- }
- else
- {
- while((TA0CTL & TAIFG) == 0);
- }
- }
- /*******************************************************************************
- * Function: delay_ms
- * Description: 毫秒延时 最大5957ms
- * Calls:
- * Input: uint16_t ms 延时长度
- * Return: void
- ******************************************************************************/
- void delay_ms(uint16_t ms)
- {
- if(ms > 5957)while(1);
- _BIS_SR(GIE); // Enter LPM0 w/ interrupt
- TA0CCTL0 = CCIE; // CCR0 interrupt enabled
- TA0CCR0 = 11*ms;
- TA0CTL = TASSEL_1 + MC_1; // ACLK = 11KHz, Up to CCR0
- if(ta_lpm)
- {
- __bis_SR_register(ta_lpm + GIE); // CPU off, interrupts enabled
- }
- else
- {
- while((TA0CTL & TAIFG) == 0);
- }
- }
- /*******************************************************************************
- * Function: delay_s
- * Description: 秒延时
- * Calls:
- * Input: uint16_t s 延时长度
- * Return: void
- ******************************************************************************/
- void delay_s(uint16_t s)
- {
- uint16_t i;
- for(i=0;i<s;i++)
- {
- delay_ms(1000);
- }
- }
- int main(void)
- {
- uint8_t i = BIT0;
- WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
- // Configure GPIO
- PJDIR |= BIT0 | BIT1 | BIT2 | BIT3; // Set P1.0 to output direction
- // Disable the GPIO power-on default high-impedance mode to activate
- // previously configured port settings
- PM5CTL0 &= ~LOCKLPM5;
- timer_init(LPM0_bits ); //初始化定时器,休眠时进入LPM0
- while (1) // Test P1.4
- {
- PJOUT = i; //根据i设置PJ的输出
- i <<= 1; //左移1位
- if(i > BIT3) //如果已经移出BIT3
- {
- i = BIT0; //从BIT0开始
- }
- delay_s(1); //延时1秒
- }
- }
- // Timer A0 interrupt service routine
- #pragma vector=TIMER0_A0_VECTOR
- __interrupt void Timer_A (void)
- {
- TA0CTL &= ~(MC_1);
- TA0CCTL0 &= ~(CCIE);
- if(ta_lpm)
- {
- __bic_SR_register_on_exit(ta_lpm); // Exit LPMx
- }
- }
复制代码
|