📄 low_can_bus.c
字号:
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 + -