Browse Source

bfysop-v2

bfysop-v2
mr.zhangsan 1 year ago
parent
commit
4feb041006
  1. BIN
      source/app/source.lnk
  2. 418
      source/app/task_adc.c
  3. 119
      source/app/task_adc.h
  4. 32
      source/app/task_bled.c
  5. 8
      source/app/task_nfc.c
  6. 63
      source/app/task_register.c
  7. 32
      source/app/task_register.h
  8. 16
      source/app/task_rfid.c
  9. 10
      source/app/task_rs485.c
  10. 6
      source/bsp/bsp_config.c
  11. 70
      source/bsp/bsp_config.h
  12. 10
      source/bsp/bsp_key.c
  13. 77
      source/bsp/bsp_led.c
  14. 3
      source/bsp/bsp_led.h
  15. 1
      source/bsp/bsp_rfid.c

BIN
source/app/source.lnk

Binary file not shown.

418
source/app/task_adc.c

@ -1,418 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_adc.h"
#include "../bsp/bsp_config.h"
#include "../bsp/cs1232.h"
#include "../msp/uart0.h"
//=============================================
//S_TASK_ADC_CHANNEL_BLUR ts_adc_channel_blurs[D_ADC_CHANNEL_NUM];
//S_TASK_ADC_CHANNEL_SHOW ts_adc_channel_show;
S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM];
//S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_SHOW ts_adc_blur_show;
static U8 count_n(u8 n,u8 d)
{
if(n < d)
{
return MAX_OUT_NUM + n - d ;
}
else
{
return n-d;
}
}
U32 Abs(S32 a)
{
if(a < 0)
{
a = -a;
}
return a;
}
//ch是0123,代表4通道
void L3_task_adc_init(U8 ch)
{
//通道采集任务初始化
// L1_task_init(&ts_adc_channel_samples[ch].task);
// L3_task_s_go(ts_adc_channel_samples[ch],D_task_init);
// ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1;
// ts_adc_channel_samples[ch].pool = 0;
// ts_adc_channel_samples[ch].adcval = 0;
// ts_adc_channel_samples[ch].n = 0;
// ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch;
#if 0
//通道中值滤波任务初始化
L1_task_init(&ts_adc_blur_mid[ch].task);
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init);
ts_adc_blur_mid[ch].n = 0;
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid;
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch;
#endif
//通道均值滤波任务初始化
L1_task_init(&ts_adc_blur_avg[ch].task);
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init);
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg;
ts_adc_blur_avg[ch].avgval = 0;
ts_adc_blur_avg[ch].n = 0;
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch;
//通道移位滤波任务初始化
L1_task_init(&ts_adc_blur_shift[ch].task);
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init);
ts_adc_blur_shift[ch].n = 0;
ts_adc_blur_shift[ch].h = 0;
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0];
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1];
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2];
ts_adc_blur_shift[ch].sum[0] = 0;
ts_adc_blur_shift[ch].sum[1] = 0;
ts_adc_blur_shift[ch].sum[2] = 0;
ts_adc_blur_shift[ch].shiftval[0] = 0;
ts_adc_blur_shift[ch].shiftval[1] = 0;
ts_adc_blur_shift[ch].shiftval[2] = 0;
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch;
//输出判定任务初始化
L1_task_init(&ts_adc_blur_out[ch].task);
L3_task_s_go(ts_adc_blur_out[ch],D_task_init);
ts_adc_blur_out[ch].h= 0;
ts_adc_blur_out[ch].threshold[0] = D_COUNT_ADC(R.p.adc_blur_threshold[0]); //2KG
ts_adc_blur_out[ch].threshold[1] = D_COUNT_ADC(R.p.adc_blur_threshold[1]); //0.5KG
ts_adc_blur_out[ch].newnum = 0;
ts_adc_blur_out[ch].oldnum = 0;
ts_adc_blur_out[ch].newout = 0;
ts_adc_blur_out[ch].n = 0;
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch;
#if 0
//通道切换任务初始化
//L1_task_init(&ts_adc_channel_switch.task);
L3_task_s_go(ts_adc_channel_switch,D_task_init);
#endif
}
void L3_task_show_init(void)
{
//显示任务初始化
L1_task_init(&ts_adc_blur_show.task);
L3_task_s_go(ts_adc_blur_show,D_task_init);
ts_adc_blur_show.rough_weight = 0;
}
//ADC Channel 采样任务
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x53
#define D_task_ADC_CHx_SAMPLE_READ 0x54
#define D_task_ADC_CHx_SAMPLE_OUT 0x55
void L3_task_adc_channel_sample(S_TASK_ADC_CHANNEL_SAMPLE *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW);
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_WAIT_LOW)
if(s->status == ADC_CHANNEL_STATUS_READY) //需要判断status是否ready,ready则读取,否则使用pool值
{
if(0 == L0_2dc_DOUT_AT(s->ch))
{
L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
}
}
else
{
s->adcval = s->pool;
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_OUT,D_Tdelay_Msec(15)); //延时15ms,模拟一次采样过程
}
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ)
if(s->status == ADC_CHANNEL_STATUS_READY) //需要重新判断status是否ready,因为channel_switch任务随时可能修改status状态
{
s->adcval = Abs(L0_ADS1231_readCH(s->ch));
L2_task_go(D_task_ADC_CHx_SAMPLE_OUT);
}
else
{
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW);
}
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT)
//不判断ready,不管是采集到的真实数据还是pool数据,都继续执行
s->pool = s->adcval;
s->out[s->n] = s->adcval;
//R.adval[s->ch] = s->out[s->n];
//L0_uart0_ulhex(R.adval[s->ch]);L0_uart0_0d0a();
s->n++;
#if 0
L0_uart0_ulhex(s->out[count_n(s->n,1)]);
L0_uart0_uc(' ');
//L0_uart0_ulhex(ts_adc_blur_mid[s->ch].out[count_n(ts_adc_blur_mid[s->ch].n,1)]);
//L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[0]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[1]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[2]);
L0_uart0_uc(' ');
L0_uart0_ulhex(R.adval[s->ch]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_out[s->ch].oldnum);
L0_uart0_0d0a();
#endif
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW);
TTSS_Task_end();
}
#if 0
//中值滤波任务
#define D_task_ADC_CHx_FILTER_MID_GET 0x50
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET)
if(ts_adc_channel_samples[s->ch].n >= s->max)
{
U8 i = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_channel_samples[s->ch].out[i];
}
ts_adc_channel_samples[s->ch].n = 0;
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT)
s->midval = Lc_vS32_media(s->in, s->max);
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT)
s->out[s->n] = s->midval;
//R.adval[s->ch] = s->out[s->n];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
TTSS_Task_end();
}
#endif
//均值滤波任务
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET)
if(ts_adc_channel_samples[s->ch].n >= s->max)
{
U8 i = 0;
ts_adc_channel_samples[s->ch].n = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_channel_samples[s->ch].out[i];
}
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT)
s->avgval = Lc_vU32_avg(s->in,s->max);
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT)
s->out[s->n] = s->avgval;
//R.adval[s->ch] = s->out[s->n];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET);
TTSS_Task_end();
}
//移位滤波任务
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52
void L3_task_adc_filter_shift(S_TASK_ADC_BLUR_SHIFT *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET)
if(s->h != ts_adc_blur_avg[s->ch].n)
{
s->in = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)];
s->h = ts_adc_blur_avg[s->ch].n;
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT)
s->sum[0] -= s->shiftval[0];
s->sum[0] += s->in;
s->shiftval[0] = s->sum[0] >> s->shiftreg[0];
s->sum[1] -= s->shiftval[1];
s->sum[1] += s->in;
s->shiftval[1] = s->sum[1] >> s->shiftreg[1];
s->sum[2] -= s->shiftval[2];
s->sum[2] += s->in;
s->shiftval[2] = s->sum[2] >> s->shiftreg[2];
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT)
s->out[0][s->n] = s->shiftval[0];
s->out[1][s->n] = s->shiftval[1];
s->out[2][s->n] = s->shiftval[2];
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
TTSS_Task_end();
}
//输出判定任务
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET)
if(s->h != ts_adc_blur_shift[s->ch].n)
{
s->h = ts_adc_blur_shift[s->ch].n;
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)];
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)];
//获取输出曲线val
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)];
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
//判断选择新曲线
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
{
s->newnum = 0;
}
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
{
s->newnum = 1;
}
else
{
s->newnum = 2;
}
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE)
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
{
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0];
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout;
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1];
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout;
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2];
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout;
}
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT)
R.adval[s->ch] = s->newout;
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET);
TTSS_Task_end();
}
//显示任务
#define D_task_ADC_CHx_SHOW 0x50
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SHOW);
TTSS_Task_step(D_task_ADC_CHx_SHOW)
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]);
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]);
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]);
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]);
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
{
R.rough_weight = s->rough_weight;
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
}
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
TTSS_Task_end();
}
void L3_task_adc_handler(u8 ch)
{
L3_task_adc_channel_sample(&ts_adc_channel_samples[ch]);
//L3_task_adc_filter_mid(&ts_adc_blur_mid[ch]);
L3_task_adc_filter_avg(&ts_adc_blur_avg[ch]);
L3_task_adc_filter_shift(&ts_adc_blur_shift[ch]);
L3_task_adc_filter_out(&ts_adc_blur_out[ch]);
}

