历史上的今天
今天是:2025年01月12日(星期日)
2021年01月12日 | MSP430F5529使用库函数后如何编写中断函数
2021-01-12 来源:eefocus
代码
#include "driverlib.h"
void main (void)
{
//Stop watchdog timer
WDT_A_hold(WDT_A_BASE);
//Set P1.0 to output direction
GPIO_setAsOutputPin(
GPIO_PORT_P1,
GPIO_PIN0
);
//Enable P1.4 internal resistance as pull-Up resistance
GPIO_setAsInputPinWithPullUpResistor(
GPIO_PORT_P1,
GPIO_PIN4
);
//P1.4 interrupt enabled
GPIO_enableInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
//P1.4 Hi/Lo edge
GPIO_selectInterruptEdge(
GPIO_PORT_P1,
GPIO_PIN4,
GPIO_HIGH_TO_LOW_TRANSITION
);
//P1.4 IFG cleared
GPIO_clearInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
//Enter LPM4 w/interrupt
__bis_SR_register(LPM4_bits + GIE);
//For debugger
__no_operation();
}
//******************************************************************************
//
//This is the PORT1_VECTOR interrupt vector service routine
//
//******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT1_VECTOR)))
#endif
void Port_1 (void)
{
//P1.0 = toggle
GPIO_toggleOutputOnPin(
GPIO_PORT_P1,
GPIO_PIN0
);
//P1.4 IFG cleared
GPIO_clearInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
}
解释
如上,中断函数仍然使用
#pragma vector=PORT1_VECTOR
void Port_1 (void)
{
//P1.0 = toggle
GPIO_toggleOutputOnPin(
GPIO_PORT_P1,
GPIO_PIN0
);
//P1.4 IFG cleared
GPIO_clearInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
}
即预处理加上函数定义,但是和寄存器方式编程时的格式有所不同,寄存器方式的中断函数如下
#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void)
{
}
可以看出,使用寄存器进行编程,中断函数要多一个 __interrupt
备注
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT1_VECTOR)))
#endif
这么多的宏定义我目前不知道是干嘛用的,以前是没有这么多的,只有 #pragma vector=PORT1_VECTOR 这一条,现在最好给它加上。
史海拾趣
|
刚学AVR,下载的好多程序总是编译错误不能用。这个AD转换程序是我自己修改正确的。共享给像我一样刚学 AVR的朋友。绝对正确。任何问题请联系:132 6515 5485。联系请在晚上19:00以后。邮箱:h32446975@126.com 也同时希望交些使用AVR的朋友。  ...… 查看全部问答> |
|
个人品质有用词汇able 有才干的,能干的 active 主动的,活跃的 adaptable 适应性强的 adroit 灵巧的,机敏的 aggressive 有进取心的 alert 机灵的 ambitious 有雄心壮志的 amiable 和蔼可亲的 amicable 友好的 analytical 善于分析的 ap ...… 查看全部问答> |
|
台湾AnSC最新推出两通道LDO AP6401系列, AP6401系列的高精确度,双,低噪声,低压差稳压器的CMOS与启用功能.在EN功能允许输出的每一稳压必须关闭独立,导致 大大降低了能耗.该AP6401系列的软启动功能,以抑制浪涌电流.该电流限制器\'倍 ...… 查看全部问答> |
|
C语言降龙十八掌——第三掌 写对strcpy,你也可以进微软 好吧,我承认我在玩标题党。我没有去微软面试过,标题里面的微软,指的是同学们心向往之而不得的大公司。 这是我在职业生涯刚刚起步时,去某业内非常知名的,无数学子向往的一个大公司面试的时候被问到的一个问题。 当时回答得也不全面,回来思考 ...… 查看全部问答> |
|
有个线程 while(1) { f1(); Sleep(100); } 本来初衷是使这个线程每100毫秒循环一次,但是由于Sleep函数的不精确,以及f1()的执行时间不确定,因此,次线程循环周期总是不能精确到100毫秒,有没有什么方法能使此线 ...… 查看全部问答> |
|
在开发MC-1000中,想在程序一开启就把背光灯打开,用什么函数来控制打开背光呢,各位老大,请赐教。在线等。。。急。我用的时evc4.0开发平台。… 查看全部问答> |




