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

📄 main.c

📁 ep9315平台下can总线驱动的源码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                     研    发    部
**                              http://www.FFTChina.com
**-----------------------------------------文件信息-----------------------------------------------------
**文   件   名: cantest.c
**创   建   人: 
**最后修改日期: 2005年6月30日
**描        述: CAN模块测试程序
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "stdio.h"
#include "stdlib.h"

#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"

#define  Senddatnum  6            //宏定义要发送的数据个数,确定发送的DLC值
#define  CAN0ID  0x100            //CAN0的ID值
#define  CAN1ID  0x200            //CAN1的ID值
#define  RTR     0                //RTR数据位,1的话为远程帧,0的话为数据帧
int main(void)
{
    int fd1;
    unsigned long fft_ac,fft_am,fft_btr0,fft_btr1;//定义为32位数据
    char bufdat[10];
    char candat[]="fftcan" ;             //待发送的数据
    char canbuf[11];
    char panduan,i;
    unsigned long t,ffttemp1;
    printf("Begin to test fftcan drivers\n");
    fd1=open("/dev/fftcan", O_RDWR);            
    if(fd1==-1)
    {
       printf("can not open fftcan device\n");
       exit(1);
    }
//CAN0进行初始化
    fft_ac = 0x01 << 24;         
    fft_am = 0xff << 16;        
    fft_btr0 = 71 <<8;           
    fft_btr1 = 175;               
    ffttemp1 = fft_ac+fft_am+fft_btr0+fft_btr1;  
    ioctl(fd1,3,ffttemp1);          //初始化CAN0                     
//CAN1初始化
    fft_ac = 0x01 << 24;
    fft_am = 0xff << 16;
    fft_btr0 = 71 << 8;          
    fft_btr1 = 175;
    ffttemp1 = fft_ac+fft_am+fft_btr0+fft_btr1;
//调用系统函数,将组合的数据传递进去
    ioctl(fd1,4,ffttemp1);         //初始化CAN1
    bufdat[0] = (unsigned char )((CAN1ID & 0x7f0) >> 3);                     //ID的高8位
    bufdat[1] = (unsigned char)((CAN1ID & 0x07) | (RTR << 4) | Senddatnum);  //ID的低三位加上数据位和DLC位 
    memcpy((bufdat+2),candat,sizeof(candat));                                //将待要发送的数据写到BUF里面
    if(write(fd1,bufdat,1))
    {
    	printf("can't send data!\n");
    	exit(1);
    }                                                     //发送数据
 //CAN1接收数据
    for(;;)
    {
       panduan=ioctl(fd1,0,0);                                               //检查can0是否收到数据   
       if(panduan == 0)
          break;
    } 
    read(fd1,canbuf,0);                                                      //读出CAN0里面的数据,收到接收缓冲区里面的全部数据
    printf("Receive data ASCII:\n");
    for(i = 0; i < (canbuf[1] & 0x0f) + 2; i++)
       printf("%x\n",canbuf[i]);                                              //以16进制显示数据
    printf("Receive data string:\n");
    printf("%s\n",canbuf);                                                   //以字符窜形式显示 .fftcan为正确结果
    close(fd1);
    printf("finished FFT can test\n");
    return 0;

}

⌨️ 快捷键说明

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