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.

552 lines
9.3 KiB

1 year ago
#include "bsp_pressure.h"
//#include "tpc_debug.h"
////#include "tpc_x.h"
#include "msp_uart1.h"
#include "msp_uart2.h"
#include "msp_uart4.h"
#include<intrins.h>
#include "debug_drv.h"
#include "TTSS_task.h"
TS_task_sw_ ts_task_sw;
void L2_pressure_init(void)
{
D_stdIO_P5(BITN2);//485RE
D_HighI_P3(BITN2);//led1
/// D_485_TX();
D_SW_IO_INIT();
}
U8 Fun_SC_Check(U8 *p1, unsigned short int len)//累加和校验
{
U8 sum = 0;
for(;len > 0; len--)
{
sum += *p1++;
}
return sum;
}
//pressure数据初始化
void l2_task_pressure_init()
{
L1_task_init(&ts_task_sw.task);
L3_task_s_go(ts_task_sw,D_task_init);
}
////二维数组的第一个参数是行,第二个参数是列。
///二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2],
////其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。
void L3_hang_judge(u8 hang)
{
printf(" H %d ",(int)hang);
switch (hang)
{
case 0x00: {
L0_adc_S0_OFF();
L0_adc_S1_OFF();
L0_adc_S2_OFF();
L0_adc_S3_OFF();
break;
}
case 0x01: {
L0_adc_S0_ON();
L0_adc_S1_OFF();
L0_adc_S2_OFF();
L0_adc_S3_OFF();
break;
}
case 0x02: {
L0_adc_S0_OFF();
L0_adc_S1_ON();
L0_adc_S2_OFF();
L0_adc_S3_OFF();
break;
}
case 0x03: {
L0_adc_S0_ON();
L0_adc_S1_ON();
L0_adc_S2_OFF();
L0_adc_S3_OFF();
break;
}
case 0x04: {
L0_adc_S0_OFF();
L0_adc_S1_OFF();
L0_adc_S2_ON();
L0_adc_S3_OFF();
break;
}
case 0x05: {
L0_adc_S0_ON();
L0_adc_S1_OFF();
L0_adc_S2_ON();
L0_adc_S3_OFF();
break;
}
case 0x06: {
L0_adc_S0_OFF();
L0_adc_S1_ON();
L0_adc_S2_ON();
L0_adc_S3_OFF();
break;
}
case 0x07: {
L0_adc_S0_ON();
L0_adc_S1_ON();
L0_adc_S2_ON();
L0_adc_S3_OFF();
break;
}
case 0x08: {
L0_adc_S0_OFF();
L0_adc_S1_OFF();
L0_adc_S2_OFF();
L0_adc_S3_ON();
break;
}
case 0x09: {
L0_adc_S0_ON();
L0_adc_S1_OFF();
L0_adc_S2_OFF();
L0_adc_S3_ON();
break;
}
case 0x0A: {
L0_adc_S0_OFF();
L0_adc_S1_ON();
L0_adc_S2_OFF();
L0_adc_S3_ON();
break;
}
case 0x0B: {
L0_adc_S0_ON();
L0_adc_S1_ON();
L0_adc_S2_OFF();
L0_adc_S3_ON();
break;
}
case 0x0C: {
L0_adc_S0_OFF();
L0_adc_S1_OFF();
L0_adc_S2_ON();
L0_adc_S3_ON();
break;
}
case 0x0D: {
L0_adc_S0_ON();
L0_adc_S1_OFF();
L0_adc_S2_ON();
L0_adc_S3_ON();
break;
}
case 0x0E: {
L0_adc_S0_OFF();
L0_adc_S1_ON();
L0_adc_S2_ON();
L0_adc_S3_ON();
break;
}
case 0x0F: {
L0_adc_S0_ON();
L0_adc_S1_ON();
L0_adc_S2_ON();
L0_adc_S3_ON();
break;
}
default:
break;
}
/// Lc_delay_us(2);
/*
if((hang & 0x01) == 0x01)
{
L0_adc_S0_ON();
}
else
{
L0_adc_S0_OFF();
}
if((hang & 0x02) == 0x02)
{
L0_adc_S1_ON();
}
else
{
L0_adc_S1_OFF();
}
if((hang & 0x04) == 0x04)
{
L0_adc_S2_ON();
}
else
{
L0_adc_S2_OFF();
}
if((hang & 0x08) == 0x08)
{
L0_adc_S3_ON();
}
else
{
L0_adc_S3_OFF();
}
*/
}
void L3_lie_judge(u8 lie)
{
printf(" L %d ",(int)lie);
switch (lie)
{
case 0x00: {
D_GND_S0_OFF();
D_GND_S1_OFF();
D_GND_S2_OFF();
D_GND_S3_OFF();
break;
}
case 0x01: {
D_GND_S0_ON();
D_GND_S1_OFF();
D_GND_S2_OFF();
D_GND_S3_OFF();
break;
}
case 0x02: {
D_GND_S0_OFF();
D_GND_S1_ON();
D_GND_S2_OFF();
D_GND_S3_OFF();
break;
}
case 0x03: {
D_GND_S0_ON();
D_GND_S1_ON();
D_GND_S2_OFF();
D_GND_S3_OFF();
break;
}
case 0x04: {
D_GND_S0_OFF();
D_GND_S1_OFF();
D_GND_S2_ON();
D_GND_S3_OFF();
break;
}
case 0x05: {
D_GND_S0_ON();
D_GND_S1_OFF();
D_GND_S2_ON();
D_GND_S3_OFF();
break;
}
case 0x06: {
D_GND_S0_OFF();
D_GND_S1_ON();
D_GND_S2_ON();
D_GND_S3_OFF();
break;
}
case 0x07: {
D_GND_S0_ON();
D_GND_S1_ON();
D_GND_S2_ON();
D_GND_S3_OFF();
break;
}
case 0x08: {
D_GND_S0_OFF();
D_GND_S1_OFF();
D_GND_S2_OFF();
D_GND_S3_ON();
break;
}
case 0x09: {
D_GND_S0_ON();
D_GND_S1_OFF();
D_GND_S2_OFF();
D_GND_S3_ON();
break;
}
case 0x0A: {
D_GND_S0_OFF();
D_GND_S1_ON();
D_GND_S2_OFF();
D_GND_S3_ON();
break;
}
case 0x0B: {
D_GND_S0_ON();
D_GND_S1_ON();
D_GND_S2_OFF();
D_GND_S3_ON();
break;
}
case 0x0C: {
D_GND_S0_OFF();
D_GND_S1_OFF();
D_GND_S2_ON();
D_GND_S3_ON();
break;
}
case 0x0D: {
D_GND_S0_ON();
D_GND_S1_OFF();
D_GND_S2_ON();
D_GND_S3_ON();
break;
}
case 0x0E: {
D_GND_S0_OFF();
D_GND_S1_ON();
D_GND_S2_ON();
D_GND_S3_ON();
break;
}
case 0x0F: {
D_GND_S0_ON();
D_GND_S1_ON();
D_GND_S2_ON();
D_GND_S3_ON();
break;
}
default:
break;
}
/// Lc_delay_us(2);
/*
if((lie & 0x01) == 0x01)
{
D_GND_S0_ON();
}
else
{
D_GND_S0_OFF();
}
if((lie & 0x02) == 0x02)
{
D_GND_S1_ON();
}
else
{
D_GND_S1_OFF();
}
if((lie & 0x04) == 0x04)
{
D_GND_S2_ON();
}
else
{
D_GND_S2_OFF();
}
if((lie & 0x08) == 0x08)
{
D_GND_S3_ON();
}
else
{
L0_adc_S3_OFF();
}
*/
}
#define D_3232_left() D_CD3_ON();D_CD2_OFF(); ts_task_sw.ch = D_DW_left;
#define D_3232_right() D_CD2_ON();D_CD3_OFF(); ts_task_sw.ch = D_DW_right;
#define D_3232_odd() D_CD4_OFF(); D_CD1_ON();///D_CD2_ON();D_CD3_OFF();
#define D_3232_even() D_CD1_OFF(); D_CD4_ON();
//// 和电路的排列息息相关
void L4_SW_set3232(u8 hang,u8 lie)
{
if((hang%2) == 0)
{
D_3232_even();
/// 0->0 2->1 4->2 6->3
hang /= 2;
L3_hang_judge(hang);
}else
{
D_3232_odd(); ///偶数
/// 1->15 3->14 5->13
/// 0 1 2
hang --;
hang /= 2;/// (hang - 1)/2;
L3_hang_judge(15 - hang);
}
if(lie < 16)//左
{
/// 0->15 1->14 2->13 ...15->0
D_3232_left();
L3_lie_judge(15 - lie);
}else
{/// 16-----31
/// 16->15 17->14 18->13 ... 31->0
D_3232_right();
L3_lie_judge(31-lie);
}
}
//点的切换
#if 0
ch =0
set
adc
ch =1
set
adc
#endif
/// 硬件先切换 行列切换---之后通道 然后当前adc采样,
//// 行切换 hang++
//// 列切换 lie++
//// 通道切换 ch++
//// adc
//// 通道切换 ch++
//// adc
//// 列切换 lie++
//// 通道切换 ch++
//// adc
//// 通道切换 ch++
//// adc
//// 列切换 lie++
//// 通道切换 ch++
//// adc
//// 通道切换 ch++
//// adc
////
//// 列切换....
//// 行切换 hang++
//// 列切换 lie++
//// 通道切换 ch++
//// adc
//// 通道切换 ch++
//// adc
//// 列切换 lie++
//// 通道切换 ch++
//// adc
//// 通道切换 ch++
//// adc
//// 列切换 lie++
//// 通道切换 ch++
//// adc
//// 通道切换 ch++
//// adc
////
#if 0
#define D_SW_hang_max 16
#define D_SW_lie_max 16
#define D_SW_hang_max (6-1)
#define D_SW_lie_max (6-1)
#else
#define D_SW_hang_max (2-1)
#define D_SW_lie_max (2-1)
#endif
#define D_SW_all_hang_max 32
#define D_SW_all_lie_max 32
#define D_SW_ch_max (2-1)
void L3_task_sw(TS_task_sw_ *s)
{
TTSS_Task_init():
printf("\r\n task_sw ");
s->H = 0;
s->L = 0;
ts_task_adc.chok1 = 0;
ts_task_adc.chok2 = 0;
L2_pressure_init();
L2_task_go(D_TASK_SW_change);
TTSS_Task_step(D_TASK_SW_change):
L4_SW_set3232(s->H,s->L);
printf("\r\n %d %d ",(int)s->H,(int)s->L);
ts_task_adc.change = 1;
ts_task_adc.ch_now = s->ch;
L2_task_go(D_TASK_SW_wait_adc);
/// L2_task_Cdelay_go(1000,D_TASK_SW_ch);////100000--2s
TTSS_Task_step(D_TASK_SW_wait_adc):
if(ts_task_adc.chok1)
{
ts_task_adc.chok1 = 0;
/// printf("\r\n %d %d %d %d ",(int)s->ch,(int)s->H,(int)s->L,(int)ts_task_adc.chok1);
//// L2_task_go(D_TASK_SW_ch_ok);
L2_task_Cdelay_go(10000,D_TASK_SW_lie);////100000--2s
}
TTSS_Task_step((D_TASK_SW_lie)):
if(s->L >= D_SW_all_lie_max)
{
s->L = 0;
if(s->H >= D_SW_all_hang_max)
{
s->H = 0;
printf("\r\n next circle");
}else
{
s->H ++;
}
}else
{
s->L ++;
}
L2_task_go(D_TASK_SW_change);
TTSS_Task_end();
}
void L3_pressure_debug(u8 filter)
{
//u8 D_pressure_hang1 = 0x00;
//u8 D_pressure_hang2 = 0x0f;
if( filter == ts_debug_rec.filter)
{
if(0x33 == ts_debug_rec.ocr )
{
printf("\r\nhang : %d lie: %d ",(int)ts_debug_rec.R1,(int)ts_debug_rec.R2);
L4_SW_set3232(ts_debug_rec.R1,ts_debug_rec.R2);
}else
{
printf("\r\n 44444 ");
}
}
}