119
source/app/task_adc.h

@ -1,119 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_ADC_H
#define _APP_TASK_ADC_H
#include "../app/app_config.h"
#include "../ctask/task.h"
#include "../clib/clib.h"
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
//AD_CHANNEL_SAMPLE 采样
#define MAX_OUT_NUM 6
typedef struct _s_task_adc_channel_sample
{
TS_task task;
vU8 status;
vU8 ch;
vU32 adcval;
vU32 pool;
vU8 n;
vU32 out[MAX_OUT_NUM];
}S_TASK_ADC_CHANNEL_SAMPLE;
//AD_BLUR_MID 中值滤波
typedef struct _s_task_adc_blur_mid
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 midval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}S_TASK_ADC_BLUR_MID;
//AD_BLUR_AVG 均值滤波
typedef struct _s_task_adc_blur_avg
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 avgval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}S_TASK_ADC_BLUR_AVG;
//AD_BLUR_SHIFT 移位滤波
typedef struct _s_task_adc_blur_shift
{
TS_task task;
vU8 ch;
vU8 n;
vU8 h;
vU8 shiftreg[3];
//vU8 max;
vU32 in;
vU32 sum[3];
vU32 shiftval[3];
vU32 out[3][MAX_OUT_NUM];
}S_TASK_ADC_BLUR_SHIFT;
//AD_BLUR_DECIDE 输出判定
typedef struct _s_task_adc_blur_out
{
TS_task task;
vU8 ch;
vU32 in[2];
U32 threshold[2];
vU8 h;
vU8 oldnum;
vU8 newnum;
vU32 newout;
vU8 n;
}S_TASK_ADC_BLUR_OUT;
//AD_BLUR_SHOW 显示
typedef struct _s_task_adc_blur_show
{
TS_task task;
vU32 rough_weight;
}S_TASK_ADC_BLUR_SHOW;
extern S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM];
//extern S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_SHOW ts_adc_blur_show;
extern void L3_task_adc_init(U8 ch);
extern void L3_task_show_init(void);
extern void L3_task_adc_handler(U8 ch);
extern void L3_task_adc_init_handler(void);
extern void L3_task_adc_channel_switch_handler(void);
extern void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s);
#endif // #ifndef _APP_TASK_ADC_H

