This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
大家好、我不熟悉微控制器中的中断理念。
到目前为止、根据我从用户指南和参考手册中读取的内容、我已经确定应该配置 PxIES、PxIE、PxIFG 以及 GIE 位、以便允许程序内的中断。 我只是到了这一点、我不知道从这里走什么。 是否有人可以提供一些见解或向我指出我需要走的方向? 我听说我需要配置 NVIC? 或在创建项目时提供的 startup_msp432源文件。
如果有用、我将使用 MSP432P401R 以及教育版 BoosterPack MKII。
这里是我当前拥有的代码。
#include "msp.h"//特定于器件的 include 文件 #define S1 BIT1// S1连接到 P5.1 #define S2 BIT4连接到 P3.5 #define 蓝色 BIT6//蓝色 LED 连接到 P5.6 void main (void){ WDTCTL = WDTPW | WDTHOLD;//禁用看门狗定时器 //启用 S1 P5IES 上的下降沿中断|= S1; P5IE |= S1; P5IFG &=~S1;//清除标志以确保 S1上没有挂起的中断 //启用 S2 P3IES 上的下降沿中断|= S2; P3IE |= S2; P3IFG &=~S2;//清除标志以确保 S2 _enable_interrupts ()上没有挂起的中断;//设置 GIE 位以启用中断 }
您好、Calvin、
我很高兴能帮助您了解中断!
请打开 CCS。 转到顶部的"视图"选项卡。 打开 Resource Explorer。 在 Resource Explorer 的左侧导航至 Software->SimpleLink MSP432 SDK - v:1.20.00.45 -> Examples -> Development Tools -> MSP-EXP432P401R - Rev2.x (红色)-> Register Level -> msp432p401x_P1_03 -> CCS Compiler -> msp432p401x_P1_03。
您将在 Resource Explorer 窗口右上角看到黑色和白色的 Rubik 的立方体标识、其中显示"Import to IDE"。当您将鼠标悬停在该标识上时、单击该标识、项目将显示在您的 CCS 工作区中。
请查看此示例代码并运行它(我假设您有 MSP432 Launchpad、否则可以将必要的按钮/LED 连接到示例中使用的引脚)。
此示例还使用了 LPM3 (您可能不关心它)、但我认为该代码的基础非常适合演示中断的基础知识。
如果您在查看后对如何在自己的代码中实施该代码有任何疑问、请随时咨询。
尊敬的 John:
感谢你的答复。 但是、我有几个问题。
前两个、
1) 1)在第106-107行上、有一个被注释为将配置端口 J 的代码。端口 J 到底是什么? 这些是 BoosterPack 上名为 J1、J2、J3、J4的接头引脚吗?
//配置端口 J PJ->DIR |=(BIT0| BIT1 | BIT2 | BIT3); pj->out &=~(BIT0 | BIT1 | BIT2 | BIT3);
2) 2)在第92行、有一行代码在 NVIC 上启用端口1中断。 请解释使用的参数(例如"ISER[1]=1和"(PORT1_IRQn)& 31")。 如果我决定为中断使用不同的端口、我将如何修改代码?
//启用 NVIC 上的端口1中断 NVIC->ISER[1]= 1 <<(Port1_IRQn)& 31);
3) 3)我假设代码的这一部分涉及定义中断服务例程以及 CPU 在接收到 IRQ 后应该执行的操作。
/* Port1 ISR */ void Port1_IRQHandler (void) { volatile uint32_t i; //切换 LED 上的输出 if (P1->IFG 和 BIT1) P1->OUT ^= BIT0; //开关去抖延迟 对于(I = 0;I < 10000;I++) P1->IFG &=~BIT1; }
#pragma vector=port2_vector interrupt void P2Isr (){ P1OUT ^= RED;//切换红色 LED P2IFG &&~S1;//清除标志 }
我一直在读取用于定义中断服务例程的其他示例代码、上面的代码是其中之一的示例。
我只想知道该示例代码的第一行的作用是什么。 什么是"#pragma "以及在那里初始化的矢量是什么?
感谢你能抽出时间!
Calvin、
您可以在数据表 中阅读6-81、6-82、6-83描述了这些引脚的功能。 该代码旨在显示器件的低功耗模式、因此它会将未使用的引脚设置为输出、并为此将其设为零值。 实际上、我注释掉了第94-107行、代码仍然可以正常工作。
我不确定您在本示例中引用的#pragma 是什么?