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

📄 main.c

📁 这是Pxa270下的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	'n'		//接收测试程序标志
#define SET_TEST	'y'		//通信参数设置测试程序标志


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 + -