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

📄 mc33389.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
#define mc389_cs    PTD_PTD0

unsigned char mc389_spidat;
unsigned char mc389_fault1,mc389_fault2;
sys_data_type mc389_faultstatus;

///////////////////////////////////////////
//mc33389的SPI读写
unsigned char mc389_oper(unsigned char mc389add,unsigned char mc389dat){
	//mc389add为地址加读写	mc389dat为校验加数据
	unsigned char mc389_temp;
	
	mc389_cs=0;
	SPDR=mc389add;
	while((SPSCR&0x80)==0);
	mc389_temp=SPDR;
	
	SPDR=mc389dat;
	while((SPSCR&0x80)==0);
	mc389_temp=SPDR;
	mc389_cs=1;
	
	__RESET_WATCHDOG();
	asm(nop);asm(nop);
	return(mc389_temp);
	//发送两字节	
}

//喂mc398DOG
void mc389_dog(void){
	mc389_spidat=mc389_oper(0x27,0xc7);
}

///////////////////////////////////////////////////////
void init_mc33389(void){                //初始化MC33389
	//11=写	00=读
	//注意389对极性的要求
	mc389_spidat=mc389_oper(0x27,0xc7);		//喂狗--200ms最长
	
	mc389_spidat=mc389_oper(0x28,0x00);		//读基础电平
	mc389_spidat=mc389_oper(0x44,0x00);		//读L0 L1 L2状态
	mc389_spidat=mc389_oper(0x50,0x00);		//读CANH error
	mc389_spidat=mc389_oper(0x5c,0x00);		//读CANL error
	mc389_spidat=mc389_oper(0x60,0x00);		//读复位源
	//mc389_spidat=mc389_oper(0x6c,0x00);		//读电源情况状态及V3过温状态
	
	mc389_spidat=mc389_oper(0x03,0x91);		//正常模式
	mc389_spidat=mc389_oper(0x0f,0x91);		//确定
	
	mc389_spidat=mc389_oper(0x17,0x00);		//V3off	no cyclic
	//mc389_spidat=mc389_oper(0x1b,0xf5);		//cyclic timer
	
	mc389_spidat=mc389_oper(0x2b,0x00);		//0.7
	//mc389_spidat=mc389_oper(0x2b,0x91);		//-1.2
	//mc389_spidat=mc389_oper(0x2b,0x32);		//-1.7
	//mc389_spidat=mc389_oper(0x2b,0xa3);		//-2.2
	
	//mc389_spidat=mc389_oper(0x33,0x00);		//wakeup disable=por
	//休眠或其他时可设置
	mc389_spidat=mc389_oper(0x30,0x00);		//读wakeup状态SPI or BUS
	mc389_spidat=mc389_oper(0x3c,0x00);		//读wakeup状态L0 L1 L2
	
	//mc389_spidat=mc389_oper(0x48,0x00);		//读过温状态
	
	//mc389_spidat=mc389_oper(0x77,0x00);		//中断事件使能
	//mc389_spidat=mc389_oper(0x7b,0x00);		//por=全没使能
	//中断状态寄存器
	
	//CAN模式
	//mc389_spidat=mc389_oper(0x90,0x00);		//读CAN过温
	mc389_spidat=mc389_oper(0x93,0xa3);		//RXTX
	//mc389_spidat=mc389_oper(0x93,0x32);		//RX
	//mc389_spidat=mc389_oper(0x93,0x00);		//VBAT
	
}
///////////////////////////////////////////////////

//加休眠函数
void sleep_mc33389(void){
}

//小LCD临时显示
/*
unsigned char canfault_conver(unsigned char i){
	unsigned char j;
	switch(i){
		case 0:j=0b11011011; break;
		case 1:j=0b00000011; break;
		case 2:j=0b01111010; break;
		case 3:j=0b01101011; break;
		case 4:j=0b10100011; break;
		case 5:j=0b11101001; break;
		case 6:j=0b11111001; break;
		case 7:j=0b00001011; break;
		case 8:j=0b11111011; break;
		case 9:j=0b11101011; break;
		case 10:j=0b10111011; break;
		case 11:j=0b11110001; break;
		case 12:j=0b11011000; break;
		case 13:j=0b01110011; break;
		case 14:j=0b11111000; break;
		case 15:j=0b10111000; break;
		default:j=0b00000000; break;
	}
	return(j);
}
*/
//MC389故障检测
void mc33389_fault(void){
  //unsigned char mc389_fault1,mc389_fault2;
  //mc389_fault1=mc389_oper(0x50,0x00);		                //读CANH error
	//mc389_fault2=mc389_oper(0x5c,0x00);		                //读CANL error
  if(!((mc389_fault1&0xf)&&(mc389_fault2&0xf)))
    mc389_faultstatus.Byte=0x0;                         //无故障
  
  if(mc389_fault1&0x1)   mc389_faultstatus.Bit.BIT7=1;		//CANH线断
  else                   mc389_faultstatus.Bit.BIT7=0;
  if(mc389_fault1&0x2)   mc389_faultstatus.Bit.BIT6=1;		//CANH线对Vbat短路
  else                   mc389_faultstatus.Bit.BIT6=0;
  if(mc389_fault1&0x4)   mc389_faultstatus.Bit.BIT5=1;		//CANH线对地短路
  else                   mc389_faultstatus.Bit.BIT5=0;
  if(mc389_fault1&0x8)   mc389_faultstatus.Bit.BIT4=1;		//CANH线对Vcc短路
  else                   mc389_faultstatus.Bit.BIT4=0;
  
  if(mc389_fault2&0x1)   mc389_faultstatus.Bit.BIT3=1;		//CANL线断
  else                   mc389_faultstatus.Bit.BIT3=0;
  if(mc389_fault2&0x2)   mc389_faultstatus.Bit.BIT2=1;		//CANL线对Vbat短路
  else                   mc389_faultstatus.Bit.BIT2=0;
  if(mc389_fault2&0x4)   mc389_faultstatus.Bit.BIT1=1;		//CANL线对地短路或与CANH互短
  else                   mc389_faultstatus.Bit.BIT1=0;
  if(mc389_fault2&0x8)   mc389_faultstatus.Bit.BIT0=1;		//CANH线对Vdd短路
  else                   mc389_faultstatus.Bit.BIT0=0;

}

⌨️ 快捷键说明

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