打印

关于在IAR环境下使用MSP的中断(转)

[复制链接]
1510|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
思行合一|  楼主 | 2011-1-3 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前段时间一直用CCS,但是机器太差(06 年的笔记本),启动一次CCS的调试需要近2分钟。。。。。:funk:   于是换IAR5.10,速度确实提升不少。。。。。





今天使用IAR新建的工程调试MSP430的IO中断程序。整个中断程序如下:





//#include "msp430.h"
//#include "io430.h"

#include "io430G2211.h"
#include "in430.h"


void delay()
{
  int i;
  for(i=0;i<6553;i++);
  for(i=0;i<6553;i++);
}
void blink(void)
{
           P2OUT = 0x00;
           delay();
      P2OUT = 0xFF;
           delay();
}
int main( void )
{
  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;
  P2SEL = 0x00;                        // P1.0 = TACLK input, P1.7 = CAOUT
  P2DIR = 0xc0;   
  P2OUT = 0x00;
  
  
  P1DIR = 0x00;
  P1SEL = 0x00;
  P1REN = 0x08;
  P1OUT = 0x08;
  
  P1IE  = 0xff;   //interrupt enable
  P1IES = 0xff;   //set the high to low interrupt the P1.3
  P1IFG=0;//CLEAR INTERRUPT AT P1.3
  _BIS_SR(LPM0_bits+GIE);
  


  //GIE = aa;;
while(1);
}


#pragma vector=PORT1_VECTOR
__interrupt void P1VECTOR(void)
{
  //if(P1IFG&0x08!=0)
// {
unsigned j=0;
while(j<30)
{
    blink();
    j++;
}
P1IFG=0;//CLEAR INTERRUPT AT P1.3
}



简单说来,该程序使用P1.3作为IO中断输入,当有按键触发中断时跳入到中断处理函数中,使LED灯闪烁30次。。。。



P1IE  = 0xff;   //interrupt enable
  P1IES = 0xff;   //set the high to low interrupt the P1.3
  P1IFG=0;//CLEAR INTERRUPT AT P1.3
  _BIS_SR(LPM0_bits+GIE);   //open interrupt flag in SR reg.


最关键的也就是这4句话,前面三句表示的是打开对应的IO中断,最后一句是置SR寄存器中的GIE位,打开430的中断总开关。



也就是这句话出问题了,IAR弹出错误:



Error[e46]: Undefined external "_BIS_SR" referred in main ( F:\temp\iarbegin\Debug\Obj\main.r43 )



也就是说_BIS_SR没有定义。。。但是很多官方的例子里面都是使用_BIS_SR的啊!问题出在哪呢??看到工程上部的4个头文件





//#include "msp430.h"
//#include "io430.h"
#include "io430G2211.h"
#include "in430.h"



IAR新建工程时,默认使用的头文件是IO430.h,当我们把这个头文件换成msp430.h上述错误就消失了,中断正常响应。。。

于是我们继续查找这两个头文件的不同,发现msp430.h中会包含IN430.H头文件,而IO430.H中没有包含IN430.H这个文件。打开IN430.H,哈哈,我们要找的东西全在里面,除了刚才说的_BIS_SR外,我们还可以使用_EINT()  等CCS中常用的函数了。。




#ifndef __IN430_H
#define __IN430_H


#ifndef _SYSTEM_BUILD
  #pragma system_include
#endif


#include "intrinsics.h"

#pragma language=save
#pragma language=extended



/*
* Deprecated intrinsic functions.
*/

#ifdef __cplusplus
extern "C"
{
#endif

  /* Deprecated, please use "__bis_SR_register" instead. (If the
   * return value of this intrinsic is used, you can also use
   * "__get_SR_register".) */
  __intrinsic unsigned short _BIS_SR(unsigned short);

  /* Deprecated, please use "__bic_SR_register" instead. (If the
   * return value of this intrinsic is used, you can also use
   * "__get_SR_register".) */
  __intrinsic unsigned short _BIC_SR(unsigned short);

  /* Deprecated, please use "__bis_SR_register_on_exit" instead. (If
   * the return value of this intrinsic is used, you can also use
   * "__get_SR_register".) */
  __intrinsic unsigned short _BIS_SR_IRQ(unsigned short);

  /* Deprecated, please use "__bic_SR_register_on_exit" instead. (If
   * the return value of this intrinsic is used, you can also use
   * "__get_SR_register".) */
  __intrinsic unsigned short _BIC_SR_IRQ(unsigned short);

  /* Deprecated, please use the #pragma directive "bis_nmi_ie1"
   * instead. */
  __intrinsic unsigned short _BIS_NMI_IE1(unsigned short);

#ifdef __cplusplus
}
#endif


/*
* Convenience macros mapping old names to new.
*/

/* Deprecated, please use "__disable_interrupt" instead. */
#define _DINT()        __disable_interrupt()

/* Deprecated, please use "__enable_interrupt" instead. */
#define _EINT()        __enable_interrupt()

/* Deprecated, please use "__no_operation" instead. */
#define _NOP()         __no_operation()

/* Deprecated, please use "__op_code" instead. */
#define _OPC(x)        __op_code(x)

/* Deprecated, please use "__swap_bytes" instead. */
#define _SWAP_BYTES(x) __swap_bytes(x)


/* Deprecated, please use the keyword "__monitor" instead. */
#define monitor        __monitor

/* Deprecated, please use the keyword "__no_init" instead. */
#define no_init        __no_init

#pragma language=restore

#endif /* __IN430_H */

相关帖子

沙发
bit6019| | 2011-1-6 14:43 | 只看该作者
我用iar就用一个芯片的头文件,楼主怎么写这么多呀

使用特权

评论回复
板凳
思行合一|  楼主 | 2011-1-7 12:10 | 只看该作者
楼主修改了IAR的icf文件了吧?

使用特权

评论回复
地板
黑发尤物| | 2011-1-7 22:03 | 只看该作者
每个人写出来的程序看着是不是都不一样啊

使用特权

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

本版积分规则

215

主题

1391

帖子

2

粉丝