找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2768|回复: 1
打印 上一主题 下一主题
收起左侧

新人求助,msp432p401r 在中断后无法返回主程序

[复制链接]
跳转到指定楼层
楼主
ID:405280 发表于 2018-10-4 12:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各个test值是用来看程序运行到那一步,发现中断后没有回到delaySec,因为setYellow = 1之后应该进入delaySec中的if条件并且把test4的值改成1,可是在这一步就卡死了,test4的值叶没有变


#include <stdint.h>
#include "..\inc\msp432p401r.h"

#define RED    0x01;
#define GREEN  0x02;
#define YELLOW 0x03;



// global variable visible in Watch window of debugger
// increments at least once per button press
volatile uint32_t FallingEdges = 0;
uint8_t isRed = 0;
uint8_t isGreen =0;
uint8_t isYellow =0;
uint8_t setYellow =0;
uint8_t setGreen =0;
int test1 = 0, test2=0, test3=0, test4 = 0, test5 =0, test6 = 0;

void EdgeCounter_Init(void){
        __ASM("CPSID I");
       
  FallingEdges = 0;                // initialize counter

  P1SEL0 &= ~0x12;
  P1SEL1 &= ~0x12;                 // configure P1.4 and P1.1 as GPIO
  P1DIR &= ~0x12;                  // make P1.4 and P1.1 in (built-in Button 1 and Button 2)
  P1REN |= 0x12;                   // enable pull resistors on P1.4 and P1.1
  P1OUT |= 0x12;                   // P1.4 and P1.1 are pull-up
  P1IES |= 0x12;                   // P1.4 and P1.1 are falling edge event
  P1IFG &= ~0x12;                  // clear flag4 and flag1 (reduce possibility of extra interrupt)
  P1IE |= 0x12;                    // arm interrupt on P1.4 and P1.1

  NVIC_IPR8 = (NVIC_IPR8&0x00FFFFFF)|0x40000000; // priority 2
  NVIC_ISER1 = 0x00000008;         // enable interrupt 35 in NVIC
  __ASM("CPSIE I");//EnableInterrupts();              // clear the I bit
}

void delay(void){
   uint32_t i,j,k;
         for(i=6000;i>0;i--){
                        for(j = 100; j>0; j--)
                             k = 5;
         }
}
void delaySec(uint8_t i){
  uint8_t j;
        for(j = i; j> 0; j--){
                test6 += 1;
                if(setYellow == 1){
                        test4 = 1;
                        return;
                  test5 = 1;}
                else
                delay();
        }
}

void redLight(void){
        isRed = 1;
        isGreen = 0;
        isYellow = 0;
}

void greenLight(void){
        isRed = 0;
        isGreen = 1;
        isYellow = 0;
}

void yellowLight(void){
        isRed = 0;
        isGreen = 0;
        isYellow = 1;
}

void PORT1_IRQHandler(void){
       
        if((P1IFG & 0x02)!= 0){
          if(isGreen == 1){
                P2OUT &= 0;      //clear P2OUT
                setYellow = 1;
                }}
  }


int main(void){

  EdgeCounter_Init();              // initialize P1.4 and P1.1 interrupts
  // initialize P1.0 and make it output (P1.0 built-in LED1)
  P1SEL0 &= ~0x01;
  P1SEL1 &= ~0x01;                 // configure built-in LED1 as GPIO
  P1DIR |= 0x01;                   // make built-in LED1 out
  P1OUT &= ~0x01;                  // LED1 = off
  // initialize P2.2-P2.0 and make them outputs (P2.2-P2.0 built-in RGB LEDs)
  P2SEL0 &= ~0x07;
  P2SEL1 &= ~0x07;                 // configure built-in RGB LEDs as GPIO
  P2DS |= 0x07;                    // make built-in RGB LEDs high drive strength
  P2DIR |= 0x07;                   // make built-in RGB LEDs out
  P2OUT &= ~0x07;                  // RGB = off

  while(1){
               
        start:                         P2OUT ^= GREEN;
                                         greenLight();
                                         delaySec(10);
                                         test1 = 1;
                                         if(setYellow == 1){
                                           test2 = 1;
                                                 goto yellow;
                                                 test3 = 1;
                                         }
                                         P2OUT &= 0;
        yellow:                                 P2OUT ^= YELLOW;
                                         setYellow = 0;
                                         yellowLight();
                                         delaySec(5);
                                         P2OUT &= 0;
        red:                                 P2OUT ^= RED;
                                         redLight();
                                         delaySec(5);
                                         P2OUT &= 0;
                                           goto start;
               
                                               
                                       
       
               
               
                //__ASM("WFI");                                               
        }


}       





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:634191 发表于 2021-7-1 12:39 | 只看该作者
hxd,现在解决了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表