打印

SPI2发送中断NVIC设置的奇怪问题

[复制链接]
1972|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ninazhou|  楼主 | 2013-5-30 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在原子战舰板(STM32F103ZET)调试时,对NVIC的SPI2发送中断设置出现了一个奇怪的问题,调试时NVIC->ISER[1]|=1<<(NVIC_Channel-32);这个语句过不去,暂停后发现程序进入到delay_us()中去了,但是其他的中断设置没有这个问题,如TIM2的溢出中断,可以正确的启动中断,没有异常。哪位高人能帮我分析下吗?谢谢了

程序如下(因为是SPI2中断,NVIC_Channel为36,进入到else语句就死掉了):
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)         
{
        u32 temp;       
        u8 IPRADDR=NVIC_Channel/4;  //
        u8 IPROFFSET=NVIC_Channel%4;//
        IPROFFSET=IPROFFSET*8+4;    //
        MY_NVIC_PriorityGroupConfig(NVIC_Group);//
        temp=NVIC_PreemptionPriority<<(4-NVIC_Group);          
        temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
        temp&=0xf;//

        if(NVIC_Channel<32)
        {
                NVIC->ISER[0]|=1<<NVIC_Channel;//
        }
        else
        {
                NVIC->ISER[1]|=1<<(NVIC_Channel-32);   
        }
        NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//                                                           
}
沙发
ninazhou|  楼主 | 2013-5-31 16:48 | 只看该作者
原来问题不在这段程序上,原因是使能中断(SPI2->CR2|=1<<7;)必须在NVIC设置之后,而我把这条语句放在NVIC设置之前了。可是之前看到战舰开发板的例程中,USART1的使能却可以在NVIC之前,所以在调试SPI2时想了下但没改,以为这样可以,唉,看来还是不能太盲从了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

32

帖子

0

粉丝