历史上的今天
返回首页

历史上的今天

今天是: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 这一条,现在最好给它加上。


推荐阅读

史海拾趣

埃派克森微电子(Apexone)公司的发展小趣事

2005年,埃派克森微电子发布了一系列USB鼠标控制器芯片,这些产品采用了公司独创的无晶振鼠标控制技术和对管免调技术。这些专利性的混合信号集成核心技术不仅为全球鼠标生产厂商提供了高性价比、简单方便的解决方案,还标志着埃派克森的专利技术全面进入商用时代。这一突破不仅提升了公司的市场地位,也为公司的后续发展注入了强大动力。

Harvatek Corporation公司的发展小趣事

背景:成立于1975年的Hantronix公司,自诞生之初便专注于为工业、医疗市场的多元化客户群提供LCD显示解决方案。在那个电子显示技术刚刚起步的年代,Hantronix凭借其前瞻性的市场洞察力和技术积累,迅速在行业中站稳脚跟。

发展:公司初期便明确了其产品定位,即专注于高品质、高性能的LCD显示产品,以满足工业控制和医疗设备对显示精度、稳定性和耐用性的严苛要求。通过不断的技术研发和产品优化,Hantronix逐渐在市场中建立了良好的口碑。

Eurotech公司的发展小趣事

随着全球对环保问题的日益关注,Eurofarad公司也积极响应这一趋势。公司注重环保理念在产品设计和生产过程中的应用,努力减少对环境的影响。同时,公司还积极推动可持续发展战略,通过优化生产流程和采用环保材料等方式,降低能源消耗和废弃物排放。这些努力不仅符合了社会的期望,也为公司的长期发展提供了有力保障。

Gumstix公司的发展小趣事
检查电路连接是否松动或断裂,重新连接或更换损坏的部件。
APX Technologies公司的发展小趣事

随着电子行业的快速发展,技术更新换代的速度越来越快。APX Technologies面临着来自同行的激烈竞争和不断变化的市场需求。为了应对这些挑战,公司不断调整战略方向,加大研发投入,优化产品结构。在稳中求进的过程中,APX Technologies逐渐巩固了自己的市场地位。

Galaxy Semi-Conductor Co Ltd公司的发展小趣事

作为国内专业从事半导体分立器件的高新技术企业,飞虹电子科技一直致力于一线电子产品的生产、研发和销售。在第84届中国电子展上,飞虹电子展示了其新近研发的场效应管元器件和音响对管元器件,这些产品在家电制造领域有着广泛应用。飞虹电子通过引进国际前沿科技,结合市场需求进行战略性部署,不断提升产品科技含量,成为国内电子元器件行业的佼佼者。

问答坊 | AI 解惑

几个硬件设计经验

鸡毛蒜皮之一:成本节约 现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K吧 点评:市场上不存在5K的阻值,最接近的是4.99K(精度1%),其次是5.1K(精度5%),其 成本分别比精度为20%的4.7K高4倍和2倍。20%精度的电阻阻值只有1 ...…

查看全部问答>

AVR AD转换程序

刚学AVR,下载的好多程序总是编译错误不能用。这个AD转换程序是我自己修改正确的。共享给像我一样刚学 AVR的朋友。绝对正确。任何问题请联系:132 6515 5485。联系请在晚上19:00以后。邮箱:h32446975@126.com 也同时希望交些使用AVR的朋友。  ...…

查看全部问答>

求职英语(一):个人品质英语词汇大全

个人品质有用词汇able 有才干的,能干的 active 主动的,活跃的 adaptable 适应性强的 adroit 灵巧的,机敏的 aggressive 有进取心的 alert 机灵的 ambitious 有雄心壮志的 amiable 和蔼可亲的 amicable 友好的 analytical 善于分析的 ap ...…

查看全部问答>

viewdraw的库怎么加啊

想用viewdraw画电路导出网表作hspice住真,但是没有viewdraw的库  哪位大大给个库啊 谢谢了 fab100@163.com…

查看全部问答>

6401两通道LDO参数及其应用

台湾AnSC最新推出两通道LDO  AP6401系列, AP6401系列的高精确度,双,低噪声,低压差稳压器的CMOS与启用功能.在EN功能允许输出的每一稳压必须关闭独立,导致 大大降低了能耗.该AP6401系列的软启动功能,以抑制浪涌电流.该电流限制器\'倍 ...…

查看全部问答>

如何确定器件参数

我做的是一个单片开关电源,如图所示。U1用的是NCP1000,我要VO输出12V、100mA. 该如何设计变压器T2的参数,反馈绕组电压电流该确定为多少? 望高手指教…

查看全部问答>

C语言降龙十八掌——第三掌 写对strcpy,你也可以进微软

好吧,我承认我在玩标题党。我没有去微软面试过,标题里面的微软,指的是同学们心向往之而不得的大公司。 这是我在职业生涯刚刚起步时,去某业内非常知名的,无数学子向往的一个大公司面试的时候被问到的一个问题。 当时回答得也不全面,回来思考 ...…

查看全部问答>

芯片的DATASHEET主要有些什么内容

芯片的DATASHEET主要有些什么内容…

查看全部问答>

如何精确线程循环周期

有个线程 while(1) {     f1();     Sleep(100); } 本来初衷是使这个线程每100毫秒循环一次,但是由于Sleep函数的不精确,以及f1()的执行时间不确定,因此,次线程循环周期总是不能精确到100毫秒,有没有什么方法能使此线 ...…

查看全部问答>

MC-1000中,如何对背光进行控制

在开发MC-1000中,想在程序一开启就把背光灯打开,用什么函数来控制打开背光呢,各位老大,请赐教。在线等。。。急。我用的时evc4.0开发平台。…

查看全部问答>