32
source/app/task_bled.c

@ -27,24 +27,46 @@ void L3_task_bled_init(void)
#define D_task_BLED_SET 0x50 #define D_task_BLED_SET 0x50
extern U16 L0_led_array_2_dat();
void L3_task_bled_handler(S_TASK_BLED *s) void L3_task_bled_handler(S_TASK_BLED *s)
{ {
TTSS_Task_init() TTSS_Task_init()
L2_task_go(D_task_BLED_SET); L2_task_go(D_task_BLED_SET);
// TTSS_Task_step(D_task_BLED_SET)
// //L0_uart0_sendArrayHex(R.led_status, 14);
// for(i=0;i<LED_BTN_NUM; i++)
// {
// //BLED_SET_STATUS(i, R.led_status[i]);
// bsp_bled_set(i, R.led_status[i]);
// }
// L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_200ms);
// //L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_1s);
// TTSS_Task_end();
TTSS_Task_step(D_task_BLED_SET) TTSS_Task_step(D_task_BLED_SET)
//L0_uart0_sendArrayHex(R.led_status, 14); //L0_uart0_sendArrayHex(R.led_status, 14);
for(i=0;i<LED_BTN_NUM; i++) //设置LED0
{ bsp_bled0_set(R.led_status[0]);
//BLED_SET_STATUS(i, R.led_status[i]); //其他其他LED
bsp_bled_set(i, R.led_status[i]); bsp_bled_set_multi(L0_led_array_2_dat());
}
L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_200ms); L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_200ms);
//L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_1s); //L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_1s);
TTSS_Task_end(); TTSS_Task_end();
} }
U16 L0_led_array_2_dat()
{
int i = 0;
U16 dat = 0;
for(i = 1; i < LED_BTN_NUM; i++)
{
dat |= (R.led_status[i] << (i-1));
}
return dat;
}

