工具/软件:Code Composer Studio
我发现 LED 闪烁代码在计时器间隔内进行 LED 切换时遇到困难。
请告诉我问题和所需的更改
//头文件//
#include "msp430fr2355.h"
#include "stdint.h"
#define CALTDH0CTL1_256 *((unsigned int *) 0x1A36)
void Init_clocks (void);
void init_io (void);
void init_wdt (void);
void init_TimerB (void);
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
_delay_cycles (1000000);
init_clocks ();//初始化25MHz 的时钟
init_TimerB ();
init_wdt ();
init_io ();
PM5CTL0 &=~LOCKLPM5;//启用 GPIO
_ENABLE_INTERRUPT ();//设置 GIE
_delay_cycles (1000000);
while (1)
{
;//
}
}
//结束 main
//WDT 以重新启动 ADC
void init_WDT (void)
{
WDTCTL = WDT_MDLY_32;//从1MHz 到 SMCLK 的 WDT 32ms 间隔定时器
SFRIE1 |= WDTIE;//启用 WDT 中断
}
空 init_TimerB (空)
{
TB3CTL = TBSSEL_SMCLK | MC_3 | TBCLR;// SMCLK、UP_DOWN 模式、清除 TBR
TB3CCR0 = 3276;
TB3CCR1 = 1676;
TB3CCTL0 |= CCIE;
_bis_SR_register (GIE);//启用中断
__no_operation();//用于调试器
_EINT();//启用中断
}
//时钟和 Vcore
void Init_clocks (void)
{
FRCTL0 = FRCTLPW | NWAITS_2;
_bis_SR_register (SCG0);//禁用 FLL
CSCTL3 |= SELREF_REFOCLK;//将 REFO 设置为 FLL 基准源
CSCTL0 = 0;//清除 DCO 和 MOD 寄存器
CSCTL1 |= DCORSEL_7;//设置 DCO = 24MHz
CSCTL2 = FLLD_0 + 731;// DCOCLKDIV = 24MHz
_DELAY_CYCLES (3);
_BIC_SR_register (SCG0);//启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));// FLL 锁定
CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
//默认 DCOCLKDIV 为 MCLK 和 SMCLK 源
}
//IO 初始化//
void init_io (void)
{
//指示
P2SEL0 &=~(BIT6);/GPIO-LED3
P2DIR |=(BIT6);//输出 LED3
_bis_SR_register (GIE);
}
/******** TIMERD0.1中断************* /
//计时器 B1中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = TIMER3_B0_vector
_interrupt void Timer3_B0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(TIMER3_B0_vector)) Timer3_B0_ISR (void)
其他
错误编译器不受支持!
#endif
{
P2OUT |=~(BIT6);
TB3CCTL1 &=~CCIFG;
}