主题中讨论的其他器件:MSP430FR2433、 MSP430FR2355
工具/软件:Code Composer Studio
非常抱歉,我自己无法解决这些问题,我需要一些帮助。
我无法在 Launchpad 上获取中断。 我按照一些代码示例来配置中断、但没有结果。 我首先怀疑的是 CCS 配置。 我通过首先导入闪烁 LED 示例来构建项目。 在这里、我注意到提供的示例代码是针对 MSP430FR2433的、并且为此设置了目标。 假设 MSP430FR2355可以使用与 FR2433相同的 driverlib、我将目标重定向到 MSP430FR2355并重新编译。 没有影响。 MSP430FR2355的示例代码直接来自 TI 网站、也许我错误地假设所提供的配置是兼容的。 下面是工程属性的图像:
下面是我的密码(直接被盗、E.Chen 先生不会感到太羞耻)。 请注意以下可疑情况:
我包括 driverLib.h 而不是 MSP430.h
我已经对 PMM 进行了两种不同的配置、以确保它不会阻止引脚配置的设置。
代码非常简单。 让 Launchpad 电路板(P1.0)上的 LED 闪烁、并使用 P2.3按钮(带电阻器上拉)进行复位、以使闪烁的指示灯长时间处于不好的状态。 中断处理程序不应以这种方式使用、但对于测试试用、我认为它可能是可以的。
代码似乎加载正确、我可以更改闪烁速率计时。 但是、当我按下 P2.3按钮时、我无法使中断正常工作。 我检查了 PCB 的原理图、以确保按钮确实连接到 P2.3。 那么、在这一点上、我将会丢失。 我怀疑问题是某个地方的中断配置。 《具有 CCS 和 Grace 的 MSP430 LaunchPad》手册中包含的代码未配置其输入按钮的方向(这让我想知道它们是否能够使用默认值而没有电阻器上拉电阻器) (原理图显示开关为常开、按下时将 SW2拉至 GND。 OutOfBox_MSP430FR2433中的代码使用具有两个未评分的内在函数调用,而不是一个,因此__ENABLE_INTERRUPTS ()。 我尝试过这种方法,但它无法编译(只有单个下划线函数_enable_interrupts();已成功编译。 它不起作用、因此我决定尝试模板版本、假设它会调用正确的内在函数。 它可以编译但不起作用。 有人能告诉我内在函数的位置、以便我可以检查代码的合规性吗?
我们非常感谢您的任何帮助。 提前感谢您
Jim
/*-版权所有-、BSD *版权所有(c) 2017、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 *--/版权--*//********* //闪烁 LED 演示-软件切换 P1.0 // 说明;使用 DriverLib 在软件循环内切换 P1.0。 // ACLK = n/a、MCLK = SMCLK =默认 DCO // MSP4302433 // -------- // /|\| XIN|- // || | // -|RST XOUT|- // | | // | P1.0|->LED // E.Chen // Texas Instruments、Inc // 2017年10月 //使用 Code Composer Studio v7构建 // #include int main (void){ volatile uint32_t i; //停止看门狗计时器 WDT_A_HOLD (WDT_A_base); //将 P1.0设置为输出方向 GPIO_setAsOutputPin ( GPIO_PORT_P1、 GPIO_PIN0 ); //将 P2.3设置为中断输入(按钮) //P2DIR |= BIT3;//将 P2.3设置为输入 //P2REN |= BIT3;//打开 P2.3上拉电阻器 //P2IE |= BIT3;//启用 P2.3的中断 GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P2、 GPIO_PIN3); //P2IES &=~BIT3;//低电平到高电平的转换 P2IFG = 0x00;//清除所有中断标志 //_enable_interrupts ();//启用所有中断 GPIO_enableInterrupt (GPIO_PORT_P2、 GPIO_PIN3); //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 PMM_unlockLPM5 (); PM5CTL0 &=~LOCKLPM5; P2IFG = 0x00; while (1) { //切换 P1.0输出 GPIO_toggleOutputOnPin ( GPIO_PORT_P1、 GPIO_PIN0 ); //延迟 for (i=40000;i>0;i--); } } volatile uint32_t i; #pragma vector=port2_vector //定义中断矢量 __interrupt void port2_ISR (void){ P1OUT &=~BIT0; P2IFG = 0x00;//清除 中断标志 for (i=30000;i>0;i--); for (i=30000;i>0; i--); for (i=30000;i>0; i--); for (i=30000; i>0; i--); for (i=30000;i>0; i--); }