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

📄 low_can_bus.c

📁 汽车行业专用通讯
💻 C
📖 第 1 页 / 共 2 页
字号:
		else 
		
		return 0;
		
		}	
	
/*
*********************************************************************************************************
*                INT8U setting_data_select()
*
* Description: setting sja1000 data filter.location address 0x333
*
* Arguments  : none
*
* Returns    :	1--setting ok,  0--setting failure
* called     : write_sja1000();read_sja1000();
*			   
*********************************************************************************************************
*/
	
INT8U setting_data_select()

	{
		write_sja1000(ACR_Addr,SJA_ACR);//SJA_ACR = 0X33
		
		write_sja1000(AMR_Addr,SJA_AMR);//SJA_AMR = 0XFF
		
		if((read_sja1000(ACR_Addr) == SJA_ACR)&&(read_sja1000(AMR_Addr) == SJA_AMR))
		
		return 1;
		
		else 
		
		return 0;
		
		}
/*
*********************************************************************************************************
*                INT8U setting_sja_rate()
*
* Description: setting sja1000 transform baudrate 125kbps.
*
* Arguments  : none
*
* Returns    :	1--setting ok,  0--setting failure
* called     : write_sja1000(BTR0_Addr,SJA_BTR0);read_sja1000(BTR0_Addr);
*			   write_sja1000(BTR1_Addr,SJA_BTR1);read_sja1000(BTR1_Addr);
*********************************************************************************************************
*/
INT8U setting_sja_rate()

	{
		
		write_sja1000(BTR0_Addr,SJA_BTR0);	
		
		write_sja1000(BTR1_Addr,SJA_BTR1);
		
		if((read_sja1000(BTR0_Addr) == SJA_BTR0)&&(read_sja1000(BTR1_Addr) == SJA_BTR1))
		
		return 1;
		
		else 
		
		return 0;
		
		}
/*
*********************************************************************************************************
*                INT8U setting_reset_mode()
*
* Description: setting sja1000 entry software reset.
*
* Arguments  : none
*
* Returns    :	1--reset ok,0--reset failure
* called     : write_sja1000(CR_Addr,CNT_DAT);read_sja1000(CR_Addr)
*
*********************************************************************************************************
*/

INT8U setting_reset_mode()
	
	{
		INT8U CNT_DAT;
		
		CNT_DAT = read_sja1000(CR_Addr)|0x01;	
		
		write_sja1000(CR_Addr,CNT_DAT);/*software reset ,disable sja1000 all interrupt*/
		
		if(read_sja1000(CR_Addr)&0x01 == 0x01)
		
		return 1;
		
		else 
		
		return 0;
		
		}
/*
*********************************************************************************************************
*                INT8U setting_working_mode()
*
* Description: setting sja1000 entry working mode
*
* Arguments  : none
*
* Returns    :	1--setting ok 0--setting failure
* called     : write_sja1000(CR_Addr,CNT_DAT);read_sja1000(CR_Addr)
*
*********************************************************************************************************
*/
INT8U setting_working_mode()

	{
		INT8U CNT_DAT0;
		
		CNT_DAT0 = read_sja1000(CR_Addr)& 0xFE;
		
		write_sja1000(CR_Addr,CNT_DAT0);/*enter  working mode and  all interrupt*/
		
		if((read_sja1000(CR_Addr)&0x01) == 0 )
			
		return 1;
			
		else
			
		return 0;
	}
/*
*********************************************************************************************************
*                INT8U check_hard_connect(void)
*
* Description: check mcu and sja1000 connect.
*
* Arguments  : none
*
* Returns    :	1--connect ok,0--disconnect
* called     : write_sja1000(CHK_REG_Addr,0xAA);read_sja1000(CHK_REG_Addr)
*
*********************************************************************************************************
*/
	
INT8U check_hard_connect(void)

	{
		write_sja1000(CHK_REG_Addr,0xAA);			/*check use*/
		
		if(read_sja1000(CHK_REG_Addr) == 0xAA)
		
		return 1;
		
		else 
		
		return 0;
	
		}	
/*
*********************************************************************************************************
*                void write_sja1000(INT8U sja_reg_add,INT8U dat)
*
* Description: writing sja1000.
*
* Arguments  :INT8U sja_reg_add;INT8U  dat;
*
* Returns    :	none
* called     : send_add(sja_reg_add);send_byte(dat);
*
*********************************************************************************************************
*/
	
void write_sja1000(INT8U sja_reg_add,INT8U dat)

	{
		
		pd1 = 0xFF;						/*p1 direct output*/
		
		pd0_2 = 1;
	
		p0_2 = 1; 						/* rd = 1 */
		
		send_add(sja_reg_add);
		
		nop();
		
		send_byte(dat);
		
		pd1 = 0xFF;	
		
		}
/*
*********************************************************************************************************
*               INT8U  read_sja1000(INT8U sja_reg_add)
*
* Description: reading sja1000.
*
* Arguments  :INT8U sja_reg_add;
*
* Returns    :	Rev_Dat
* called     : receive_data();send_add0(sja_reg_add);
*
*********************************************************************************************************
*/
	
