void interrupt_init(void) { P6->IES&=~(BIT6+BIT7);//interrupt on low-to-high edge P6->IFG=0x00; P6->IE|=(BIT6+BIT7);//enable interrupt on P6.6,P6.7 //enable port 6 interrupt on the NVIC NVIC->ISER[1]=1<<((PORT6_IRQn)&31); NVIC->ISER[0]|=0xFF; PCM->CTL1=PCM_CTL1_KEY_VAL|PCM_CTL1_FORCE_LPM_ENTRY; }请帮我看这段msp432的代码有什么问题
时间: 2024-04-08 07:33:44 浏览: 103
MB_Interrupt.zip_MB_Interrupt_Spartan-6_microblaze 中断_microblaze
根据您提供的代码,我看到以下几个问题:
1. 在中断初始化函数中,缺少对端口6的时钟使能操作。在使用端口6之前,需要先使能相应的时钟。可以添加以下代码来使能端口6的时钟:
```c
P6->SEL0 &= ~(BIT6 + BIT7); // 设置为通用输入输出模式
P6->SEL1 &= ~(BIT6 + BIT7); // 设置为通用输入输出模式
P6->DIR &= ~(BIT6 + BIT7); // 设置为输入模式
P6->REN |= (BIT6 + BIT7); // 使能内部上下拉电阻
P6->OUT |= (BIT6 + BIT7); // 上拉电阻
```
2. 中断初始化函数中,没有配置中断触发方式。根据您的注释,您希望在低电平到高电平的边沿触发中断。可以添加以下代码来配置中断触发方式:
```c
P6->IES &= ~(BIT6 + BIT7); // 设置为低电平到高电平触发
```
3. NVIC的中断使能寄存器(ISER)和端口6中断号的配置似乎不正确。根据您的代码,可能是想要使能P6的中断,但配置的是NVIC全局中断使能寄存器(ISER)的第0和第1字节。应该将以下代码:
```c
NVIC->ISER[1] = 1 << ((PORT6_IRQn) & 31);
NVIC->ISER[0] |= 0xFF;
```
更正为:
```c
NVIC->ISER[0] |= 1 << ((PORT6_IRQn) & 31);
```
以上是我在代码中发现的问题,希望能对您有所帮助。请注意仔细检查和测试代码,以确保它符合您的预期行为。
阅读全文