打印

MSP430G2开发板学习(六):IO外部中断 (转)

[复制链接]
1687|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3B1105|  楼主 | 2011-1-3 12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是学习外部中断的范例
/******************************************************************************
// MSP430F20xx Demo - Software Port Interrupt Service on P1.4 from LPM4
// 软件使能P1.4端口的中断服务
// Description: A hi/low transition on P1.4 will trigger P1_ISR which,
// toggles P1.0. Normal mode is LPM4 ~ 0.1uA. LPM4 current can be measured
// with the LED removed, all unused P1.x/P2.x configured as output or inputs
// pulled high or low, and ensure the P1.4 interrupt input does not float.
// ACLK = n/a, MCLK = SMCLK = default DCO
// 在P1.4端口上的高低电平转变会触发P1的中断服务程序,就翻转P1.0的状态。正常模式下是LP4_0.1UA。
* LED移走的时候LM4的电流可以测量。所有的没有用到的其他的P1和P2端口配置为输出或者配置为上拉/下拉输入,
* 检测P1.4的中断状态的时候P1.4不能为浮空状态。 ACLK = n/a, MCLK = SMCLK = default DCO
// MSP430F20xx
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// /|\ | |
// --o--|P1.4 P1.0|-->LED
// \|/
//
// M.Buccini / L. Westlund
// Texas Instruments, Inc
// October 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A
******************************************************************************/

#include // MSP430G2231头文件
//主函数
//
/***************************************************************************
* LPM4_bits:Low Power Modes coded with Bits 4-7 in STATUS REGISTER BITS
* IO外部中断学习
***************************************************************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗定时器
P1DIR |= 0x01; // 设置P1.0为输出方向
P1IE |= 0x10; // P1.4中断使能
P1IES |= 0x10; // P1.4设置为高低边沿中断
P1IFG &= ~0x10; // P1.4中断标志位清零

_BIS_SR(LPM4_bits + GIE); // 进入LPM4中断
while(1) // 等待中断
{
}
}

// 端口1的中断服务历程
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1OUT ^= 0x01; // P1.0 状态翻转
P1IFG &= ~0x10; // P1.4 中断标志清零
}

相关帖子

沙发
3B1105|  楼主 | 2011-1-3 12:26 | 只看该作者
MSP430G2开发板学习(七):定时器A的比较匹配模式

/******************************************************************************
// MSP430F20xx Demo - Timer_A, Toggle P1.0, CCR0 Cont. Mode ISR, DCO SMCLK
//
// Description: Toggle P1.0 using software and TA_0 ISR. Toggles every
// 50000 SMCLK cycles. SMCLK provides clock source for TACLK.
// During the TA_0 ISR, P1.0 is toggled and 50000 clock cycles are added to
// CCR0. TA_0 ISR is triggered every 50000 cycles. CPU is normally off and
// used only during TA_ISR.
// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO
//
// MSP430F20xx
// ---------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// M. Buccini / L. Westlund
// Texas Instruments Inc.
// October 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A
******************************************************************************/
/****************************************************************************
* 定时器A翻转P1.0LED,CCR0计数模式,中断服务程序。捕获比较模式
* 软件设置翻转P1.0端口的LED,翻转周期是50000个时钟周期,SMCLK(外设时钟) 为定时器A时钟(TACLK)提供时钟源 .
* 在定时器A的中断服务程序中,P1.0被翻转,5000个时钟周期被加在CCR0上。
* 定时器A的中断服务程序每50000次被触发一次,在定时器A中断服务程序中,CPU正常的时候是关闭的,只有定时器A在运行。
*****************************************************************************/

#include

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗
P1DIR |= 0x01; // P1.0 设置为输出方向
CCTL0 = CCIE; // CCR0 中断使能
CCR0 = 50000;
TACTL = TASSEL_2 + MC_2; // TA外设时钟计数模式

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt 进入LPM0中断模式
}

// 定时器中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; // P1.0翻转
CCR0 += 50000; // CCR0增加计数(根据实际这句话去掉也可以)
}

使用特权