INT8U  read_sja1000(INT8U sja_reg_add)

	{
		INT8U Rev_Dat = 0;
		
		pd0_3 = 1;
	
		p0_3 = 1;		/* wr = 1*/
		
		send_add0(sja_reg_add);
		
		Rev_Dat = receive_data();
		
		return  (Rev_Dat);
	
		}
/*
*********************************************************************************************************
*               void send_add(INT8U sja_reg_add )
*
* Description: send data to sja1000.
*
* Arguments  :INT8U sja_reg_add;
*
* Returns    :	none
* called     :  none
*
*********************************************************************************************************
*/
	
void send_add(INT8U sja_reg_add )

	{
		p0_1 = 1;		/* cs = 1;*/
		
		p0_3 = 1;		/* wr = 1;*/
		
		p0_0 = 0;		/*ALE = 0;*/
		
		p0_0 = 1;		/*ALE = 1;*/
		
		nop();
		
		p1 = sja_reg_add; 
		
		nop();
		
		p0_0 = 0;		/*ALE = 0;*/
		
		nop();
		
		p0_1 = 0;		/* cs = 0;*/
		
		nop();
		
		p0_3 = 0;		/* wr = 0;*/
		
		}
/*
*********************************************************************************************************
*               void send_byte(INT8U dat )
*
* Description: send byte to sja1000.
*
* Arguments  :  none
*
* Returns    :	none
* called     :  none
*
*********************************************************************************************************
*/
void send_byte(INT8U dat )

	{
		p1 = dat;
		
		nop();
		
		p0_3 = 1;		/* wr = 1;*/
		
		nop();
		
		p0_1 = 1;		/* cs = 1;*/
		
		nop();
		
		p0_0 = 1;		/*ALE = 1;*/
		
		}
	
/*
*********************************************************************************************************
*               void send_add0(INT8U sja_reg_add )
*
* Description: send data to sja1000.
*
* Arguments  :INT8U sja_reg_add;
*
* Returns    :	none
* called     :  none
*
*********************************************************************************************************
*/
void send_add0(INT8U sja_reg_add)

		{
		
			p0_1 = 1;		/* cs = 1;*/
		
			p0_2 = 1;		/* rd = 1;*/
			
			p0_0 = 0;		/*ALE = 0;*/
		
			p0_0 = 1;		/*ALE = 1;*/
		
			nop();
		
			p1 = sja_reg_add;
		
			nop();
		
			p0_0 = 0;		/*ALE = 0;*/
			
			nop();
		
		}
/*
*********************************************************************************************************
*               INT8U receive_data()
*
* Description: receive data from sja1000.
*
* Arguments  :
*
* Returns    :	Rev_Dat0
* called     :  none
*
*********************************************************************************************************
*/
		
INT8U receive_data()

	{
		INT8U  Rev_Dat0 = 0 ; 
		
		pd1 = 0;		/*p1 direct ,input*/
		
		p0_1 = 0;
		
		p0_2 = 0;

		nop();nop();nop();nop();
		
		Rev_Dat0 = p1; 
		
		DATA = Rev_Dat0;	/*check use*/		
	
		p0_2 = 1;		/* rd = 1;*/
		
		p0_1 = 1;		/*ALE = 1;*/
	
		pd1 = 0xFF;		/*p1 direct ,output*/
		
		return Rev_Dat0;
		
		}
/*
*********************************************************************************************************
*                void sja1000_reset_on(void)
*
* Description: hard reset sja1000.
*
* Arguments  : none
*
* Returns    :	
* Note(s)    : port config,p0_4 direct output;connectsja1000 /rst pin
*
*********************************************************************************************************
*/

void sja1000_reset_on(void)

	{
 	
		nop();
		
		pd0_4  = 1;
		
		p0_4 = 0;         /*reset sja1000 */
		
		}
/*
*********************************************************************************************************
*                void sja1000_reset_off(void)
*
* Description: hard reset sja1000.
*
* Arguments  : none
*
* Returns    :	
* Note(s)    : port config,p0_4 direct output;connectsja1000 /rst pin
*
*********************************************************************************************************
*/
	
void sja1000_reset_off(void)

	{
 	
		nop();
		
		pd0_4  = 1;
		
		p0_4 = 1;         /*reset sja1000 */
		
		}
/*
*********************************************************************************************************
*                void target_init(void)
*
* Description: target hard  initial.
*
* Arguments  : none
*
* Returns    :	
* Note(s)    : port config
*
*********************************************************************************************************
*/

void target_init(void)

	{
	
		pd1=0xFF;				/*P1 direction,output*/
		
		pd0_0 = 1;				/*P0.0---P0.4 direction,output*/   
		
		pd0_1 = 1;
		
		pd0_2 = 1;
		
		pd0_3 = 1;
		
		pd0_4 = 1;
		
		pd8_3 = 0;				/*P8.3 direction,input*/

		p0_1 = 1;				/*  cs = 1,cs低电平有效*/ 
		
		p0_2 = 1;				/*  rd = 1;rd低电平有效*/
		
		p0_3 = 1;				/*  wr = 1;wr低电平有效*/
		
		}

⌨️ 快捷键说明

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