zmiyhl 2021-04-13 15:58 采纳率: 0%
浏览 70

整合数据包,并写MBI6023_Send_Node_Bits{}函数(含发送数据,发送结束标志位)。

/* .h */
#ifndef _MBI6023_h
#define _MBI6023_h
#include "spi.h"

typedef enum 
{
	MBI6023_Grey_16bit,
	MBI6023_Grey_10bit
}MBI6023_Grey;

typedef struct {
	INT16U Ch_id;
	INT16U Driver_num;
	MBI6023_Grey Grey_Level;
	INT16U MBI6023_Header[3];
}MBI6023_Chip;

INT16U check_parity(INT16U data);
static void MBI6023_Send_Header(MBI6023_Chip * pMBI_Chip);
static void MBI6023_Send_Color(MBI6023_Chip * pMBI_Chip,INT16U *data);
static void MBI6023_Senddata(MBI6023_Chip * pMBI_Chip,INT16U *data);

#endif





/* .c  */
#include "MBI6023.h"


INT16U check_parity(INT16U data)
{
	data^=data>>8;
	data^=data>>4;
	data^=data>>2;
	data^=data>>1;
	data&=1;
	return data;
}

void Delay_ms(INT16U ms)
{
	volatile INT16U i;
	for(i=0;i<ms*1000;i++);		
}

INT16U MBI6023_Header;
static void MBI6023_Send_Header(MBI6023_Chip * pMBI_Chip)
{
	INT16U H,P,A,L;
	INT16U driver_num = pMBI_Chip->Driver_num;
	INT16U * MBI6023_Header = pMBI_Chip->MBI6023_Header;
	MBI6023_Grey Grey_Level = pMBI_Chip->Grey_Level;
	
    
	if(MBI6023_Grey_16bit == Grey_Level)//calculate H,P,A,L according Grey grade
		{
			H = 0x3f;
			A = 0x00;
			L = driver_num-1;
			P = check_parity(L)|(check_parity(A)<<1)||(check_parity(H)<<2);
			P = P | (check_parity(P)<<3);
		}
	else
		{
			H = 0x2b;
			A = 0x00;
			L = driver_num-1;
			P = check_parity(L)|(check_parity(A)<<1)||(check_parity(H)<<2);
			P = P | (check_parity(P)<<3);
		}


	MBI6023_Header[0]=MBI6023_Header[1]=MBI6023_Header[2]=0;

	if(MBI6023_Grey_16bit == Grey_Level) //Generate Package Head according Grey grade
		{
			MBI6023_Header[2] = (H<<10) | A;
			MBI6023_Header[1] = (H<<10) | L;
			MBI6023_Header[0] = (P<<12) | L;
			
		}
	else
		{
			MBI6023_Header[2] = (H<<4) | P; 
			MBI6023_Header[1] = A;
			MBI6023_Header[0] = L;
		}

	MBI6023_Send_Node_Bits(pMBI_Chip,MBI6023_Header[2]);
	MBI6023_Send_Node_Bits(pMBI_Chip,MBI6023_Header[1]);
	MBI6023_Send_Node_Bits(pMBI_Chip,MBI6023_Header[0]);


}

static void MBI6023_Send_Color(MBI6023_Chip * pMBI_Chip,INT16U *data)
{
	INT16U i;
    INT16U index = pMBI_Chip-> Driver_num*12;

	for(i=0;i<index;i++)
		MBI6023_Send_Node_Bits(pMBI_Chip,data[index-i-1]);	
		
}
static void MBI6023_Senddata(MBI6023_Chip * pMBI_Chip,INT16U *data)
{
	Delay_ms(10);
	MBI6023_Send_Header(pMBI_Chip);
	MBI6023_Send_Color(pMBI_Chip,data);
}
  • 写回答

2条回答 默认 最新

  • zmiyhl 2021-04-13 16:00
    关注

    怎么整合数据包,并写MBI6023_Send_Node_Bits{}函数(含发送数据,发送结束标志位)。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab导致电脑重启问题
  • ¥15 Android studio打开dex
  • ¥20 为何R语言love图显示的分类变量点与smd值不一致
  • ¥15 asp.net实验:数据库写入不成功
  • ¥15 C#视频播放器的原码,有的发一
  • ¥15 用FDTD计算并提取光栅结构的正负一级衍射光的光功率
  • ¥30 AVL fire DVI中的Design Explorer里面的Run的Status为什么总是Terminated?哪里出问题了?需要修改哪里?
  • ¥15 有二开IOT平台code的来搞钱了。
  • ¥15 求lingo语言编程以下内容
  • ¥15 cannot import name '_MissingValues' from 'sklearn.utils._param_validation'引用smoke