打印

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

[复制链接]
620|13
手机看帖
扫描二维码
随时随地手机跟帖
沙发
yszong|  楼主 | 2019-1-24 10:59 | 只看该作者

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
    {
    }
}

使用特权

评论回复
板凳
午夜粪车| | 2019-1-24 11:03 | 只看该作者
程序是StellarisWare\examples\peripherals\can\somole_tx.c进行修改的。

使用特权

评论回复
地板
yszong|  楼主 | 2019-1-24 11:07 | 只看该作者

管教配置的也对啊,中断也可以进啊。

使用特权

评论回复
5
wyjie| | 2019-1-24 11:09 | 只看该作者
调试时,注意ulStatu值得变化。另外,注意ulStatus定义的类型是否正确

使用特权

评论回复
6
yszong|  楼主 | 2019-1-24 11:13 | 只看该作者

永远都是0x8000,

使用特权

评论回复
7
jlyuan| | 2019-1-24 11:16 | 只看该作者
都是官方代码,就只改了管脚配置?

使用特权

评论回复
8
yszong|  楼主 | 2019-1-24 11:18 | 只看该作者

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);
}



这个是主函数,只发,都是官方代码。

使用特权

评论回复
9
wuhany| | 2019-1-24 11:22 | 只看该作者
按道理正常时,程序会跑到 UARTprintf(" total count = %u\n", g_ulMsgCount);里面

使用特权

评论回复
10
yszong|  楼主 | 2019-1-24 11:24 | 只看该作者
我用的是9B96芯片,这个是CAN的原理图部分。

使用特权

评论回复
11
liliang9554| | 2019-1-24 11:27 | 只看该作者
操作问题

使用特权

评论回复
12
huangchui| | 2019-1-24 11:31 | 只看该作者
直接用官方代码

使用特权

评论回复
13
huangchui| | 2019-1-24 11:33 | 只看该作者

注意ulStatus定义的类型是否正确

使用特权

评论回复
14
shimx| | 2019-1-24 11:36 | 只看该作者
没有执行这状态吧
看看你的CAN中断写了吗

使用特权

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

本版积分规则

830

主题

11379

帖子

4

粉丝