为什么进不去 else if(ulStatus == 1)里面

[复制链接]
 楼主| yszong 发表于 2016-10-26 22:36 | 显示全部楼层 |阅读模式

void
CANIntHandler(void)
{
    unsigned long ulStatus;
ulStatus = CANIntStatus(CAN0_BASE, CAN_INT_STS_CAUSE);
if(ulStatus == CAN_INT_INTID_STATUS)
    {
               ulStatus = CANStatusGet(CAN0_BASE, CAN_STS_CONTROL);
               g_bErrFlag = 1;
    }
        else if(ulStatus == 1)
    {
                CANIntClear(CAN0_BASE, 1);
                g_ulMsg1Count++;
                g_bErrFlag = 0;
    }     
else
    {
    }
}
午夜粪车 发表于 2016-10-26 22:38 | 显示全部楼层
程序是StellarisWare\examples\peripherals\can\somole_tx.c进行修改的。
 楼主| yszong 发表于 2016-10-26 22:41 | 显示全部楼层
管教配置的也对啊,中断也可以进啊。
wyjie 发表于 2016-10-26 22:42 | 显示全部楼层
调试时,注意ulStatu值得变化。另外,注意ulStatus定义的类型是否正确
 楼主| yszong 发表于 2016-10-26 22:44 | 显示全部楼层
永远都是0x8000,
jlyuan 发表于 2016-10-26 22:46 | 显示全部楼层
都是官方代码,就只改了管脚配置?
 楼主| yszong 发表于 2016-10-26 22:47 | 显示全部楼层

int
main(void)
{
    tCANMsgObject sCANMessage;
    unsigned char ucMsgData[4];

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);
    InitConsole();
   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    GPIOPinConfigure(GPIO_PA6_CAN0RX);
    GPIOPinConfigure(GPIO_PA7_CAN0TX);
    GPIOPinTypeCAN(GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
    CANInit(CAN0_BASE);
    CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 500000);
    CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
    IntEnable(INT_CAN0);
    CANEnable(CAN0_BASE);


    *(unsigned long *)ucMsgData = 0;
    sCANMessage.ulMsgID = 1;                        // CAN message ID - use 1
    sCANMessage.ulMsgIDMask = 0;                    // no mask needed for TX
    sCANMessage.ulFlags = MSG_OBJ_TX_INT_ENABLE;    // enable interrupt on TX
    sCANMessage.ulMsgLen = sizeof(ucMsgData);       // size of message is 4
    sCANMessage.pucMsgData = ucMsgData;             // ptr to message content

    for(;;)
    {

        UARTprintf("Sending msg: 0x%02X %02X %02X %02X",
                   ucMsgData[0], ucMsgData[1], ucMsgData[2], ucMsgData[3]);
        CANMessageSet(CAN0_BASE, 1, &sCANMessage, MSG_OBJ_TYPE_TX);
        SimpleDelay();
        if(g_bErrFlag)
        {
            UARTprintf(" error - cable connected?\n");
        }
        else
        {
            UARTprintf(" total count = %u\n", g_ulMsgCount);
        }
        (*(unsigned long *)ucMsgData)++;
    }

    //
    // Return no errors
    //
    return(0);
}



这个是主函数,只发,都是官方代码。
wuhany 发表于 2016-10-26 22:49 | 显示全部楼层
按道理正常时,程序会跑到 UARTprintf(" total count = %u\n", g_ulMsgCount);里面
 楼主| yszong 发表于 2016-10-26 22:51 | 显示全部楼层
我用的是9B96芯片,这个是CAN的原理图部分。
 楼主| yszong 发表于 2016-10-26 22:52 | 显示全部楼层
QQ图片20140411154437.jpg
liliang9554 发表于 2016-10-26 22:53 | 显示全部楼层
操作问题
huangchui 发表于 2016-10-26 22:55 | 显示全部楼层
直接用官方代码
 楼主| yszong 发表于 2016-10-26 22:57 | 显示全部楼层
唉,还是没有什么结果,算了,先结贴吧,多谢大家啦
Stannis 发表于 2016-10-29 21:36 | 显示全部楼层
注意ulStatus定义的类型是否正确
typeof 发表于 2016-10-30 21:13 | 显示全部楼层
没有执行这状态吧
typeof 发表于 2016-10-30 21:18 | 显示全部楼层
看看你的CAN中断写了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

830

主题

11379

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部