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

📄 can.c

📁 在移植成功ucos核的基础上扩充了该操作系统的许多没有功能。如文件系统
💻 C
字号:
#include "../ucos-ii/includes.h"
#include "../inc/drv/can.h"
#include <string.h>

extern can_driver_t* can_driver[];
extern int Can_Device_Num;

/***********************************************************************************\
								初始化Can设备									
 	参数: 
		ndev,		CAN设备号
		bandrate,	CAN波特率

	Tip: 设备驱动程序在Device.c中定义
\***********************************************************************************/
void Init_Can(int ndev, CanBandRate bandrate, PCanFilter pfilter)
{
	if(ndev>=Can_Device_Num)
		return;

	if(can_driver[ndev]->init)
		can_driver[ndev]->init(bandrate, TRUE, pfilter);
}

/***********************************************************************************\
				打开Can设备(开启中断)
 	参数: 
		ndev,		CAN设备号
\***********************************************************************************/
void Open_Can(int ndev)
{
	if(ndev>=Can_Device_Num)
		return;

	if(can_driver[ndev]->Open)
		can_driver[ndev]->Open();
}

/***********************************************************************************\
				关闭Can设备停止接收数据
 	参数: 
		ndev,		CAN设备号
\***********************************************************************************/
void Close_Can(int ndev)
{
	if(ndev>=Can_Device_Num)
		return;

	if(can_driver[ndev]->Close)
		can_driver[ndev]->Close();
}

/***********************************************************************************\
								读取Can设备收到的数据
	参数: 
		ndev,		CAN设备号
		data,		数据结构体
		ntimeout,	超时时间,单位毫秒,如果为0,则永远等待
	返回值:
		成功返回TRUE,否则,返回FALSE
\***********************************************************************************/
BOOL CanRead(int ndev, PCanData data, int ntimeout)
{
	if(ndev>=Can_Device_Num)
		return FALSE;

	if(can_driver[ndev]->read)
		return can_driver[ndev]->read(data,ntimeout);

	return FALSE;
}

/***********************************************************************************\
								Can设备发送数据
	参数: 
		ndev,		CAN设备号
		data,		数据结构体
\***********************************************************************************/
void CanSend(int ndev, PCanData data)
{
	if(ndev>=Can_Device_Num)
		return;

	if(can_driver[ndev]->write)
		can_driver[ndev]->write(data);
}

void CAN_Test()
{
	BOOL temp;
	int i;
	CanData revdata, senddata={0x30, {1,2,3,4,5,6,7,8},8, FALSE,FALSE};

	Init_Can(0,BandRate_250kbps,NULL);
	Open_Can(0);

	for(i=0;;i++){
		CanSend(0,&senddata);

		memset(&revdata,0,sizeof(revdata));

		temp=CanRead(0, &revdata,0);
		if(i==100){
			Uart_Printf("\nid=%x",revdata.id);
			Uart_Printf("\ndata=%x,%x,%x,%x",
				revdata.data[0],revdata.data[1],revdata.data[2],revdata.data[3]);
			i=0;
		}
	}	
}

⌨️ 快捷键说明

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