⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 周立功MagicArm2410上的CAN驱动
💻 C
字号:
/*
****************************************Copyright (c)**************************************************
**                                  广州致远电子有限公司
**                                        CAN开发组 
**                                 http://www.zyinside.com
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: mian.c
**创   建   人: 滕欣欣
**创 建  日 期: 2006-03-03
**描        述: CAN驱动模块测试程序
**最后修改日期:
**原 始  版 本:v1.0
**--------------历史修改--------------------------------------------------------------------------------
**修   改   人:
**修 改  日 期:
**修 改  原 因:
**修 改  版 本:
********************************************************************************************************
*/
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/errno.h>        /* error codes */
#include "../SJA1000.h"

#define WRITE_TEST	'n'			//发送测试程序宏标
#define READ_TEST	'y'			//接收测试程序标志
#define SET_TEST	'n'			//通信参数设置测试程序标志


int main()
{
    int i,count,fd;
    //**********************
    stcSJA1000_BufInfo Buf;		
    Buf.FrID = 0x12345678;					//设置帧ID 0x12345678
    Buf.FrIf.Byte = 0;					
	Buf.FrIf.Bits.DLC = 8;					//设置帧数据长度为8字节
	Buf.FrIf.Bits.FF = 1;					//帧为扩展帧
	for(i=0; i<Buf.FrIf.Bits.DLC; i++)		//帧数据设定为0x00 0x11 0x22 0x33 0x44
	{										//0x55 0x66 0x77
		Buf.DA[i] = i<<4|i;
	}
	//************************
    system("sh autoload");					//加载autolaod文件
    fd = open("/dev/SJA1000_CAN", O_RDWR);	//打开CAN设备
    //**************************			//通信参数设置测试程序部分
    #if('y' == SET_TEST)
    	i = ioctl(fd, IOCTL_BAUD, BTR_500K);
    	if(i<0)
    	{
    		printf("BTR Set Err!.\n");
    	}
    	else
    	{
    		printf("BTR Set OK!.\n");
    	}
    #endif
    //***************************
    if(fd == -1)
    {
        printf("Can't open SJA1000 Device!\n");
        close(fd);
        exit(-1);
    }
    while(1)
    {
	#if('y' == READ_TEST)					//接收测试程序
    	count = read(fd,(void*)(&Buf), sizeof(Buf));
	    if(count < 0)
	    {
	    	printf("read err!.\n");
	    }
	    else
	    {
	    	printf("CAN Recive %d Bytes.\n", count);
	    	printf("CAN ID = 0x%08X.\n", Buf.FrID);
	    	printf("CAN FramID = 0x%08X.\n", Buf.FrIf.Byte);
	    	for(i=0; i<(Buf.FrIf.Bits.DLC); i++)
	    	{
	    		printf("CAN Data[0x%02X] = 0x%02X.\n",i,Buf.DA[i]);
	    	}
	    }
	    
    #elif('y' == WRITE_TEST)				//发送测试程序标志
    	printf("CAN Send Frame:\n");
    	printf("\tCAN ID = 0x%08X\n", Buf.FrID);
    	printf("\tCAN Info = 0x%08X\n", Buf.FrIf.Byte);
    	for(i=0; i<(Buf.FrIf.Bits.DLC); i++)
	    {
	    	printf("\tCAN Data[0x%02X] = 0x%02X.\n",i,Buf.DA[i]);
	    }
	    count = write(fd,(void*)(&Buf),sizeof(Buf));
    	sleep(2);
    	(unsigned long)i = (Buf.FrID&0xff000000)>>24;
    	Buf.FrID = ((Buf.FrID<<8)|i)&0x1fffffff;
    	
    #elif('y' == SET_TEST)				//通信参数设置测试程序
    	count = read(fd,(void*)(&Buf), sizeof(Buf));
	    if(count < 0)
	    {
	    	printf("read err!.\n");
	    }
	    else
	    {
	    	printf("CAN Recive %d Bytes.\n", count);
	    	printf("CAN ID = 0x%08X.\n", Buf.FrID);
	    	printf("CAN FramID = 0x%08X.\n", Buf.FrIf.Byte);
	    	for(i=0; i<(Buf.FrIf.Bits.DLC); i++)
	    	{
	    		printf("CAN Data[0x%02X] = 0x%02X.\n",i,Buf.DA[i]);
	    	}
	    }
    	
    #endif
	}
    close(fd);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -