搜索
bottom↓
回复: 0

LM3S9B96的CAN报文发送?

[复制链接]

出0入0汤圆

发表于 2013-3-1 21:41:50 | 显示全部楼层 |阅读模式
//*****************************************************************************
// CAN中断服务函数
//*****************************************************************************
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)//表示具有高优先级编号1的报文对象正在挂起一个中断
    {
        CANIntClear(CAN0_BASE, 1);//清楚报文对象中断
        g_ulMsgCount++;//中断次数递增
        g_bErrFlag = 0;//清除错误标记
    }

    // Otherwise, something unexpected caused the interrupt.  This should
    // never happen.
    else
    {
        // Spurious interrupt handling can go here.
    }
}

//*****************************************************************************
// 主函数.
//*****************************************************************************
int
main(void)
{
    tCANMsgObject sCANMessage; //定义一个tCANMsgObject类型的参数用于配置报文对象
    unsigned char ucMsgData[4]={0,1,2,3};

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);//时钟设置

    InitConsole();//UART显示函数

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);//使能GPIOD系统外设

    GPIOPinConfigure(GPIO_PD0_CAN0RX);
    GPIOPinConfigure(GPIO_PD1_CAN0TX);

    GPIOPinTypeCAN(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);//使能CAN0控制器系统外设

    CANInit(CAN0_BASE);//CAN控制器初始化
   
    CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 500000);//设置波特率

    CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);//使能单独的CAN控制器中断源

    IntEnable(INT_CAN0); //使能CAN控制器中断(to CPU)

    CANEnable(CAN0_BASE);//使能CAN控制器
   
    // Initialize the message object that will be used for sending CAN messages.  
    sCANMessage.ulMsgID = 0x123;                        // 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

    // Enter loop to send messages.  A new message will be sent once per 5
    // seconds.  The 4 bytes of message content will be treated as an unsigned
    // long and incremented by one each time.
    for(;;)
    {
        // Print a message to the console showing the message count and the
        // contents of the message being sent.
        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);//配置CAN控制器的一个报文对象
        
        SimpleDelay();// 1秒延时
        
        if(g_bErrFlag) // 检查错误标记,查看是否有错误发生
        {
            UARTprintf(" error - cable connected?\n");
        }


        else
        {
            // 如果没有错误,则显示发送的报文数目
            UARTprintf(" total count = %u\n", g_ulMsgCount);
        }

    }

}
我将LM9B96的CANH、CANL、GND分别与CANUSB的CANH、CANL、GND相连,CAN测试软件没有显示。
通过UART显示如下信息:

不知道程序是不是有问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 18:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表