You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

329 lines
5.6 KiB

1 year ago
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2020, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file cs1232.h
/// @brief hard cs1232 include
/// @info FILE FOR HARDWARE cs1232
///-------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////
/// @version 1.0
/// @author CC
/// @date 20200530
/// @note
//////////////////////////////////////////////////////////////////////////////
#include "bsp_cs1232.h"
///TS_cs1232_ ts_adc;///TSS_FLOW_ tss_ads;
void L0_ADS1213_mode(vtype mode)
{
switch(mode)
{
case D_ADS1213_POWERDOWN:
D_ADC_SCLK1_CLOSE();
D_ADC_DOUT1_CLOSE();
D_ADC_SCLK2_CLOSE();
D_ADC_DOUT2_CLOSE();
D_ADC_SCLK3_CLOSE();
D_ADC_DOUT3_CLOSE();
D_ADC_SCLK4_CLOSE();
D_ADC_DOUT4_CLOSE();
D_ADC_POWERDOWN();
L0_uart0_uc('d');
break;
case D_ADS1213_GAIN_128:
D_ADC_GAIN0_128();
L0_uart0_uc('8');
break;
case D_ADS1213_GAIN_64:
D_ADC_GAIN0_64();
L0_uart0_uc('6');
break;
default:
D_ADC_GAIN0_64();
L0_uart0_uc('q');
break;
};
}
void L0_ADS1213_INIT(vtype mode)
{
D_ADC_GAIN0_INIT();
D_ADC_SCLK1_INIT();
D_ADC_DOUT1_INIT();
D_ADC_SCLK2_INIT();
D_ADC_DOUT2_INIT();
D_ADC_SCLK3_INIT();
D_ADC_DOUT3_INIT();
D_ADC_SCLK4_INIT();
D_ADC_DOUT4_INIT();
D_ADC_PDWN_INIT();
D_ADC_PD_WACKUP();
L0_ADS1213_mode(mode);
}
void L0_adc_SCLK(vtype ch,vtype onf)
{
switch (ch)
{
case D_ADCCH_1:
if(onf){D_ADC_SCLK1_ON();}else{D_ADC_SCLK1_OFF();}
break;
case D_ADCCH_2:
if(onf){D_ADC_SCLK2_ON();}else{D_ADC_SCLK2_OFF();}
break;
case D_ADCCH_3:
if(onf){D_ADC_SCLK3_ON();}else{D_ADC_SCLK3_OFF();}
break;
case D_ADCCH_4:
if(onf){D_ADC_SCLK4_ON();}else{D_ADC_SCLK4_OFF();}
break;
default:
break;
}
}
vtype L0_adc_DOUT_AT(vtype ch)
{
vtype r = 9;
switch (ch)
{
case D_ADCCH_1:
r = D_ADC_DOUT1_AT();
break;
case D_ADCCH_2:
r = D_ADC_DOUT2_AT();
break;
case D_ADCCH_3:
r = D_ADC_DOUT3_AT();
break;
case D_ADCCH_4:
r = D_ADC_DOUT4_AT();
break;
default:
break;
}
return r;
}
void L0_ADS1231_readCH2(vtype ch,vU32 *d)
{
u8 i = 0;
vU32 rdata;
/// vU16 t16;
rdata = 0;
for(i = 0; i < 24; i++)
{
L0_adc_SCLK(ch,1);/// D_ADC_SCLK1_ON();
rdata <<= 1;
L0_adc_SCLK(ch,0);///D_ADC_SCLK1_OFF();
if(L0_adc_DOUT_AT(ch))
{
rdata += 1;
}
}
///25 puls make DOUT high
L0_adc_SCLK(ch,1);
///FF84 CC09 FF84 CC09
L0_adc_SCLK(ch,0);
*d = rdata;
}
#if 0
void L0_ADS1231_readCH2555(vtype ch,vU16 *d)
{
u8 i = 0;
vU32 rdata;
vU16 t16;
rdata = 0;
for(i = 0; i < 24; i++)
{
L0_adc_SCLK(ch,1);/// D_ADC_SCLK1_ON();
rdata <<= 1;
L0_adc_SCLK(ch,0);///D_ADC_SCLK1_OFF();
if(L0_adc_DOUT_AT(ch))
{
rdata += 1;
}
}
///25 puls make DOUT high
L0_adc_SCLK(ch,1);
///FF84 CC09 FF84 CC09
L0_uart0_uc('0'+ch); L0_uart0_uc(0x09);
L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
if (rdata > 0x007fFFff)
{
rdata >>= D_sensor_zoom; ///fixme:此处正负差和移位不一致需要谨慎
rdata |= D_sensor_zoom_FF; /// 1111 1100
}else
{
rdata >>= D_sensor_zoom;
}
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
t16 = rdata;
// L0_uart0_ushex(t16); L0_uart0_uc(0x09);
///L0_uart0_0d0a();
if(t16 & 0x8000) //最高位为1,<0则
{
t16 = 0xffFF - t16;///转变为正数
///*d = D_ADC_OFFSET - t16;
*d = D_ADC_OFFSET - t16;
}else
{
*d = t16 + D_ADC_OFFSET;
}
// L0_uart0_ushex(*d); L0_uart0_0d0a();
L0_adc_SCLK(ch,0);
}
#endif
/*********************************end file*********************************************/
//#define D_ADC_GATHER_Way1 1
#if 0
//调试阻塞读
vS32 L0_ADS1231_read(U8 ch)
{
vU32 e = 0;u8 i;vS32 rdata = 0;
while(1 == L0_2dc_DOUT_AT(ch))
{
if(e ++ > 100000)
{
//return 0;
}
}
for(i = 0; i < 24; i++)
{
L0_2dc_SCLK(ch,1);
rdata <<= 1;
L0_2dc_SCLK(ch,0);
if(L0_2dc_DOUT_AT(ch))
{
rdata += 1;
}
}
L0_2dc_SCLK(ch,1);
if(rdata & 0x800000) //???λ?1??<0??
{
rdata |= 0xFF000000;
}
return rdata;
}
void L1_ADS1213_main(void)
{
U8 ch = D_ADCCH_2;
while(1)
{
while(1 == L0_2dc_DOUT_AT(ch))
;
tss_ads.u32_i = L0_ADS1231_readCH(ch);
tss_ads.u16_v = (vU16)( tss_ads.u32_i >> 16);
L0_uart0_ushex(tss_ads.u16_v);
tss_ads.u16_v = (vU16)(tss_ads.u32_i & 0x0000ffff);
L0_uart0_ushex(tss_ads.u16_v);//Lc_delay_us(500);
L0_uart0_uc(0x0d); L0_uart0_uc(0x0a);
}
}
u8 Read_byte_adcIC(void)
{
u8 i;
u8 rdata = 0; //初始化返回值为 0
for(i = 0; i < 8; i++)
{
D_ADC_SCLK1_ON();
rdata <<= 1; //返回值左移 1 位
/// CS1231_Clk(); //上升沿接收数据,下降沿更新数据
D_ADC_SCLK1_OFF();
if(D_ADC_DOUT1_AT())
{
rdata += 1; //若数据线上数据为 1,则返回值加 1
}
}
return(rdata);
}
void L0_ADS1213_CH(u8 ch)
{
/// /// SPEED = 1 57--57 ms 硬件配置成高电平
D_ADC_PDWN_OFF();
switch(ch)
{
case D_ADCCH_T:
L0_ADS1213_T(1);
break;
case D_ADCCH_1:
D_ADC_CS_A0_OFF();
break;
case D_ADCCH_2:
D_ADC_CS_A0_ON();
break;
case D_ADCCH_3:
//D_ADC_CS2_A0_OFF();
break;
case D_ADCCH_4:
//D_ADC_CS2_A0_ON();
break;
default:///
L0_ADS1213_T(0);
break;
};
Lc_delay_us(50);
D_ADC_PDWN_ON();
}
//channel-温度
void L0_ADS1213_T(u8 onff)
{
if(onff)
{
D_ADC_PDWN_OFF();
D_ADC_TEMP_ON();
Lc_delay_us(50);
D_ADC_PDWN_ON();
}
else
{
D_ADC_PDWN_OFF();
D_ADC_TEMP_OFF();
Lc_delay_us(50);
D_ADC_PDWN_ON();
}
}
#endif
/*********************************************/