/**
******************************************************************************
* @file 六叶树CANFD二次开发demo
* @author lys
* @version V1.1.0
* @date 2023
* @brief 用例功能:
* 以六叶树USBCANFDMini为例,设备通道CAN0配置为FD模式,仲裁域波特率为1M,数据波特率
* 5M,CAN总线收到什么数据就回复什么数据。支持:USBCANFDMini/USBCANFD1/USBCANFD2。
* @note
*
* @endverbatim
*
******************************************************************************
* 版权:长沙六叶树教育科技有限公司
* 官网:www.liuyeshu.cn
* 更多资料教程下载见官网
******************************************************************************
修改日期 版本号 修改者 功能描述
2023.04.10 V1.1.0 LYS
----------------------------------------------------------------------------
******************************************************************************
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include "ControlCAN.h"
void exit_can(int flag)
{
//关闭设备
LCAN_CloseDevice(LCAN_USBCANFDMini,0);
exit(0);
}
//进程退出处理,程序调用 exit 或 main函数return 或 最后一个线程正常退出
void exitHandle(void)
{
printf("Demo Stop...\n");
//关闭设备
LCAN_CloseDevice(LCAN_USBCANFDMini,0);
}
int main(void)
{
LCAN_INITFD_CONFIG canInitFDCfgInfo;
UINT devType=LCAN_USBCANFDMini,devIndex = 0,canIndex = 0;
LCAN_CAN_OBJ canObj[32];
LCAN_CANFD_OBJ fdObj[32];
UINT ret, i, j, frameCnt;
printf("Demo Start...\n");
//var init
memset(&canInitFDCfgInfo, 0, sizeof(LCAN_INITFD_CONFIG));
//注册回调函数,程序调用 exit 或 mian函数return 或 最后一个线程正常退出时,捕获退出事件,执行退出处理
atexit(exitHandle);
//打开设备
ret = LCAN_OpenDevice(devType, devIndex);
if(LCAN_STATUS_OK != ret)
{
printf("Device Open Fail...\n");
exit_can(1);
}
//FD MODE
canInitFDCfgInfo.fdEn = 1;
//ISO设置 0:NONE ISO 1:ISO
canInitFDCfgInfo.isoEn = 0;
//仲裁域波特率 1M
canInitFDCfgInfo.abit_timing = 0x01400106;
//数据域波特率 5M
canInitFDCfgInfo.dbit_timing = 0x00800001;
//正常工作模式
canInitFDCfgInfo.mode = 0;
//用例只初始化ch0
ret = LCAN_InitCANFD(devType, devIndex, canIndex, &canInitFDCfgInfo);
if(LCAN_STATUS_OK != ret)
{
printf("Device Init Fail...\n");
exit_can(1);
}
printf("\r\nDEMO 参数:CAN1 ISO:NONE Baud:<1M,5M> 功能:接收到什么数据就回发什么数据。\n");
while(1)
{
//CAN
if(0 < LCAN_GetReceiveNum(devType, devIndex, canIndex, REC_TYPE_CAN))
{
frameCnt = LCAN_Receive(devType, devIndex, canIndex, canObj, 32, 50);
if(0 < frameCnt)
{
//print
printf("---can recv:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
printf("ID: %08x DataLen:%02x ExternFlag:%d RemoteFlag: %d data:",
canObj[i].id&0x1FFFFFFF, canObj[i].dataLen,
canObj[i].externFlag, canObj[i].remoteFlag);
for (j=0; j< canObj[i].dataLen; j++) {
printf("%02x ", canObj[i].data[j]);
}
printf("\n");
}
//send
printf ("---can send:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
//正常发送模式
canObj[i].sendType = 0;
}
LCAN_Transmit(devType, devIndex, canIndex, canObj, frameCnt);
}
}
//FD
if(0 < LCAN_GetReceiveNum(devType, devIndex, canIndex, REC_TYPE_FD))
{
frameCnt = LCAN_ReceiveFD(devType, devIndex, canIndex, fdObj, 32, 50);
if(0 < frameCnt)
{
//print
printf("---fd recv:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
printf("ID: %08x DataLen:%02x ExternFlag:%d RemoteFlag: %d data:",
fdObj[i].id&0x1FFFFFFF, fdObj[i].dataLen,
fdObj[i].externFlag, fdObj[i].remoteFlag);
for (j=0; j< fdObj[i].dataLen; j++) {
printf("%02x ", fdObj[i].data[j]);
}
printf("\n");
}
//send
printf ("---fd send:%d\n", frameCnt);
for (i=0; i<frameCnt; i++) {
//正常发送模式
fdObj[i].sendType = 0;
}
LCAN_TransmitFD(devType, devIndex, canIndex, fdObj, frameCnt);
}
}
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
lysDemo-loongarch64-linux-gnu.tar.gz
需积分: 0 0 下载量 10 浏览量
2023-07-18
17:10:07
上传
评论
收藏 1.33MB GZ 举报
温馨提示
共10个文件
h:5个
c:2个
so:1个
六叶树usbcan适配器Linux系统二次开发用例 lysDemo-loongarch64-linux-gnu.tar.gz
资源推荐
资源详情
资源评论
收起资源包目录
lysDemo-loongarch64-linux-gnu.tar.gz (10个子文件)
lysDemo
libControlCAN.so 433KB
Makefile 343B
lyscan-test.c 3KB
config.h 3KB
zlgcan.h 11KB
libControlCAN.a 884KB
canframe.h 4KB
ControlCAN.h 4KB
lysfd-test.c 4KB
typedef.h 571B
共 10 条
- 1
资源评论
六叶树
- 粉丝: 75
- 资源: 50
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功