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.

在tm4c123gh6pm开发板中执行程序时会进入FaultISR(void)中断

Other Parts Discussed in Thread: TM4C123GH6PM

在tm4c123gh6pm开发板中执行到函数

void predator_init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOC))
{
}
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
GPIOPadConfigSet(GPIO_PORTC_BASE,GPIO_PIN_4 | GPIO_PIN_5,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD_WPU);

}

会进入启动文件的FaultISR(void)中断,是怎么回事,看了好多论坛都说可能是使用了未使能的外设,可是我还是程序刚开始运行初始化的时候就出现了这个错误,不知道怎么解决,程序配置检查了,没解决特来求助了,^_^

  • qianjin tang 说:

    在tm4c123gh6pm开发板中执行到函数

    void predator_init(void)
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    //添加一个不少于6个时钟周期在这里


    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOC))
    {
    }
    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
    GPIOPadConfigSet(GPIO_PORTC_BASE,GPIO_PIN_4 | GPIO_PIN_5,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD_WPU);

    }

    会进入启动文件的FaultISR(void)中断,是怎么回事,看了好多论坛都说可能是使用了未使能的外设,可是我还是程序刚开始运行初始化的时候就出现了这个错误,不知道怎么解决,程序配置检查了,没解决特来求助了,^_^

  • 我的程序运行的时候也出现了这个问题,QEI程序配置如下

    void
    QEI0IntHandler(void)
    {
    //QEI中断清零
    QEIIntClear(QEI0_BASE, QEI_INTTIMER);
    //计算转速
    SpeedFbk = (10000*QEIVelocityGet(QEI1_BASE)*60)/(100000*4096);
    //计算电机的旋转方向
    speedDirectionGet=QEIDirectionGet(QEI1_BASE);

    }

    void Init_QEI(void)

    {
    //指定对应的GPIO引脚为对应的QEP信号输入引脚
    GPIOPinConfigure(GPIO_PD6_PHA0);
    GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_6);
    GPIOPinConfigure(GPIO_PD7_PHB0);
    GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_7);
    GPIOPinConfigure(GPIO_PF4_IDX0);
    GPIOPinTypeQEI(GPIO_PORTF_BASE, GPIO_PIN_4);

    //配置QEI对应引脚输入电平及方式
    GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6,
    GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
    GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_7,
    GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4,
    GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);

    //配置QEI模块为AB两路正交编码信号双边沿捕获,索引脉冲不对位置进行复位,无相位交换,编码器为1024线
    QEIConfigure(QEI0_BASE,(QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET |
    QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 4095);

    //设置速度计算定时器时中频率为10KHz
    QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1, SysCtlClockGet()/5000);

    //使能速度计算,使能QEI
    QEIVelocityEnable(QEI0_BASE);
    QEIEnable(QEI0_BASE);


    //速度计时器计时完成时触发中断
    QEIIntEnable(QEI0_BASE,QEI_INTTIMER);

    IntEnable(INT_QEI0);

    }

    也是程序一debug运行就会进入FaultISR(void),然后按你说的我在QEI使能后面加SysCtlDelay(SysCtlClockGet()/5000)延时,结果还是不管用。

    当我把QEIIntEnable(QEI0_BASE,QEI_INTTIMER);注释掉后就不会进入FaultISR(void),这是什么原因呢?

  • 你把中断都注释掉了,肯定就不会出现中断错误啦。应该是你初始化部分出错了,参考官方例程看看。

  • 引脚已经设置为外设的备用功能了,因此不需要再配置引脚的输入电平及方式了,所以会进入错误中断