打印

lm3s can总线问题,难道就没人帮组我么?

[复制链接]
1019|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主



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


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


程序是StellarisWare\examples\peripherals\can\somole_tx.c进行修改的。

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

谁能够教教我!?  

相关帖子

沙发
mmuuss586| | 2014-3-31 14:52 | 只看该作者
仿真的时候ulStatus的值是多少啊

使用特权

评论回复
板凳
dirtwillfly| | 2014-3-31 21:17 | 只看该作者
调试时,注意ulStatu值得变化。另外,注意ulStatus定义的类型是否正确

使用特权

评论回复
地板
s05812229|  楼主 | 2014-4-11 15:35 | 只看该作者
mmuuss586 发表于 2014-3-31 14:52
仿真的时候ulStatus的值是多少啊

永远都是0x8000,

使用特权

评论回复
5
s05812229|  楼主 | 2014-4-11 15:37 | 只看该作者
dirtwillfly 发表于 2014-3-31 21:17
调试时,注意ulStatu值得变化。另外,注意ulStatus定义的类型是否正确

都是官方代码,就只改了管脚配置。

使用特权

评论回复
6
s05812229|  楼主 | 2014-4-11 15:43 | 只看该作者
dirtwillfly 发表于 2014-3-31 21:17
调试时,注意ulStatu值得变化。另外,注意ulStatus定义的类型是否正确

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



这个是主函数,只发,都是官方代码。
按道理正常时,程序会跑到 UARTprintf(" total count = %u\n", g_ulMsgCount);里面






使用特权

评论回复
7
s05812229|  楼主 | 2014-4-11 15:46 | 只看该作者
dirtwillfly 发表于 2014-3-31 21:17
调试时,注意ulStatu值得变化。另外,注意ulStatus定义的类型是否正确

我用的是9B96芯片,这个是CAN的原理图部分。

QQ图片20140411154437.jpg (40.84 KB )

QQ图片20140411154437.jpg

使用特权

评论回复
8
s05812229|  楼主 | 2014-4-12 15:26 | 只看该作者
问题我已经解决,是操作问题,直接用官方代码是可以的额

使用特权

评论回复
9
dirtwillfly| | 2014-4-12 20:12 | 只看该作者
s05812229 发表于 2014-4-12 15:26
问题我已经解决,是操作问题,直接用官方代码是可以的额

:L

使用特权

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

本版积分规则

29

主题

91

帖子

0

粉丝