评论回复
板凳
3B1105|  楼主 | 2011-1-3 12:26 | 只看该作者
MSP430G2开发板学习(八):定时器A的向上增长模式
//******************************************************************************
// MSP430F20xx Demo - Timer_A, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK
//
// Description: Toggle P1.0 using software and TA_0 ISR. Timer_A is
// configured for up mode, thus the timer overflows when TAR counts to CCR0.
// In this example CCR0 is loaded with 50000.
// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO
//
//
// MSP430F20xx
// ---------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// M. Buccini / L. Westlund
// Texas Instruments Inc.
// October 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A
//******************************************************************************
/******************************************************************************
* 定时器A翻转P1.0LED,向上计数模式。
* 在定时器A的中断服务程序中翻转LED的状态。定时器A配置为向上计数模式,因此当定时器计数到CCR0时定时器溢出。
******************************************************************************/
#include

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗
P1DIR |= 0x01; // P1.0 输出方向
CCTL0 = CCIE; // CCR0 中断使能
CCR0 = 50000;
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; // 翻转LED
}

使用特权

评论回复
地板
3B1105|  楼主 | 2011-1-3 12:28 | 只看该作者
MSP430G2开发板学习(九):定时器A溢出中断
/******************************************************************************
// 定时器A,翻转P1.0,中断服务程序溢出。
* 软件设置P1.0翻转,定时器A中断程序溢出。
* 当定时器A溢出的时候,定时器A的中断服务程序触发。在定时器A中断服务程序中,P1.0翻转。
* P1.0翻转频率是12HZ。
// Proper use of TAIV interrupt vector generator is demonstrated.
// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO
//
// MSP430F20xx
// ---------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// M. Buccini / L. Westlund
// Texas Instruments Inc.
// October 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A
******************************************************************************/

#include

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗
P1DIR |= 0x01; // P1.0 输出
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, 计数模式中断

_BIS_SR(LPM0_bits + GIE); // 进入 LPM0 w/ 中断
}

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )//Timer A Interrupt Vector Word 检查定时器A的中断矢量字
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P1OUT ^= 0x01; // 溢出的时候
break;
}
}

使用特权

评论回复
5
3B1105|  楼主 | 2011-1-3 12:29 | 只看该作者
MSP430G2开发板学习(十):定时器A溢出中断(32768KHZ时钟)
MSP430G2开发板学习(十):定时器A溢出中断(32768KHZ时钟)
/******************************************************************************
* 定时器A,翻转P1.0LED,定时器A溢出中断服务程序,32KHZ的辅助晶振
* 翻转P1.0的频率是0.5HZ,使用可TAICV中断向量。
* 辅助时钟是32768HZ,定时器A时钟也是32768HZ
// ACLK = TACLK = 32768Hz, MCLK = SMCLK = default DCO
******************************************************************************/

#include

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗
P1DIR |= 0x01; // P1.0 设置为输出
TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode, interrupt辅助时钟,计数模式,中断

_BIS_SR(LPM3_bits + GIE); // LPM3 w/ 中断
}

// Timer_A3 Interrupt Vector (TAIV) handler 检查TAIV
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P1OUT ^= 0x01; // 定时器溢出,翻转P1.0
break;
}
}

使用特权

评论回复
6
3B1105|  楼主 | 2011-1-3 12:30 | 只看该作者
MSP430G2开发板学习(十一):定时器A中断(向上增长,32768K晶振)
/******************************************************************************
* 定时器A翻转P1.0,CCR0向上增长模式,32KHZ的辅助时钟
* 定时器A配置为向上增长模式,CCR0=1000-1,翻转频率为32768/(2*1000)=16.384HZ
// ACLK = TACLK = 32768Hz, MCLK = SMCLK = DCO
******************************************************************************/

#include

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗
P1DIR |= 0x01; // P1.0 输出
CCTL0 = CCIE; // CCR0 中断使能
CCR0 = 1000-1;
TACTL = TASSEL_1 + MC_1; // ACLK,向上增长计数模式

_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
}

// Timer A0 中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; // 翻转P1.0
}

使用特权

评论回复
7
米其林r| | 2011-1-6 14:46 | 只看该作者
楼主的好资料挺多嘛,多谢啦

使用特权

评论回复
8
angle_every| | 2011-1-6 14:49 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

315

主题

1645

帖子

4

粉丝