您现在的位置: 主页 > MCU > 单片机技术应用 > MSP430F5438学习笔记 TA1溢出中断加比较匹配中断 -
本文所属标签:
为本文创立个标签吧:

MSP430F5438学习笔记 TA1溢出中断加比较匹配中断 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]// 时钟默认情况 // FLL时钟 FLL选择 XT1 // 辅助时钟 ACLK选择 XT1 32768Hz // 主系统时钟 MCLK选择 DCOCLKDIV 8000000Hz // 子系统时钟 SMCLK选择 DCOCLKDIV 8000000Hz // TA1选择ACLK,最大计数值为6

// 时钟默认情况

本文引用地址: http://www.21ic.com/app/mcu/201807/781749.htm

// FLL时钟 FLL选择 XT1

// 辅助时钟 ACLK选择 XT1 32768Hz

// 主系统时钟 MCLK选择 DCOCLKDIV 8000000Hz

// 子系统时钟 SMCLK选择 DCOCLKDIV 8000000Hz

// TA1选择ACLK,最大计数值为65535

// 比较匹配值为 32768

// 在TIMER1_A0_VECTOR中 CCR0中断 P4.0 = 0

// 在TIMER1_A1_VECTOR中 OVF中断 P4.0 = 1

// 实际效果 P4.0 1s为高电平,1s为低电平,交替进行

#include

#include

void clock_config(void);

void select_xt1(void);

void dco_config(void);

int main(void)

{

clock_config(); // 初始化时钟

P4DIR |= BIT0; // P4.0输出

TA1CCTL0 = CCIE; // 使能TA1CCR0,比较匹配中断

TA1CCR0 = 16384; // 初始化比较匹配值

TA1CTL = TASSEL_1 + MC_2 + TACLR + TAIE; // 选择ACLK,最大值为65535,清除计数值

_EINT(); // 初始化全局中断

while(1)

{

;

}

}

void clock_config(void)

{

WDTCTL = WDTPW + WDTHOLD; // 停止看门狗

select_xt1(); // 选择XT1

dco_config(); // ACLK = XT1 = 32.768K

// MCLK = SMCLK = 8000K

}

void select_xt1(void)

{

// 启动XT1

P7SEL |= 0x03; // P7.0 P7.1 外设功能

UCSCTL6 &= ~(XT1OFF); // XT1打开

UCSCTL6 |= XCAP_3; // 内部电容

do

{

UCSCTL7 &= ~XT1LFOFFG; // 清楚XT1错误标记

}while (UCSCTL7&XT1LFOFFG); // 检测XT1错误标记

}

void dco_config(void)

{

__bis_SR_register(SCG0); // 禁止FLL功能

UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx

UCSCTL1 = DCORSEL_5; // DCO最大频率为16MHz

UCSCTL2 = FLLD_1 + 243; // 设置DCO频率为8MHz

// MCLK = SMCLK= Fdcoclkdiv = (N+1)X(Ffllrefclk/n)

// N为唯一需要计算的值

// Ffllrefclk FLL参考时钟,默认为XT1

// n取默认值,此时为1

// (243 + 1) * 32768 = 8MHz

__bic_SR_register(SCG0); // 使能FLL功能

// 必要延时

__delay_cycles(250000);

// 清楚错误标志位

do

{

UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);

// 清除所有振荡器错误标志位

SFRIFG1 &= ~OFIFG; // 清除振荡器错误

}while (SFRIFG1&OFIFG); // 等待清楚完成

}

#pragma vector=TIMER1_A0_VECTOR

__interrupt void TIMER1_A0_ISR(void)

{

P4OUT &= ~BIT0;

}

#pragma vector=TIMER1_A1_VECTOR

__interrupt void TIMER1_A1_ISR(void)

{

switch(__even_in_range(TA1IV,14))

{

case 0: break; // No interrupt

case 2: break; // CCR1中断

case 4: break; // CCR2中断

case 6: break; // reserved

case 8: break; // reserved

case 10: break; // reserved

case 12: break; // reserved

case 14: // 溢出中断

P4OUT |= BIT0;

break;

default: break;

}

}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > MSP430F5438学习笔记 TA1溢出中断加比较匹配中断 -
 

"MSP430F5438学习笔记 TA1溢出中断加比较匹配中断 -"的相关文章

网站地图

围观()