//***********************************************************************************************************************
// 功能描述: 利用定时器A中断服务程序切换P3.1口电平,在该程序中,切换频率
// 0.5Hz(2s)=计数周期*计数值=(1/计数频率)*计数值=(1/32768)*65535=1.99999=2
// TACLK信号选择ACLK,ACLK信号采用时钟源XT1CLK(LF模式),工作频率32K ,SMCLK信号和MCLK信号时钟源为系统默认配置(为DCOCLKDIV),工作频率为系统默认工作频率(1.045MHz)
// ACLK = TACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO ~1.045MHz
// 作者:任重远
// 日期:2014.4.30
//***********************************************************************************************************************8
#include <msp430.h>
void Port_Mapping(void);
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
P3DIR |=BIT1;
P1DIR |= BIT3+BIT6+BIT7; // 设为输出
P1SEL |= BIT3+BIT6+BIT7; // 启用第二功能
PJSEL |= BIT4+BIT5; // 选择XT1
UCSCTL6 &= ~(XT1OFF); // 开XT1
UCSCTL6 |= XCAP_3; // 加载内部电容
UCSCTL3 = 0; // 选择FLLREFCLK=XT1CLK=32K 分频数1
// Loop until XT1 & DCO stabilizes - In this case loop until XT1 and DCo settle
do
{
UCSCTL7 &= ~(XT1LFOFFG + XT1HFOFFG + DCOFFG);
// Clear XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL6 &= ~(XT1DRIVE_3); // Xtal is now stable, reduce drive strength
UCSCTL4 |= SELA_0; // ACLK = LFTX1 默认设置
// Configure TA0
TA0CTL = TASSEL_1 + MC_2 + TACLR + TAIE; // TACLK=ACLK,持续增加模式,清除 TAR,开定时器A中断
__bis_SR_register(LPM3_bits + GIE); // 进入低功耗模式LMP03,允许总中断
__no_operation(); // For debugger
}
// Timer0_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))
{
case 0: break; // No interrupt
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 6: break; // reserved
case 8: break; // reserved
case 10: break; // reserved
case 12: break; // reserved
case 14: P3OUT ^= BIT1; // overflow
break;
default: break;
}
}
void Port_Mapping(void)
{
__disable_interrupt(); // 改变端口映射寄存器前关闭中断功能
PMAPPWD = 0x02D52; // 开启更改端口映射寄存器写权限
#ifdef PORT_MAP_RECFG
PMAPCTL = PMAPRECFG; // 运行时间内允许重新配置
#endif
P1MAP3 = PM_TD1OUTH; //将P1.3口映射为ACLK信号输出
P1MAP6 = PM_TD0_0SMCLK; //将P1.6口映射为SMCLK信号输出
P1MAP7 = PM_TD0CLKMCLK; //将P1.7口映射为MCLK信号输出
PMAPPWD = 0; // 关闭更改端口映射寄存器写权限
#ifdef PORT_MAP_EINT
__enable_interrupt(); // 改变端口映射寄存器后开启中断功能
#endif
}
大家帮看看 为什么在用定时器功能的时候,端口映射功能失灵了!
现在用示波器看P1.6 P1.7 都看不到输出了