8
source/app/task_nfc.c

@ -14,7 +14,7 @@
#include "../app/app_config.h" #include "../app/app_config.h"
#include "../bsp/bsp_config.h" #include "../bsp/bsp_config.h"
#include "../msp/uart0.h" #include "../msp/uart0.h"
#include "../msp/uart2.h" #include "../msp/uart3.h"
S_TASK_NFC _s_task_nfc; S_TASK_NFC _s_task_nfc;
@ -33,9 +33,9 @@ void L3_task_nfc_handler(S_TASK_NFC *s)
L2_task_go(D_task_NFC_READ); L2_task_go(D_task_NFC_READ);
TTSS_Task_step(D_task_NFC_READ) TTSS_Task_step(D_task_NFC_READ)
if(ts_uart[uNum2].r.ok == 1) if(ts_uart[uNum3].r.ok == 1)
{ {
ts_uart[uNum2].r.ok = 0; ts_uart[uNum3].r.ok = 0;
parse_nfc_pkg(); parse_nfc_pkg();
} }
//send next //send next
@ -53,7 +53,7 @@ void L3_task_nfc_handler(S_TASK_NFC *s)
//校验:36 从起始帧到数据字段 [60 20 00 07 10 02 04 00 99 83 33 4E] 的所有字节的依次异或值 //校验:36 从起始帧到数据字段 [60 20 00 07 10 02 04 00 99 83 33 4E] 的所有字节的依次异或值
void parse_nfc_pkg() void parse_nfc_pkg()
{ {
TPC_NFC *p = (TPC_NFC *) ts_uart[uNum2].r.buf; TPC_NFC *p = (TPC_NFC *) ts_uart[uNum3].r.buf;
p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; p->ocr = p->buf[p->num[0] << 8 | p->num[1]];
if(p->head == 0x60 && 1 /*count_ocr() */) if(p->head == 0x60 && 1 /*count_ocr() */)
{ {

63
source/app/task_register.c

@ -1,63 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_register.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
//=============================================
S_TASK_REGVAL_LISTEN s_task_reglisten;
void L3_task_reglisten_init(void)
{
L1_task_init(&s_task_reglisten.task);
L3_task_s_go(s_task_reglisten,D_task_init);
}
//清零任务
#define D_task_WEIGHT_COUNT 0x50
#define D_task_IAP 0x51
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s)
{
TTSS_Task_init()
L2_task_go(D_task_WEIGHT_COUNT);
TTSS_Task_step(D_task_WEIGHT_COUNT)
if(R.zero != 0)
{
R.total_zweight = R.rough_weight; //皮重 = 毛重
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
R.zero = 0;
}
L2_task_go(D_task_IAP); //延时100ms
TTSS_Task_step(D_task_IAP)
if(R.status_eep_save != 0)
{
R.status_eep_save = 0;
L3_reg_2_iap();//写入IAP
}
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
TTSS_Task_end();
}

32
source/app/task_register.h

@ -1,32 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_REG_H
#define _APP_TASK_REG_H
#include "../ctask/task.h"
#include "../clib/clib.h"
typedef struct _s_task_reglisten
{
TS_task task;
}S_TASK_REGVAL_LISTEN;
extern S_TASK_REGVAL_LISTEN s_task_reglisten;
extern void L3_task_reglisten_init(void);
extern void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s);
#endif // #ifndef _APP_TASK_ADC_H

16
source/app/task_rfid.c

@ -14,7 +14,7 @@
#include "../app/app_config.h" #include "../app/app_config.h"
#include "../bsp/bsp_config.h" #include "../bsp/bsp_config.h"
#include "../msp/uart0.h" #include "../msp/uart0.h"
#include "../msp/uart3.h" #include "../msp/uart4.h"
S_TASK_RFID _s_task_rfid; S_TASK_RFID _s_task_rfid;
@ -45,24 +45,24 @@ void L3_task_rfid_handler(S_TASK_RFID *s)
L0_uart0_uchex(sizeof(rfidLoopRead) / sizeof(U8)); L0_uart0_uchex(sizeof(rfidLoopRead) / sizeof(U8));
//1.设置天线 //1.设置天线
L0_uart3_sendArray(rfidSetChannelCmd, sizeof(rfidSetChannelCmd) / sizeof(U8)); L0_uart4_sendArray(rfidSetChannelCmd, sizeof(rfidSetChannelCmd) / sizeof(U8));
NOP10(); NOP10();
//2.设置功率 //2.设置功率
L0_uart3_sendArray(rfidSetWCmd, sizeof(rfidSetWCmd) / sizeof(U8)); L0_uart4_sendArray(rfidSetWCmd, sizeof(rfidSetWCmd) / sizeof(U8));
NOP10(); NOP10();
//3.选择掩码 //3.选择掩码
L0_uart3_sendArray(rfidSelCmd, sizeof(rfidSelCmd) / sizeof(U8)); L0_uart4_sendArray(rfidSelCmd, sizeof(rfidSelCmd) / sizeof(U8));
NOP10(); NOP10();
//4.启动轮询 //4.启动轮询
L0_uart3_sendArray(rfidLoopRead, sizeof(rfidLoopRead) / sizeof(U8)); L0_uart4_sendArray(rfidLoopRead, sizeof(rfidLoopRead) / sizeof(U8));
NOP10(); NOP10();
L2_task_go(D_task_RFID_READ); L2_task_go(D_task_RFID_READ);
TTSS_Task_step(D_task_RFID_READ) TTSS_Task_step(D_task_RFID_READ)
if(ts_uart[uNum3].r.ok == 1) if(ts_uart[uNum4].r.ok == 1)
{ {
ts_uart[uNum3].r.ok = 0; ts_uart[uNum4].r.ok = 0;
parse_rfid_pkg(); parse_rfid_pkg();
} }
//read next //read next
@ -81,7 +81,7 @@ void L3_task_rfid_handler(S_TASK_RFID *s)
//帧尾:7E //帧尾:7E
void parse_rfid_pkg() void parse_rfid_pkg()
{ {
TPC_RFID *p = (TPC_RFID *) ts_uart[uNum3].r.buf; TPC_RFID *p = (TPC_RFID *) ts_uart[uNum4].r.buf;
p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; p->ocr = p->buf[p->num[0] << 8 | p->num[1]];
p->tail = p->buf[p->num[0] << 8 | p->num[1] + 1]; p->tail = p->buf[p->num[0] << 8 | p->num[1] + 1];
if(p->head == 0xBB && p->tail == 0x7E && 1 /*count_ocr() */) if(p->head == 0xBB && p->tail == 0x7E && 1 /*count_ocr() */)

10
source/app/task_rs485.c

@ -14,7 +14,7 @@
#include "../app/app_config.h" #include "../app/app_config.h"
#include "../bsp/bsp_config.h" #include "../bsp/bsp_config.h"
#include "../msp/uart0.h" #include "../msp/uart0.h"
#include "../msp/uart4.h" #include "../msp/uart2.h"
S_TASK_RS485 _s_task_rs485; S_TASK_RS485 _s_task_rs485;
TPC_RS485 tpc_rs485; TPC_RS485 tpc_rs485;
@ -41,9 +41,9 @@ void L3_task_rs485_handler(S_TASK_RS485 *s)
L2_task_go(D_task_RS485_READ); L2_task_go(D_task_RS485_READ);
TTSS_Task_step(D_task_RS485_READ) TTSS_Task_step(D_task_RS485_READ)
if(ts_uart[uNum4].r.ok == 1) if(ts_uart[uNum2].r.ok == 1)
{ {
ts_uart[uNum4].r.ok = 0; ts_uart[uNum2].r.ok = 0;
parse_rs485_pkg(); parse_rs485_pkg();
} }
//read next //read next
@ -61,7 +61,7 @@ void L3_task_rs485_handler(S_TASK_RS485 *s)
//OCR:1个字节,代表校验和, = 从SlaveId开始 - DATA结束的所有字节之和。 //OCR:1个字节,代表校验和, = 从SlaveId开始 - DATA结束的所有字节之和。
void parse_rs485_pkg() void parse_rs485_pkg()
{ {
TPC_RS485 *p = (TPC_RS485 *) ts_uart[uNum4].r.buf; TPC_RS485 *p = (TPC_RS485 *) ts_uart[uNum2].r.buf;
p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; p->ocr = p->buf[p->num[0] << 8 | p->num[1]];
if(p->head[0] == 0xAA && 1 /*count_ocr() */) if(p->head[0] == 0xAA && 1 /*count_ocr() */)
{ {
@ -94,7 +94,7 @@ void parse_rs485_pkg()
//构造响应包,并且返回 //构造响应包,并且返回
acklen = constructor_rs485_ack(); acklen = constructor_rs485_ack();
//写出 //写出
L0_uart4_sendArray((U8*)&tpc_rs485_ack, acklen); L0_uart2_sendArray((U8*)&tpc_rs485_ack, acklen);
//日志 //日志
print_rs485_pkg(p); print_rs485_pkg(p);
} }

6
source/bsp/bsp_config.c

@ -77,9 +77,9 @@ void L0_board_config(void)
BITN_0(P_SW2 ,BITN2);// rxd2 p1.0 txd2 p1.1 BITN_0(P_SW2 ,BITN2);// rxd2 p1.0 txd2 p1.1
#endif #endif
//485 RE/DE 配置推完输出 P00,P01 //485 RE/DE 配置推完输出 P47,P14
D_HighI_P0(BITN0); D_HighI_P4(BITN7);
D_HighI_P0(BITN1); D_HighI_P1(BITN4);
//WDT //WDT
#if (TYPE_WDT_ENABLE == D_WDT_STATUS) #if (TYPE_WDT_ENABLE == D_WDT_STATUS)

70
source/bsp/bsp_config.h

@ -82,32 +82,34 @@
#define D_uart0_SBIT SBIT_1 #define D_uart0_SBIT SBIT_1
#define D_PIN_UART0 PIN_UART0_Rxd_30_Txd_31 //RXD, TXD #define D_PIN_UART0 PIN_UART0_Rxd_30_Txd_31 //RXD, TXD
#define D_uart2_BRT BRT_115200 #define D_uart2_BRT BRT_115200
#define D_PIN_UART2 PIN_UART2_Rxd_46_Txd_47 //RXD2_2, TXD2_2 #define D_PIN_UART2 PIN_UART2_Rxd_10_Txd_11 //RXD2, TXD2
#define D_uart3_BRT BRT_115200 #define D_uart3_BRT BRT_115200
#define D_PIN_UART3 PIN_UART3_Rxd_50_Txd_51 //RXD3_2, TXD3_2 #define D_PIN_UART3 PIN_UART3_Rxd_00_Txd_01 //RXD3, TXD3
#define D_uart4_BRT BRT_115200 #define D_uart4_BRT BRT_115200
#define D_PIN_UART4 PIN_UART4_Rxd_02_Txd_03 //RXD4, TXD4 #define D_PIN_UART4 PIN_UART4_Rxd_02_Txd_03 //RXD4, TXD4
//485配置 //485配置
#define D_UART4_485_TYPE TYPE_485_SLAVER //UART4启用485 #define D_UART2_485_TYPE TYPE_485_SLAVER //UART4启用485
#if(D_UART4_485_TYPE == TYPE_485_SLAVER) #if(D_UART2_485_TYPE == TYPE_485_SLAVER)
#define D_UART4_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息 #define D_UART2_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息
#define D_UART4_485_SLAVER_ID 0x01 //板卡作为485从机 slaverId #define D_UART2_485_SLAVER_ID 0x03 //板卡作为485从机 slaverId
#endif #endif
#define D_UART4_485_TX() P01 = 1; P00=1; #define D_485_DE P47
#define D_UART4_485_RX() P01 = 0; P00=0; #define D_485_RE P14
#define D_UART2_485_TX() D_485_DE = 1; D_485_RE = 1;
#define D_UART2_485_RX() D_485_DE = 0; D_485_RE = 0;
#define D_UART0_485_TYPE TYPE_485_NONE //UART0不启用485 #define D_UART0_485_TYPE TYPE_485_NONE //UART0不启用485
#define D_UART0_485_TX() #define D_UART0_485_TX()
#define D_UART0_485_RX() #define D_UART0_485_RX()
#define D_UART2_485_TYPE TYPE_485_NONE //UART2不启用485 #define D_UART3_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART2_485_TX()
#define D_UART2_485_RX()
#define D_UART3_485_TYPE TYPE_485_NONE //UART3不启用485
#define D_UART3_485_TX() #define D_UART3_485_TX()
#define D_UART3_485_RX() #define D_UART3_485_RX()
#define D_UART4_485_TYPE TYPE_485_NONE //UART3不启用485
#define D_UART4_485_TX()
#define D_UART4_485_RX()
//MODBUS协议配置 //MODBUS协议配置
//#define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行 //#define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行
@ -124,34 +126,28 @@
#define BLED0_OFF 1 #define BLED0_OFF 1
//0 1 2 3 4 5 6 //0 1 2 3 4 5 6
//13 12 11 10 9 8 7 //13 12 11 10 9 8 7
#define BLED0 P42 //NET9 #define BLED0 P52 //NET9
#define BLED1 P41 //NET10
#define BLED2 P37 //NET11 //LED驱动芯片
#define BLED3 P35 //NET12 #define MBI_SDI P07
#define BLED4 P16 //NET13 #define MBI_CLK P06
#define BLED5 P15 //NET14 #define MBI_LE P05
#define BLED6 P14 //NET15 #define MBI_OE P53
#define BLED7 P47 //NET16
#define BLED8 P11 //NET17
#define BLED9 P26 //NET18
#define BLED10 P25 //NET19
#define BLED11 P21 //NET20
#define BLED12 P44 //NET21
#define BLED13 P22 //NET22
//K->Key, R->ROW, C->COL //K->Key, R->ROW, C->COL
#define KR1 P36 //NET1 #define KR1 P50 //NET1
#define KR2 P17 //NET2 #define KR2 P15 //NET2
#define KR3 P06 //NET3 #define KR3 P27 //NET3
#define KR4 P43 //NET4 #define KR4 P25 //NET4
#define KC1 P10 //NET5 #define KC1 P46 //NET5
#define KC2 P07 //NET6 #define KC2 P45 //NET6
#define KC3 P13 //NET7 #define KC3 P26 //NET7
#define KC4 P20 //NET8 #define KC4 P34 //NET8
//RFID EN -- 暂未定义 //RFID EN -- 暂未定义
#define RFID_ENABLE 1 #define RFID_ENABLE 1
#define RFID_DISABLE 0 #define RFID_DISABLE 0
#define RFID_EN_PIN P32 //RFID-EN >1.1v使能 #define RFID_EN_PIN P04 //RFID-EN >1.1v使能
//EEP存储地址定义 //EEP存储地址定义

10
source/bsp/bsp_key.c

@ -5,16 +5,6 @@ U32 timeout = 0x3FFFFF;
U8 bsp_key_init(void) U8 bsp_key_init(void)
{ {
D_stdIO_P3(BITN6);
D_stdIO_P1(BITN7);
D_stdIO_P0(BITN6);
D_stdIO_P4(BITN3);
D_stdIO_P1(BITN0);
D_stdIO_P0(BITN7);
D_stdIO_P1(BITN3);
D_stdIO_P2(BITN0);
//初始化为高电平 //初始化为高电平
KR1 = KR2 = KR3 = KR4 = 1; KR1 = KR2 = KR3 = KR4 = 1;
//初始化为高电平 //初始化为高电平

77
source/bsp/bsp_led.c

@ -2,29 +2,13 @@
void bsp_led_init(void) void bsp_led_init(void)
{ {
//LED0
D_stdIO_P2(BITN3);
//BLED0-13
D_stdIO_P4(BITN2);
D_stdIO_P4(BITN1);
D_stdIO_P3(BITN7);
D_stdIO_P3(BITN5);
D_stdIO_P1(BITN6);
D_stdIO_P1(BITN5);
D_stdIO_P1(BITN4);
D_stdIO_P4(BITN7);
D_stdIO_P1(BITN1);
D_stdIO_P2(BITN6);
D_stdIO_P2(BITN5);
D_stdIO_P2(BITN1);
D_stdIO_P4(BITN4);
D_stdIO_P2(BITN2);
//初始化 //初始化
BLED0 = BLED1 = BLED2 = BLED3 = BLED4 = BLED5 = BLED6 = BLED0_OFF;
BLED7 = BLED8 = BLED9 = BLED10 = BLED11 = BLED12 = BLED13 = BLED0_OFF;
LED0 = LED0_OFF; LED0 = LED0_OFF;
BLED0 = BLED0_OFF;
//BLED1 = BLED2 = BLED3 = BLED4 = BLED5 = BLED6 = BLED0_OFF;
//BLED7 = BLED8 = BLED9 = BLED10 = BLED11 = BLED12 = BLED13 = BLED0_OFF;
MBI_CLK = 0;
MBI_SDI = 0;
} }
void bsp_led_set(U8 status) void bsp_led_set(U8 status)
@ -32,24 +16,37 @@ void bsp_led_set(U8 status)
LED0 = status; LED0 = status;
} }
void bsp_bled_set(U8 index, U8 status) void bsp_bled0_set(U8 status)
{
BLED0 = status;
}
extern void delay(unsigned int i);
void bsp_bled_set_multi(unsigned int dat)
{
unsigned char i;
//其他led通过芯片驱动
for(i=0; i<16; i++)
{
MBI_SDI = (dat & 0x8000) ? 1 : 0;
MBI_CLK = 1;
dat <<= 1;
MBI_CLK = 0;
}
//锁存
MBI_LE = 1;
delay(100);
MBI_LE = 0;
//输出
delay(1000);
MBI_OE = 0;
}
void delay(unsigned int i)
{ {
switch (index) while(i>0)
{ i--;
case 0: BLED0 = status; break;
case 1: BLED1 = status; break;
case 2: BLED2 = status; break;
case 3: BLED3 = status; break;
case 4: BLED4 = status; break;
case 5: BLED5 = status; break;
case 6: BLED6 = status; break;
case 7: BLED7 = status; break;
case 8: BLED8 = status; break;
case 9: BLED9 = status; break;
case 10:BLED10 = status; break;
case 11:BLED11 = status; break;
case 12:BLED12 = status; break;
case 13:BLED13 = status; break;
default: break;
}
} }

3
source/bsp/bsp_led.h

@ -4,8 +4,9 @@
#include "bsp_config.h" #include "bsp_config.h"
extern void bsp_led_init(void); extern void bsp_led_init(void);
extern void bsp_bled_set(U8 index, U8 status);
extern void bsp_led_set(U8 status); extern void bsp_led_set(U8 status);
extern void bsp_bled0_set(U8 status);
extern void bsp_bled_set_multi(unsigned int dat);
#define BLED_SET_STATUS(N, status); do { \ #define BLED_SET_STATUS(N, status); do { \
BLED##N = status; \ BLED##N = status; \

1
source/bsp/bsp_rfid.c

@ -3,7 +3,6 @@
U8 bsp_rfid_init(void) U8 bsp_rfid_init(void)
{ {
D_stdIO_P3(BITN2);
bsp_rfid_en(RFID_ENABLE); bsp_rfid_en(RFID_ENABLE);
return 0; return 0;
} }

Loading…
Cancel
Save