第一次提交
This commit is contained in:
123
App/app_get_json.c
Normal file
123
App/app_get_json.c
Normal file
@@ -0,0 +1,123 @@
|
||||
#include "app_get_json.h"
|
||||
#include "cJSON.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include <stdlib.h> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>atoi<6F><69><EFBFBD><EFBFBD>
|
||||
#include "app_scan.h"
|
||||
|
||||
uint8_t uart_rx_buffer[1024];
|
||||
cJSON *cjson = NULL;
|
||||
int Max_resis;
|
||||
int Min_resis;
|
||||
int Div_resis;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD>鵽uint8_t<5F><74><EFBFBD><EFBFBD>
|
||||
// json_arr: cJSON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, arr: Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, max_len: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void parse_json_array(cJSON *json_item, uint8_t *arr, int max_len) {
|
||||
// 1. <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
memset(arr, 0, max_len * sizeof(uint8_t));
|
||||
|
||||
// 2. <20><><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>
|
||||
if (json_item == NULL || !cJSON_IsString(json_item) || json_item->valuestring == NULL) {
|
||||
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
|
||||
}
|
||||
|
||||
// 3. <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭJSON<4F><4E><EFBFBD>ݣ<EFBFBD>
|
||||
char temp_buf[64] = {0}; // <20>㹻<EFBFBD><E3B9BB><EFBFBD><EFBFBD>12<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD>ŵij<C5B5><C4B3><EFBFBD>
|
||||
strncpy(temp_buf, json_item->valuestring, sizeof(temp_buf) - 1);
|
||||
|
||||
// 4. <20><><EFBFBD><EFBFBD><EFBFBD>ŷָ<C5B7><D6B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char *token = strtok(temp_buf, ",");
|
||||
int idx = 0;
|
||||
while (token != NULL && idx < max_len) {
|
||||
// <20>ѷָ<D1B7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>תΪ<D7AA><CEAA><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
arr[idx++] = (uint8_t)atoi(token);
|
||||
token = strtok(NULL, ",");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int get_Json_data(json_data_struct * sys){
|
||||
int result = -1; // 1 <20><>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
uint16_t uart_get_num = usart_rx_get_rx_data_count(USART_3_TR);
|
||||
|
||||
// ֻ<>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><C5BD>н<EFBFBD><D0BD><EFBFBD>
|
||||
if(uart_get_num > 0 && uart_get_num < sizeof(uart_rx_buffer)){ // <20><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t get_size = usart_rx_recv(USART_3_TR, uart_rx_buffer, uart_get_num);
|
||||
|
||||
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
|
||||
if(get_size != uart_get_num){
|
||||
memset(uart_rx_buffer, 0, sizeof(uart_rx_buffer)); // <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
return -2; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>ͷ<EFBFBD>֮ǰ<D6AE><C7B0>cJSON<4F>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>й©
|
||||
if(cjson != NULL ){
|
||||
cJSON_Delete(cjson);
|
||||
cjson = NULL; // <20>ͷź<CDB7><C5BA>ÿգ<C3BF><D5A3><EFBFBD><EFBFBD><EFBFBD>Ұָ<D2B0><D6B8>
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>JSON<4F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪcJSON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cjson = cJSON_Parse((const char*)uart_rx_buffer);
|
||||
memset(uart_rx_buffer, 0, sizeof(uart_rx_buffer));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (cjson != NULL) {
|
||||
// 2. <20><><EFBFBD>λ<EFBFBD>ȡJSON<4F>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
cJSON *Max_resis_item = cJSON_GetObjectItem(cjson, "Max_resis");
|
||||
cJSON *Min_resis_item = cJSON_GetObjectItem(cjson, "Min_resis");
|
||||
cJSON *Div_resis_item = cJSON_GetObjectItem(cjson, "Div_resis");
|
||||
|
||||
|
||||
cJSON *x_rank_arr = cJSON_GetObjectItem(cjson, "x_rank");
|
||||
cJSON *y_rank_arr = cJSON_GetObjectItem(cjson, "y_rank");
|
||||
if(x_rank_arr != NULL && y_rank_arr != NULL)
|
||||
{
|
||||
uint8_t x_rank[12] = {0};
|
||||
parse_json_array(x_rank_arr, x_rank, 12);
|
||||
|
||||
// 3. ֱ<>ӽ<EFBFBD><D3BD><EFBFBD>y_rank JSON<4F><4E><EFBFBD><EFBFBD>
|
||||
|
||||
uint8_t y_rank[12] = {0};
|
||||
parse_json_array(y_rank_arr, y_rank, 12);
|
||||
|
||||
// 4. <20><><EFBFBD>ñ<EFBFBD><C3B1>溯<EFBFBD><E6BAAF>
|
||||
save_config_ranks(x_rank, y_rank);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ֶ<EFBFBD><D6B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E>ֵ<EFBFBD><D6B5><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
|
||||
if(Max_resis_item != NULL && cJSON_IsString(Max_resis_item) &&
|
||||
Min_resis_item != NULL && cJSON_IsString(Min_resis_item) &&
|
||||
Div_resis_item != NULL && cJSON_IsString(Div_resis_item))
|
||||
{
|
||||
// 3. <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵת<D6B5><D7AA>Ϊint<6E><74><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>
|
||||
Max_resis = atoi(Max_resis_item->valuestring);
|
||||
Min_resis = atoi(Min_resis_item->valuestring);
|
||||
Div_resis = atoi(Div_resis_item->valuestring);
|
||||
sys->max_trigger_res_value = Max_resis;
|
||||
sys->min_trigger_res_value = Min_resis;
|
||||
sys->div_trigger_res = Div_resis;
|
||||
result = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
||||
}
|
||||
else{
|
||||
result = -3; // <20>ֶ<EFBFBD>ȱʧ<C8B1><CAA7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
|
||||
}
|
||||
|
||||
// 4. <20><><EFBFBD><EFBFBD>cJSON<4F>ڴ棨<DAB4><E6A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>й©<D0B9><C2A9>
|
||||
cJSON_Delete(cjson);
|
||||
cjson = NULL; // <20>ÿգ<C3BF><D5A3><EFBFBD>ֹ<EFBFBD>ظ<EFBFBD><D8B8>ͷ<EFBFBD>
|
||||
}
|
||||
else{
|
||||
result = -4; // JSON<4F><4E>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><F3A3ACBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>մ<EFBFBD><D5B4>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD>
|
||||
|
||||
}
|
||||
else{
|
||||
result = -5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
31
App/app_get_json.h
Normal file
31
App/app_get_json.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef _APP_GET_JSON_H
|
||||
#define _APP_GET_JSON_H
|
||||
#include "stdint.h"
|
||||
#include "cJSON.h"
|
||||
|
||||
#pragma pack (1)
|
||||
typedef struct
|
||||
{
|
||||
uint16_t output_mode;
|
||||
uint16_t output_ax;
|
||||
uint16_t output_ay;
|
||||
uint16_t min_trigger_res_value;
|
||||
uint16_t max_trigger_res_value;
|
||||
uint16_t div_trigger_res;
|
||||
}json_data_struct;
|
||||
|
||||
typedef int (*json_cmd_handle)(void *data);
|
||||
|
||||
typedef struct json_callback_struct
|
||||
{
|
||||
char * name; //json<6F><6E>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
json_cmd_handle handle; //<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct json_callback_struct *child_ptr; //<2F><>Ŀ¼
|
||||
uint8_t child_num; //<2F><>Ŀ¼<C4BF><C2BC>Ŀ
|
||||
}json_callback_t;
|
||||
#pragma pack ()
|
||||
|
||||
int get_Json_data(json_data_struct * sys);
|
||||
cJSON* creat_body_json(uint8_t style,int coor_x, int coor_y);
|
||||
|
||||
#endif
|
||||
398
App/app_math_info.c
Normal file
398
App/app_math_info.c
Normal file
@@ -0,0 +1,398 @@
|
||||
#include "app_math_info.h"
|
||||
|
||||
uint8_t frame_state =0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>֡״̬
|
||||
uint8_t cali_frame_state =0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уָ<D7BC><D6B8>֡״̬
|
||||
|
||||
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģʽ<C4A3><CABD>Ĭ<EFBFBD><C4AC>״̬ģʽ<C4A3><CABD>
|
||||
ARRAY_RESI_INIT_MODE_TYPE_T resi_init_mode = STATE;
|
||||
|
||||
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уģʽ<C4A3><CABD>Ĭ<EFBFBD>ϳ<EFBFBD>ʼ״̬<D7B4><CCAC>
|
||||
ARRAY_RESI_CALI_MODE_TYPE_T resi_cali_mode = CALI_INIT;
|
||||
|
||||
uint8_t array_resi_init_params_read_buf[MAX_BUF_SIZE] = {0};
|
||||
uint8_t array_resi_init_params_write_buf[MAX_BUF_SIZE] = {0};
|
||||
|
||||
|
||||
|
||||
// У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>Y<EFBFBD>ᣩ
|
||||
uint8_t cali_adc_params[CALI_POINT_NUM * AX_NUM * AY_NUM] = {0};
|
||||
|
||||
// ȫ<>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t array_resi_cali_params_write_buf[MAX_BUF_SIZE] = {0};
|
||||
uint8_t array_resi_cali_params_read_buf[MAX_BUF_SIZE] = {0};
|
||||
|
||||
uint8_t success_protocal[ARRAY_RESI_INIT_PARAMS_LEN] = {0x6F,0x6F,0x6F,0x6B,0x6B,0x6B};
|
||||
uint8_t fail_protocal[ARRAY_RESI_INIT_PARAMS_LEN] = {0x6E,0x6E,0x6E,0x6F,0x6F,0x6F};
|
||||
//static uint8_t static_protocal[ARRAY_RESI_INIT_PARAMS_LEN] = {0};
|
||||
//extern uint8_t adc_read_sw;
|
||||
/**
|
||||
* <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽ
|
||||
* @param state<74><65>ģʽ<C4A3><CABD>STATE/DATA<54><41>
|
||||
*/
|
||||
void set_array_resi_init_mode_type(ARRAY_RESI_INIT_MODE_TYPE_T state)
|
||||
{
|
||||
resi_init_mode = state;
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽ
|
||||
* @return <20><>ǰģʽ
|
||||
*/
|
||||
ARRAY_RESI_INIT_MODE_TYPE_T get_resi_array_init_mode_type(void)
|
||||
{
|
||||
return resi_init_mode;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уģʽ
|
||||
* @param state<74><65>ģʽ<C4A3><CABD>CALI_SUCCESS/CALI_FAIL<49>ȣ<EFBFBD>
|
||||
*/
|
||||
void set_array_resi_cali_mode_type(ARRAY_RESI_CALI_MODE_TYPE_T state)
|
||||
{
|
||||
resi_cali_mode = state;
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уģʽ
|
||||
* @return <20><>ǰģʽ
|
||||
*/
|
||||
ARRAY_RESI_CALI_MODE_TYPE_T get_resi_array_cali_mode_type(void)
|
||||
{
|
||||
return resi_cali_mode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint8_t array_resi_params_write(mx_frame_struct *buf)
|
||||
{
|
||||
mx_frame_struct frame;
|
||||
|
||||
// 1. <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t min_resi = (buf->data[1] << 8) | buf->data[0];
|
||||
uint16_t max_resi = (buf->data[3] << 8) | buf->data[2];
|
||||
uint16_t ref_resi = (buf->data[5] << 8) | buf->data[4];
|
||||
|
||||
//printf("min_resi is %d, %d %d\n",min_resi,max_resi,ref_resi);
|
||||
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
if(min_resi >= max_resi) {
|
||||
frame.trantype = 0x04;
|
||||
set_array_resi_init_mode_type(STATE);
|
||||
frame.type = get_resi_array_init_mode_type();
|
||||
frame.data = fail_protocal;
|
||||
frame.datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, &frame);
|
||||
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
||||
}
|
||||
|
||||
// 3. ? <20><><EFBFBD>µ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
g_sys_config.min_trigger_res_value = min_resi;
|
||||
g_sys_config.max_trigger_res_value = max_resi;
|
||||
g_sys_config.div_trigger_res = ref_resi;
|
||||
|
||||
// 4. Ӧ<>õ<EFBFBD><C3B5><EFBFBD>ѧ<EFBFBD><D1A7>
|
||||
// math_resi_init(max_resi, min_resi, ref_resi, MAX_ADC_VALUE, DEFAULT_MAX_DISPLAY_VALUE);
|
||||
// min_trigger_res_value1
|
||||
math_resi_init(g_sys_config.max_trigger_res_value, g_sys_config.min_trigger_res_value, g_sys_config.div_trigger_res, 4096, 255);
|
||||
|
||||
// 5. <20><><EFBFBD>ͳɹ<CDB3>Ӧ<EFBFBD><D3A6>
|
||||
frame.trantype = 0x04;
|
||||
set_array_resi_init_mode_type(DATA);
|
||||
frame.type = get_resi_array_init_mode_type();
|
||||
frame.data = success_protocal;
|
||||
frame.datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, &frame);
|
||||
|
||||
return 1; // <20>ɹ<EFBFBD>
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash
|
||||
* @brief <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2>־û<D6BE><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t array_resi_params_save(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
// 1. <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static uint16_t min_resi=0;
|
||||
static uint16_t max_resi=0;
|
||||
static uint16_t ref_resi=0;
|
||||
min_resi = (frame->data[1] << 8) | frame->data[0];
|
||||
max_resi = (frame->data[3] << 8) | frame->data[2];
|
||||
ref_resi = (frame->data[5] << 8) | frame->data[4];
|
||||
//printf("%d, %d %d\n",min_resi,max_resi,ref_resi);
|
||||
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
if(min_resi > max_resi) {
|
||||
frame->trantype = 0x04;
|
||||
set_array_resi_init_mode_type(STATE);
|
||||
frame->type = get_resi_array_init_mode_type();
|
||||
frame->data = fail_protocal;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
|
||||
}
|
||||
|
||||
// 3. ? <20><><EFBFBD>µ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
g_sys_config.min_trigger_res_value = min_resi;
|
||||
g_sys_config.max_trigger_res_value = max_resi;
|
||||
g_sys_config.div_trigger_res = ref_resi;
|
||||
|
||||
// 4. <20><><EFBFBD>浽Flash<73><68>ʹ<EFBFBD><CAB9>ͳһ<CDB3>ӿڣ<D3BF>
|
||||
if(save_sys_config(&g_sys_config) != 0) {
|
||||
frame->trantype = 0x04;
|
||||
set_array_resi_init_mode_type(STATE);
|
||||
frame->type = get_resi_array_init_mode_type();
|
||||
frame->data = fail_protocal;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
}
|
||||
|
||||
delay_ms(5); // <20>ȴ<EFBFBD>Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// 5.<2E><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if(load_config_params(&g_flash_para) == 1) {
|
||||
// <20><>֤<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
||||
// math_resi_init(max_resi, min_resi, ref_resi, MAX_ADC_VALUE, DEFAULT_MAX_DISPLAY_VALUE);
|
||||
math_resi_init(g_sys_config.max_trigger_res_value, g_sys_config.min_trigger_res_value, g_sys_config.div_trigger_res, 4096, 255);
|
||||
|
||||
frame->trantype = 0x04;
|
||||
set_array_resi_init_mode_type(STATE);
|
||||
frame->type = get_resi_array_init_mode_type();
|
||||
frame->data = success_protocal;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
frame->trantype = 0x04;
|
||||
set_array_resi_init_mode_type(STATE);
|
||||
frame->type = get_resi_array_init_mode_type();
|
||||
frame->data = fail_protocal;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5>
|
||||
* @brief <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t clear_array_init_info(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
|
||||
// 1. ? <><D7BC>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> default_config <20><>ȡ<EFBFBD><C8A1>
|
||||
uint8_t temp_data[6];
|
||||
temp_data[0] = default_config.min_trigger_res_value & 0xFF;
|
||||
temp_data[1] = (default_config.min_trigger_res_value >> 8) & 0xFF;
|
||||
temp_data[2] = default_config.max_trigger_res_value & 0xFF;
|
||||
temp_data[3] = (default_config.max_trigger_res_value >> 8) & 0xFF;
|
||||
temp_data[4] = default_config.div_trigger_res & 0xFF;
|
||||
temp_data[5] = (default_config.div_trigger_res >> 8) & 0xFF;
|
||||
|
||||
// 2. <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> frame->data <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> array_resi_params_write
|
||||
frame->data = temp_data;
|
||||
array_resi_params_write(frame); // Ӧ<><D3A6>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
||||
|
||||
// 3. ? <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ã<EFBFBD>ʹ<EFBFBD>õײ<C3B5><D7B2>ӿڣ<D3BF>
|
||||
flash_erase(FMC_WRITE_START_ADDR);
|
||||
|
||||
// 4. <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
|
||||
uint16_t verify_buf[3];
|
||||
flash_read(FMC_WRITE_START_ADDR, verify_buf, 3);
|
||||
|
||||
frame->trantype = 0x04;
|
||||
set_array_resi_init_mode_type(STATE);
|
||||
frame->type = get_resi_array_init_mode_type();
|
||||
|
||||
if(verify_buf[0] == 0xFFFF && verify_buf[1] == 0xFFFF && verify_buf[2] == 0xFFFF) {
|
||||
frame->data = success_protocal;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
return 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
}
|
||||
else {
|
||||
frame->data = fail_protocal;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
return 0; // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t return_array_resi_init_info(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
|
||||
// 1. ? <><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD> g_sys_config <20><>ȡ<EFBFBD><C8A1>
|
||||
static uint8_t response_data[6];
|
||||
response_data[0] = g_sys_config.min_trigger_res_value & 0xFF;
|
||||
response_data[1] = (g_sys_config.min_trigger_res_value >> 8) & 0xFF;
|
||||
response_data[2] = g_sys_config.max_trigger_res_value & 0xFF;
|
||||
response_data[3] = (g_sys_config.max_trigger_res_value >> 8) & 0xFF;
|
||||
response_data[4] = g_sys_config.div_trigger_res & 0xFF;
|
||||
response_data[5] = (g_sys_config.div_trigger_res >> 8) & 0xFF;
|
||||
|
||||
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set_array_resi_init_mode_type(DATA);
|
||||
frame->trantype = 0x04;
|
||||
frame->type = get_resi_array_init_mode_type();
|
||||
frame->data = response_data;
|
||||
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
|
||||
mx_serial_tx_frame(USART_3_TR,frame);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 0x03 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/**
|
||||
* @brief д<><D0B4>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱӦ<CAB1>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>浽Flash<73><68>
|
||||
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
|
||||
*/
|
||||
void math_resi_array_cali_write(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
uint8_t empty_data = 0;
|
||||
|
||||
// 1. ? ֱ<>Ӹ<EFBFBD><D3B8>Ƶ<EFBFBD>map_sys<79><73>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(frame->datalen == ((CALI_POINT_NUM * AX_NUM*AY_NUM)+ 6)){
|
||||
memcpy(map_sys.map_matrix, frame->data, CALI_POINT_NUM * AX_NUM*AY_NUM);
|
||||
set_array_resi_cali_mode_type(CALI_SUCCESS);
|
||||
}
|
||||
else {
|
||||
set_array_resi_cali_mode_type(CALI_FAIL);
|
||||
}
|
||||
|
||||
// 2. <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
||||
frame->trantype = 0x03;
|
||||
frame->type = get_resi_array_cali_mode_type();
|
||||
frame->data = &empty_data;
|
||||
frame->datalen = 1;
|
||||
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash
|
||||
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
|
||||
*/
|
||||
void math_resi_array_cali_save(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
uint8_t empty_data = 0;
|
||||
flash_map_struct verify_map;
|
||||
|
||||
// 1. ? <20><><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD>ݵ<EFBFBD>map_sys
|
||||
if(frame->datalen != ((CALI_POINT_NUM * AX_NUM*AY_NUM)+6)) {
|
||||
set_array_resi_cali_mode_type(CALI_FAIL);
|
||||
goto send_response;
|
||||
}
|
||||
|
||||
memcpy(map_sys.map_matrix, frame->data, CALI_POINT_NUM * AX_NUM*AY_NUM);
|
||||
|
||||
// 2. <20><><EFBFBD><EFBFBD>FlashУ<D0A3><D7BC><EFBFBD><EFBFBD>
|
||||
flash_erase(FMC_WRITE_MAP_ADDR);
|
||||
|
||||
// 3. ʹ<><CAB9>ͳһ<CDB3>ӿڱ<D3BF><DAB1>浽Flash
|
||||
if(save_config_maps(&map_sys) != 0) {
|
||||
set_array_resi_cali_mode_type(CALI_FAIL);
|
||||
goto send_response;
|
||||
}
|
||||
|
||||
delay_ms(2); // <20>ȴ<EFBFBD>Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// 4. <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2>ȶ<EFBFBD>
|
||||
if(load_config_maps(&verify_map) != 1) {
|
||||
set_array_resi_cali_mode_type(CALI_FAIL);
|
||||
goto send_response;
|
||||
}
|
||||
|
||||
// 5. <20><>֤<EFBFBD>ؼ<EFBFBD>У<D0A3>㣨ǰ3<C7B0><33>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7B8>㣩
|
||||
if(verify_map.map_matrix[0] != 0xFF &&
|
||||
verify_map.map_matrix[AX_NUM*AY_NUM] != 0xFF &&
|
||||
verify_map.map_matrix[2 * AX_NUM*AY_NUM] != 0xFF) {
|
||||
set_array_resi_cali_mode_type(CALI_SUCCESS);
|
||||
}
|
||||
else {
|
||||
set_array_resi_cali_mode_type(CALI_FAIL);
|
||||
}
|
||||
|
||||
send_response:
|
||||
// 6. <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
||||
|
||||
frame->trantype = 0x03;
|
||||
frame->type = get_resi_array_cali_mode_type();
|
||||
frame->data = &empty_data;
|
||||
frame->datalen = 1;
|
||||
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ӳ<EFBFBD>䣩
|
||||
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
|
||||
* @return 1=<3D>ɹ<EFBFBD>, 0=ʧ<><CAA7>
|
||||
*/
|
||||
uint8_t cali_params_clear(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
uint8_t empty_data = 0;
|
||||
uint16_t verify_buf[3];
|
||||
|
||||
frame->trantype = 0x03;
|
||||
frame->data = &empty_data;
|
||||
frame->datalen = 1;
|
||||
|
||||
// 1. ? <20><><EFBFBD><EFBFBD>FlashУ<D0A3><D7BC><EFBFBD><EFBFBD>
|
||||
flash_erase(FMC_WRITE_MAP_ADDR);
|
||||
memset(map_sys.map_matrix, 0, sizeof(map_sys.map_matrix));
|
||||
// 2. ? <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡǰ3<C7B0><33><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
|
||||
flash_read(FMC_WRITE_MAP_ADDR, verify_buf, 3);
|
||||
|
||||
if(verify_buf[0] == 0xFFFF && verify_buf[1] == 0xFFFF && verify_buf[2] == 0xFFFF) {
|
||||
// 3. ? <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RAM
|
||||
|
||||
memcpy(map_matrix_init, map_sys.map_matrix, sizeof(map_matrix_init));
|
||||
|
||||
set_array_resi_cali_mode_type(CALI_SUCCESS);
|
||||
frame->type = get_resi_array_cali_mode_type();
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
set_array_resi_cali_mode_type(CALI_FAIL);
|
||||
frame->type = get_resi_array_cali_mode_type();
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>ص<EFBFBD>ǰУ<D0A3><D7BC><EFBFBD><EFBFBD>
|
||||
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
|
||||
*/
|
||||
void cali_params_return(void *buf)
|
||||
{
|
||||
mx_frame_struct *frame = (mx_frame_struct *)buf;
|
||||
|
||||
frame->trantype = 0x03;
|
||||
set_array_resi_cali_mode_type(CALI_RETURN);
|
||||
frame->type = get_resi_array_cali_mode_type();
|
||||
|
||||
|
||||
frame->data = map_sys.map_matrix;
|
||||
frame->datalen = CALI_POINT_NUM * AX_NUM * AY_NUM;
|
||||
|
||||
mx_serial_tx_frame(USART_3_TR, frame);
|
||||
}
|
||||
121
App/app_math_info.h
Normal file
121
App/app_math_info.h
Normal file
@@ -0,0 +1,121 @@
|
||||
#ifndef __APP_MATH_INFO_H
|
||||
#define __APP_MATH_INFO_H
|
||||
#include "at32a423.h"
|
||||
#include "at32a423_clock.h"
|
||||
#include "systick.h"
|
||||
#include "sysconfig.h"
|
||||
#include "main.h"
|
||||
|
||||
#include "bsp_flash.h"
|
||||
|
||||
#include "bsp_uart.h"
|
||||
|
||||
#include "string.h"
|
||||
#include "stdint.h"
|
||||
|
||||
#include "mx_frame_core.h"
|
||||
#include "mx_serial.h"
|
||||
#include "cali_process.h"
|
||||
#include "resi_math_lib.h"
|
||||
|
||||
#define CALI_POINT_NUM 3
|
||||
#define SINGLE_MATH_CALI_PARAMS_PARAMS_SECTOR_SIZE 1 // flash<73><68>С
|
||||
#define ARRAY_RESI_INIT_PARAMS_LEN 6 //<2F><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
||||
#define DEFAULT_MIN_DISPLAY_VALUE 0 // Ĭ<><C4AC><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ʾֵ
|
||||
#define DEFAULT_MAX_DISPLAY_VALUE 255 // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֵ
|
||||
#define MAX_ADC_VALUE 4095 // ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>12λADC<44><43>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ĭ<EFBFBD><C4AC>ֵ
|
||||
#define DEFAULT_MIN_RESI_INIT_VALUE 2100 // Ĭ<><C4AC><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ
|
||||
#define DEFAULT_MAX_RESI_INIT_VALUE 25000 // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ
|
||||
#define DEFAULT_DIVID_RESI_VALUE 2700 // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ѹֵ
|
||||
|
||||
|
||||
|
||||
#define MAX_BUF_SIZE (CALI_POINT_NUM * AX_NUM * AY_NUM)
|
||||
|
||||
|
||||
#define ARRAY_RESI_INIT_PARAMS_ADDRS 0x0800B800
|
||||
|
||||
// ֡ͷ<D6A1><CDB7>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡ͬ<D6A1><CDAC><EFBFBD><EFBFBD>
|
||||
#define HEAD 0xA55A
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>壨<EFBFBD><E5A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>֡<EFBFBD><D6A1>
|
||||
#define ARRAY_RESI_INIT_TRAN_TYPE 0x04 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define ARRAY_RESI_VALUE_RETURN_CMD 0x2F // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define INIT_RESI_WRITE_CMD 0x3F // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define INIT_RESI_SAVE_CMD 0x3D // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>豣<EFBFBD><E8B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define INIT_RESI_CLEAR_CMD 0x1A // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define SINGLE_RESI_CALI_TRAN_TYPE 0x03 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SINGLE_CALI_RESI_WRITE_CMD 0x3F // <20><><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SINGLE_CALI_RESI_SAVE_CMD 0x3D // <20><><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD>豣<EFBFBD><E8B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define CALI_RESI_VALUE_RETURN_CMD 0x2F // У<D0A3><D7BC><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SINGLE_CALI_RESI_CLEAR_CMD 0x1A // <20><><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
extern uint8_t array_resi_init_params_read_buf[MAX_BUF_SIZE];
|
||||
extern uint8_t array_resi_init_params_write_buf[MAX_BUF_SIZE];
|
||||
|
||||
extern uint8_t array_resi_cali_params_write_buf[MAX_BUF_SIZE];
|
||||
extern uint8_t array_resi_cali_params_read_buf[MAX_BUF_SIZE];
|
||||
|
||||
extern uint8_t success_protocal[ARRAY_RESI_INIT_PARAMS_LEN];
|
||||
extern uint8_t fail_protocal[ARRAY_RESI_INIT_PARAMS_LEN];
|
||||
|
||||
//extern uint8_t success_protocal[ARRAY_RESI_INIT_PARAMS_LEN];
|
||||
//extern uint8_t fail_protocal[ARRAY_RESI_INIT_PARAMS_LEN];
|
||||
|
||||
extern uint8_t frame_state;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>֡״̬
|
||||
extern uint8_t cali_frame_state;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уָ<D7BC><D6B8>֡״̬
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽö<CABD>٣<EFBFBD><D9A3><EFBFBD><EFBFBD>ڱ<EFBFBD>ʶ<EFBFBD><CAB6>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC>
|
||||
typedef enum{
|
||||
STATE = 0x73, // ״̬ģʽ<C4A3><CABD>0x73<37><33>'s'<27><>ASCII<49>룩
|
||||
DATA = 0x64, // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0x64<36><34>'d'<27><>ASCII<49>룩
|
||||
}ARRAY_RESI_INIT_MODE_TYPE_T;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уģʽö<CABD>٣<EFBFBD><D9A3><EFBFBD><EFBFBD>ڱ<EFBFBD>ʶУ״̬<D7B4><CCAC>
|
||||
typedef enum{
|
||||
CALI_SUCCESS = 0x01, // У<D0A3>ɹ<EFBFBD>
|
||||
CALI_FAIL = 0x02, // Уʧ<D7BC><CAA7>
|
||||
CALI_INIT = 0x00, // У<D0A3><D7BC>ʼ״̬
|
||||
CALI_RETURN = 0x4F, // У<D0A3><D7BC><EFBFBD>أ<EFBFBD>0x4F<34><46>'O'<27><>ASCII<49>룩
|
||||
}ARRAY_RESI_CALI_MODE_TYPE_T;
|
||||
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>֡<EFBFBD>ṹ
|
||||
typedef struct{
|
||||
uint16_t sof; // ֡ͷ
|
||||
uint8_t tran_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t len; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
uint8_t mode; // Уģʽ
|
||||
uint8_t cali_params[3 * AX_NUM * AY_NUM]; // У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>Y<EFBFBD>ᣩ
|
||||
uint16_t checksum; // У<><D0A3><EFBFBD><EFBFBD>
|
||||
}ARRAY_RESI_CALI_DATA_RETURN_SERIAL_FRAME_T;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽ
|
||||
void set_array_resi_init_mode_type(ARRAY_RESI_INIT_MODE_TYPE_T state);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽ
|
||||
ARRAY_RESI_INIT_MODE_TYPE_T get_resi_array_init_mode_type(void);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ
|
||||
uint8_t return_array_resi_init_info(void *buf);
|
||||
|
||||
void set_array_resi_cali_mode_type(ARRAY_RESI_CALI_MODE_TYPE_T state);
|
||||
|
||||
ARRAY_RESI_CALI_MODE_TYPE_T get_resi_array_cali_mode_type(void);
|
||||
|
||||
uint8_t array_resi_params_write(mx_frame_struct *buf);
|
||||
uint8_t array_resi_params_save(void *buf);
|
||||
uint8_t clear_array_init_info(void *buf);
|
||||
void math_resi_array_cali_write(void *buf);
|
||||
void math_resi_array_cali_save(void *buf);
|
||||
uint8_t cali_params_clear(void *buf); // <20><> ͷ<>ļ<EFBFBD><C4BC><EFBFBD> void<69><64>Դ<EFBFBD>ļ<EFBFBD>д<EFBFBD><D0B4> uint8_t
|
||||
void cali_params_return(void *buf);
|
||||
|
||||
#endif
|
||||
339
App/app_scan.c
Normal file
339
App/app_scan.c
Normal file
@@ -0,0 +1,339 @@
|
||||
#include "app_scan.h"
|
||||
#include "bsp_rs2251.h"
|
||||
#include "main.h"
|
||||
|
||||
#include "bsp_74hc595.h"
|
||||
#include "bsp_adc.h"
|
||||
#include "resi_math_lib.h"
|
||||
#include "string.h"
|
||||
#include "mx_serial.h"
|
||||
#include "app_soft.h"
|
||||
#include "bsp_can.h"
|
||||
#include "systick.h"
|
||||
|
||||
#include "lib_cal_creep_resistance.h"
|
||||
#include "app_calibration.h"
|
||||
#include "mozen_protocol.h"
|
||||
#include "app_mozen_handler.h"
|
||||
#include "flash_port.h"
|
||||
#include "bsp_flash.h"
|
||||
enum scan_ad {
|
||||
changge_low,
|
||||
changge_low1,
|
||||
changge_low2,
|
||||
changge_low3,
|
||||
getAD_L0,
|
||||
getAD_L1,
|
||||
getAD_L2,
|
||||
getAD_L3,
|
||||
getAD_L4,
|
||||
getAD_L5,
|
||||
getAD_L6,
|
||||
getAD_L7,
|
||||
fast_l,
|
||||
changge_hig,
|
||||
changge_hig1,
|
||||
changge_hig2,
|
||||
changge_hig3,
|
||||
getAD_H0,
|
||||
getAD_H1,
|
||||
getAD_H2,
|
||||
getAD_H3,
|
||||
getAD_H4,
|
||||
getAD_H5,
|
||||
getAD_H6,
|
||||
getAD_H7,
|
||||
get_break
|
||||
}state;
|
||||
uint8_t hc595_ranks[] = {7,6,5,4,3,2,1,0,15,14,13,12};//<2F><>ʼ<EFBFBD><CABC>Ĭ<EFBFBD><C4AC>
|
||||
int flag_send = 0;
|
||||
volatile uint8_t scan_num = 0;
|
||||
|
||||
static uint16_t cailed_sensor_data[MT_AX_NUM][MT_AY_NUM];//<2F><>16bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static uint8_t frame8bit[MT_AX_NUM][MT_AY_NUM];//<2F><>8bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
adc_value_frame_struct temp_adc_value;
|
||||
|
||||
uint64_t task_tick = 0;
|
||||
|
||||
uint8_t serial_tx_buffer[AX_NUM][AY_NUM] = {0};//ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
|
||||
|
||||
cal_creep_resistance_t creep_strength_value;
|
||||
uint8_t Matrix_Stab[AX_NUM][AY_NUM] = {0};
|
||||
uint8_t Matrix_Creep[AX_NUM][AY_NUM] = {0};
|
||||
uint8_t Matrix_Display[AX_NUM][AY_NUM] = {0};
|
||||
mx_frame_struct mx_sensor_frame;
|
||||
|
||||
int print_counter = 0;
|
||||
|
||||
|
||||
void Hc4051Delay(uint32_t num)
|
||||
{
|
||||
while(num --);
|
||||
}
|
||||
|
||||
void usart_event_handler(void)
|
||||
{
|
||||
static uint16_t recv_len = 0;
|
||||
static uint8_t rx_buffer[1024] = {0x00};
|
||||
|
||||
recv_len = usart_rx_recv(USART_3_TR, rx_buffer, sizeof(rx_buffer));
|
||||
|
||||
if(recv_len > 0)
|
||||
{
|
||||
uint16_t i;
|
||||
for (i = 0; i < recv_len; i++)
|
||||
{
|
||||
mozen_protocol_feed_byte(&g_mozen_prot, rx_buffer[i], 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @function: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param: frame: <20><><EFBFBD><EFBFBD>֡
|
||||
* @param: len: <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
* @return: 0:<3A>ɹ<EFBFBD> -1:ʧ<><CAA7>
|
||||
*/
|
||||
static int mozen_uart_tx(const uint8_t *frame, uint16_t len)
|
||||
{
|
||||
if ((frame == NULL) || (len == 0U)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
usart_tx_push(USART_3_TR, (uint8_t *)frame,len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void app_user_map_init(void){
|
||||
mx_sensor_frame.trantype = 0x01;
|
||||
mx_sensor_frame.type = 0x01;
|
||||
mx_sensor_frame.datalen = sizeof(serial_tx_buffer);
|
||||
creep_strength_value.x_max = AX_NUM;
|
||||
creep_strength_value.y_max = AY_NUM;
|
||||
|
||||
creep_strength_value.matrix_stab = (uint8_t*)Matrix_Stab;
|
||||
creep_strength_value.matrix_creep = (uint8_t*)Matrix_Creep;
|
||||
creep_strength_value.matrix_display = (uint8_t*)Matrix_Display;
|
||||
|
||||
app_mozen_init(mozen_uart_tx);
|
||||
flash_port_ops_t flash_ops =
|
||||
{
|
||||
.read = flash_read,
|
||||
.write = flash_write,
|
||||
.erase = flash_erase,
|
||||
.is_erased = bsp_flash_is_erased
|
||||
};
|
||||
app_calibration_init(&flash_ops);
|
||||
}
|
||||
|
||||
|
||||
uint64_t time_tmr1;
|
||||
void AD_Sacn(){
|
||||
// if(state >= get_break){
|
||||
// return;
|
||||
// }
|
||||
switch(state){
|
||||
case changge_low:
|
||||
REF_OUT(1);//<2F><>ɨ
|
||||
ic_74hc595_clean_0(32);
|
||||
break;
|
||||
case changge_low1:
|
||||
break;
|
||||
case changge_low2:
|
||||
break;
|
||||
case changge_low3:
|
||||
break;
|
||||
case getAD_L0:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][0] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][8] = GetAdcValue(0);
|
||||
Choose_AX_Channel(4);
|
||||
break;
|
||||
case getAD_L1:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][1] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][9] = GetAdcValue(0);
|
||||
Choose_AX_Channel(2);
|
||||
break;
|
||||
case getAD_L2:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][2] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][10] = GetAdcValue(0);
|
||||
Choose_AX_Channel(1);
|
||||
break;
|
||||
case getAD_L3:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][3] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][11] = GetAdcValue(0);
|
||||
Choose_AX_Channel(7);
|
||||
break;
|
||||
case getAD_L4:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][7] = GetAdcValue(1);
|
||||
Choose_AX_Channel(5);
|
||||
break;
|
||||
case getAD_L5:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][6] = GetAdcValue(1);
|
||||
Choose_AX_Channel(3);
|
||||
break;
|
||||
case getAD_L6:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][5] = GetAdcValue(1);
|
||||
Choose_AX_Channel(0);
|
||||
break;
|
||||
case getAD_L7:
|
||||
temp_adc_value.sensor_iqr_ref_value[scan_num][4] = GetAdcValue(1);
|
||||
Choose_AX_Channel(6);
|
||||
state = fast_l;
|
||||
break;
|
||||
case fast_l:
|
||||
REF_OUT(1);//<2F><>ɨ
|
||||
ic_74hc595_clean_0(32);
|
||||
break;
|
||||
case changge_hig:
|
||||
REF_OUT(0);
|
||||
ic_74hc595_io_write_1(hc595_ranks[scan_num]);
|
||||
break;
|
||||
case changge_hig1:
|
||||
|
||||
break;
|
||||
case changge_hig2:
|
||||
|
||||
break;
|
||||
case changge_hig3:
|
||||
|
||||
break;
|
||||
case getAD_H0:
|
||||
temp_adc_value.sensor_iqr_raw_value[0] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_raw_value[8] = GetAdcValue(0);
|
||||
Choose_AX_Channel(4);
|
||||
break;
|
||||
case getAD_H1:
|
||||
temp_adc_value.sensor_iqr_raw_value[1] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_raw_value[9] = GetAdcValue(0);
|
||||
Choose_AX_Channel(2);
|
||||
break;
|
||||
case getAD_H2:
|
||||
temp_adc_value.sensor_iqr_raw_value[2] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_raw_value[10] = GetAdcValue(0);
|
||||
Choose_AX_Channel(1);
|
||||
break;
|
||||
case getAD_H3:
|
||||
temp_adc_value.sensor_iqr_raw_value[3] = GetAdcValue(1);
|
||||
temp_adc_value.sensor_iqr_raw_value[11] = GetAdcValue(0);
|
||||
Choose_AX_Channel(7);
|
||||
break;
|
||||
case getAD_H4:
|
||||
temp_adc_value.sensor_iqr_raw_value[7] = GetAdcValue(1);
|
||||
Choose_AX_Channel(5);
|
||||
break;
|
||||
case getAD_H5:
|
||||
temp_adc_value.sensor_iqr_raw_value[6] = GetAdcValue(1);
|
||||
Choose_AX_Channel(3);
|
||||
break;
|
||||
case getAD_H6:
|
||||
temp_adc_value.sensor_iqr_raw_value[5] = GetAdcValue(1);
|
||||
Choose_AX_Channel(0);
|
||||
break;
|
||||
case getAD_H7:
|
||||
temp_adc_value.sensor_iqr_raw_value[4] = GetAdcValue(1);
|
||||
Choose_AX_Channel(6);
|
||||
break;
|
||||
case get_break:
|
||||
return;
|
||||
|
||||
}
|
||||
state++;
|
||||
}
|
||||
|
||||
void IRQ_Scan(adc_value_frame_struct *adc_raw_value){
|
||||
static math_resi_cal_t math_resi_cal = {0};
|
||||
static int math_scan_num = 0;
|
||||
__disable_irq();
|
||||
math_scan_num = scan_num;
|
||||
memcpy(adc_raw_value->sensor_raw_value,adc_raw_value->sensor_iqr_raw_value,24);
|
||||
memcpy(adc_raw_value->sensor_ref_value,adc_raw_value->sensor_iqr_ref_value[math_scan_num],24);
|
||||
|
||||
|
||||
scan_num++;
|
||||
if(scan_num == AX_NUM)
|
||||
{
|
||||
scan_num = 0;
|
||||
flag_send= 1;
|
||||
print_counter++;
|
||||
if(print_counter == 10)
|
||||
{
|
||||
print_counter = 0;
|
||||
}
|
||||
}
|
||||
if(print_counter >= 9){
|
||||
state = changge_low;
|
||||
}
|
||||
else
|
||||
state = fast_l;
|
||||
__enable_irq();
|
||||
|
||||
math_resi_cal.sensor_adc_value = adc_raw_value->sensor_raw_value;
|
||||
math_resi_cal.resi_adc_value = adc_raw_value->sensor_ref_value;
|
||||
math_resi_cal.math_number = AX_NUM;
|
||||
|
||||
|
||||
|
||||
math_resi_cali_once(&math_resi_cal,
|
||||
adc_raw_value->sensor_resi_output,
|
||||
AX_NUM,
|
||||
SCAN_LOW_LEVEL);
|
||||
|
||||
math_display_resi(adc_raw_value->sensor_resi_output,
|
||||
adc_raw_value->sensor_display_output,
|
||||
AX_NUM,
|
||||
RESI_BACKWARDS,
|
||||
SINGLE_BYTE);
|
||||
|
||||
memcpy(adc_raw_value->sensor_voltage[math_scan_num],adc_raw_value->sensor_display_output,AX_NUM);
|
||||
|
||||
}
|
||||
|
||||
void scan_deal(void){
|
||||
if(state >= get_break)
|
||||
{
|
||||
IRQ_Scan(&temp_adc_value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TMR1_OVF_TMR10_IRQHandler(void)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(tmr_flag_get(TMR1, TMR_OVF_FLAG) != RESET)
|
||||
{
|
||||
AD_Sacn();
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB4><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
tmr_flag_clear(TMR1, TMR_OVF_FLAG);
|
||||
}
|
||||
}
|
||||
int counter_fps;
|
||||
int counter_fps1;
|
||||
void adc_deal(void){
|
||||
if(flag_send == 1){
|
||||
flag_send = 0;
|
||||
memcpy(frame8bit,temp_adc_value.sensor_voltage,144);
|
||||
mx_sensor_frame.data = (uint8_t *)frame8bit;
|
||||
mx_serial_tx_frame(USART_3_TR,&mx_sensor_frame);
|
||||
counter_fps++;
|
||||
|
||||
}
|
||||
if((get_system_tick() - task_tick) >= 1000){
|
||||
task_tick = get_system_tick();
|
||||
counter_fps1 = counter_fps;
|
||||
counter_fps = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
44
App/app_scan.h
Normal file
44
App/app_scan.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef _BSP_SCAN_H
|
||||
#define _BSP_SCAN_H
|
||||
#include "stdint.h"
|
||||
#include "main.h"
|
||||
/*32x64 Data_Array*/
|
||||
typedef struct
|
||||
{
|
||||
uint16_t sensor_iqr_raw_value[AX_NUM];
|
||||
uint16_t sensor_iqr_ref_value[AX_NUM][AY_NUM];
|
||||
uint16_t sensor_raw_value[AX_NUM];
|
||||
uint16_t sensor_ref_value[AX_NUM];
|
||||
|
||||
uint16_t sensor_resi_output[AX_NUM];
|
||||
uint8_t sensor_display_output[AX_NUM];
|
||||
|
||||
uint8_t sensor_voltage[AX_NUM][AY_NUM];
|
||||
|
||||
// uint16_t sensor1_voltage[AX_NUM][AY_NUM];//16bit
|
||||
uint8_t sensor_filter[AX_NUM][AY_NUM];
|
||||
}adc_value_frame_struct;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
REFER_RESISTACE,
|
||||
RAW_RESISTACE
|
||||
}RESISTACE_NAME;
|
||||
|
||||
|
||||
|
||||
#define RANKS_ADDRESS (0x08000000 + 1024 * 68)
|
||||
#define RANKS_HEAD 0XA55AA55A
|
||||
#define RANKS_TAIL 0X5AA55AA5
|
||||
|
||||
void IRQ_Scan(adc_value_frame_struct *adc_raw_value);
|
||||
void u8_cail_deal(void);
|
||||
void adc_deal(void);
|
||||
void scan_deal(void);
|
||||
void app_user_map_init(void);
|
||||
|
||||
//void scan(adc_value_frame_struct *adc_raw_value,uint8_t scan_num);
|
||||
int line_init(void);
|
||||
int save_config_ranks(uint8_t x[12],uint8_t y[12]);
|
||||
#endif
|
||||
69
App/app_soft.c
Normal file
69
App/app_soft.c
Normal file
@@ -0,0 +1,69 @@
|
||||
#include "app_soft.h"
|
||||
#include "app_scan.h"
|
||||
#include "bsp_flash.h"
|
||||
#include "string.h"
|
||||
|
||||
#pragma pack (1)
|
||||
typedef struct
|
||||
{
|
||||
uint8_t ax;
|
||||
uint8_t ay;
|
||||
uint16_t compensation_rate;
|
||||
}sort_value_struct;
|
||||
#pragma pack ()
|
||||
|
||||
|
||||
uint8_t scan_X_line[] = {0,1,2,3,4,5,6,7,8,9,10,11};
|
||||
uint8_t scan_Y_line[] = {0,1,2,3,4,5,6,7,8,9,10,11};
|
||||
|
||||
rank_frame_struct ranks;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>˫·adc<64><63>
|
||||
int read_rank_flash(rank_frame_struct *params){
|
||||
uint32_t *head = (uint32_t*)RANKS_ADDRESS;
|
||||
uint32_t *tail = (uint32_t*)(RANKS_ADDRESS + sizeof(rank_frame_struct) - 4);
|
||||
|
||||
if(*head == RANKS_HEAD && *tail == RANKS_TAIL)
|
||||
{
|
||||
memcpy((uint32_t *)params, head, sizeof(rank_frame_struct));
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int line_init(void){
|
||||
if(read_rank_flash(&ranks) == 1){
|
||||
// memcpy(scan_X_line, ranks.x_rank, sizeof(scan_X_line));
|
||||
// memcpy(scan_Y_line, ranks.y_rank, sizeof(scan_Y_line));
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0; // <20><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
}
|
||||
|
||||
int save_config_ranks(uint8_t x[12],uint8_t y[12])
|
||||
{
|
||||
ranks.head = RANKS_HEAD;
|
||||
ranks.tail = RANKS_TAIL;
|
||||
memcpy(ranks.x_rank, x, sizeof(scan_X_line));
|
||||
memcpy(ranks.y_rank, y, sizeof(scan_Y_line));
|
||||
flash_write(RANKS_ADDRESS,(uint16_t *)&ranks, sizeof(rank_frame_struct)/sizeof(uint16_t));
|
||||
line_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void soft_sensor(adc_value_frame_struct *adc_raw_value)
|
||||
{
|
||||
for(uint8_t ax = 0; ax < AX_NUM; ax++){
|
||||
for(uint8_t ay = 0; ay < AY_NUM; ay++)
|
||||
{
|
||||
// adc_raw_value->sensor_soft_value[ay][ax] = adc_raw_value->sensor_voltage[scan_Y_line[ay]][scan_X_line[ax]];
|
||||
}
|
||||
}
|
||||
}
|
||||
19
App/app_soft.h
Normal file
19
App/app_soft.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef _APP_SOFT_H
|
||||
#define _APP_SOFT_H
|
||||
#include "app_scan.h"
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t head;
|
||||
uint8_t x_rank[12];
|
||||
uint8_t y_rank[12];
|
||||
uint32_t tail;
|
||||
}rank_frame_struct;
|
||||
|
||||
|
||||
void soft_sensor(adc_value_frame_struct *adc_raw_value);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
137
App/main.c
Normal file
137
App/main.c
Normal file
@@ -0,0 +1,137 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file main.c
|
||||
* @brief main program
|
||||
**************************************************************************
|
||||
*
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
#include "at32a423.h"
|
||||
#include "at32a423_clock.h"
|
||||
#include "systick.h"
|
||||
#include "sysconfig.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "at32a423_tmr.h" // <20><>ʱ<EFBFBD><CAB1>ר<EFBFBD><D7A8>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
#include "at32a423_crm.h" // ʱ<>ӹ<EFBFBD><D3B9><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
#include "app_get_json.h"
|
||||
#include "app_scan.h"
|
||||
#include "app_soft.h"
|
||||
|
||||
#include "bsp_led.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "bsp_adc.h"
|
||||
#include "bsp_can.h"
|
||||
|
||||
#include "bsp_spi.h"
|
||||
#include "bsp_rs2251.h"
|
||||
#include "bsp_74hc595.h"
|
||||
#include "bsp_flash.h"
|
||||
|
||||
|
||||
#include "mx_spi.h"
|
||||
|
||||
#include "resi_math_lib.h"
|
||||
|
||||
#include "bsp_rs2251.h"
|
||||
|
||||
#include "cali_process.h"
|
||||
#include "lib_cal_creep_resistance.h"
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#define CAL_CREEP_ENABLE 0
|
||||
#define JSON_ENABLE 0
|
||||
|
||||
|
||||
uint8_t serial_tx_buffer2[AX_NUM][AY_NUM] = {0};//У<D0A3><D7BC><EFBFBD><EFBFBD>
|
||||
uint8_t map_matrix[12*12*3];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
crm_clocks_freq_type crm_clocks_freq_struct = {0};
|
||||
|
||||
|
||||
|
||||
void TMR1_init(void);
|
||||
|
||||
|
||||
int line_flag=0;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
static uint64_t time_ms = 0;
|
||||
|
||||
system_clock_config();//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_config();//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bsp_led_init(LED2);
|
||||
|
||||
can1_init();
|
||||
adc_init();
|
||||
RS2251_Init();
|
||||
ref_gpio_init();
|
||||
ic_74hc595_init();
|
||||
mx_spi_init();
|
||||
line_flag = line_init();
|
||||
|
||||
app_user_map_init();
|
||||
|
||||
// uart3_init(921600);
|
||||
uart3_init(2000000);
|
||||
delay_ms(1000);
|
||||
|
||||
TMR1_init();
|
||||
// Choose_AX_Channel(5);
|
||||
// REF_OUT(0);
|
||||
// ic_74hc595_io_write_1(7);
|
||||
while(1)
|
||||
{
|
||||
delay_ms(1);
|
||||
scan_deal();//ɨ<>账<EFBFBD><E8B4A6>
|
||||
adc_deal(); //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void TMR1_init(void){
|
||||
crm_clocks_freq_get(&crm_clocks_freq_struct);
|
||||
/* enable tmr1 clock */
|
||||
crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
|
||||
|
||||
/* tmr1 configuration */
|
||||
/* time base configuration */
|
||||
tmr_base_init(TMR1, 6, 139);//<2F>˴<EFBFBD>119<31><39><EFBFBD>Ƕ<EFBFBD>ӦϵͳƵ<CDB3><C6B5>
|
||||
tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);
|
||||
|
||||
/* overflow interrupt enable */
|
||||
tmr_interrupt_enable(TMR1, TMR_OVF_INT, TRUE);
|
||||
|
||||
/* tmr1 hall interrupt nvic init */
|
||||
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
|
||||
nvic_irq_enable(TMR1_OVF_TMR10_IRQn, 1, 0);
|
||||
|
||||
/* enable tmr1 */
|
||||
tmr_counter_enable(TMR1, TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
9
App/main.h
Normal file
9
App/main.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef __MAIN_H
|
||||
#define __MAIN_H
|
||||
|
||||
#define AX_NUM 12
|
||||
#define AY_NUM 12
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
248
App/sys.c
Normal file
248
App/sys.c
Normal file
@@ -0,0 +1,248 @@
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief sys.c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>йؿ<D0B9><D8BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
|
||||
* uwTick <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8> HAL_GetTick() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>uwTick(ֻ<><D6BB>)<29><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>uwTick<63><6B>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* uwTick ÿ<><C3BF>1ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD>ֻҪ#include "main.h"<22><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>uwTick<63><6B><EFBFBD><EFBFBD>hal<61><6C><EFBFBD>Դ<EFBFBD><D4B4>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
|
||||
//<2F>û<EFBFBD>include
|
||||
#include "at32a423.h"
|
||||
#include "systick.h"
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>include<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#include "sys.h"
|
||||
#include "task.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t enable_flag; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B1BBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1B2BBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD> (<28><>0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>)
|
||||
uint16_t interval_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>ʱ<EFBFBD><CAB1> (<28><>λms)
|
||||
uint32_t last_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> (<28><>λms)
|
||||
uint8_t ready_flag; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>)
|
||||
uint32_t out_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֹͣ<CDA3><D6B9><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʱ<EFBFBD><CAB1> (<28><>λms)
|
||||
int32_t usage_tick; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>VAL(CNT)<29>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>sys.c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> System_RunTask())
|
||||
float usage_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC>λΪus<75><73><EFBFBD><EFBFBD>λΪus<75><73><EFBFBD><EFBFBD>λΪus<75><73> (<28><><EFBFBD>㷽<EFBFBD><E3B7BD><EFBFBD><EFBFBD>sys.c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> System_RunTask())
|
||||
float usage_percent; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>cpu<70>İٷֱ<D9B7> (<28><><EFBFBD>㷽<EFBFBD><E3B7BD><EFBFBD><EFBFBD>sys.c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> System_RunTask())
|
||||
void (*f)(void); // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>еĺ<D0B5><C4BA><EFBFBD> (<28><>֪<EFBFBD><D6AA><EFBFBD><EFBFBD>ôָ<C3B4><D6B8>sys.c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> System_Init())
|
||||
}TaskStruct;
|
||||
|
||||
TaskStruct task_structs[TASK_NUMBER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>enable_flag,interval_time,task_priority,f<><66><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>0
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
void System_TaskInit()
|
||||
{
|
||||
task_structs[TASK1].enable_flag=1;
|
||||
task_structs[TASK1].interval_time=500;
|
||||
task_structs[TASK1].f=task1;
|
||||
|
||||
task_structs[TASK2].enable_flag=1;
|
||||
task_structs[TASK2].interval_time=10000;
|
||||
task_structs[TASK2].f=task2;
|
||||
|
||||
task_structs[TASK3].enable_flag=1;
|
||||
task_structs[TASK3].interval_time=500;
|
||||
task_structs[TASK3].f=task3;
|
||||
|
||||
task_structs[TASK4].enable_flag=1;
|
||||
task_structs[TASK4].interval_time=5;
|
||||
task_structs[TASK4].f=task4;
|
||||
|
||||
task_structs[TASK5].enable_flag=1;
|
||||
task_structs[TASK5].interval_time=5;
|
||||
task_structs[TASK5].f=task5;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> usage_time,usage_percent,<2C>ʹ˺<CDB4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD>total_usage_time
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
int32_t total_usage_tick; // <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ˺<C7B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>tick<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug
|
||||
float total_usage_time; // <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ˺<C7B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>ʱ<EFBFBD><CAB1>(<28><>λus)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug
|
||||
int32_t total_usage_tick_max_in1s; // total_usage_tick <20><>ij1<C4B3><31><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
float total_usage_time_max_in1s; // total_usage_time <20><>ij1<C4B3><31><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
void System_TaskRun()
|
||||
{
|
||||
int64_t total_begin_tick = SysTick->VAL - get_system_tick()*(SysTick->LOAD+1); // ˼·ͬ<C2B7><CDAC><EFBFBD><EFBFBD> begin_tick
|
||||
|
||||
for(uint8_t i=0;i<TASK_NUMBER;i++)
|
||||
{
|
||||
if(task_structs[i].ready_flag)
|
||||
{
|
||||
task_structs[i].ready_flag--;
|
||||
// <20><><EFBFBD><EFBFBD> begin_tick <20>Ĺ<EFBFBD>ʽ = <20><> >0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> - <20><>------ <0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-------<2D><> (begin_tick < 0)
|
||||
int64_t begin_tick = SysTick->VAL - get_system_tick()*(SysTick->LOAD+1);
|
||||
|
||||
task_structs[i].f(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> usage_tick <20>Ĺ<EFBFBD>ʽ = <20><>ʼ<EFBFBD><CABC>tick - <20><>---------------<2D><><EFBFBD>ڵ<EFBFBD>tick--------------<2D><>(<28><><EFBFBD><EFBFBD>tick<63><6B><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC>tick > <20><><EFBFBD>ڵ<EFBFBD>tick)
|
||||
task_structs[i].usage_tick = begin_tick - (SysTick->VAL - get_system_tick()*(SysTick->LOAD+1));
|
||||
// <20><><EFBFBD><EFBFBD> usage_time <20>Ĺ<EFBFBD>ʽ = <20><>-----------usage_tick----------<2D><> / <20><>1ms<6D><73>tick<63><6B><EFBFBD><EFBFBD>--<2D><> * 1000(<28><>λ<EFBFBD><CEBB><EFBFBD>㣬1ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1000us)
|
||||
task_structs[i].usage_time = (float)task_structs[i].usage_tick / (SysTick->LOAD+1) * 1000.f;
|
||||
// <20><><EFBFBD><EFBFBD> usage_percent <20>Ĺ<EFBFBD>ʽ = <20><>-----<2D><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>(<28><>λHz)-----<2D><> * <20><>---<2D><><EFBFBD><EFBFBD><F1B5A5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(<28><>λs)----<2D><> * 100(<28><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>%,<2C><><EFBFBD><EFBFBD>*100)
|
||||
task_structs[i].usage_percent = 1000.f/task_structs[i].interval_time * task_structs[i].usage_time/1000000.f * 100;
|
||||
}
|
||||
}
|
||||
|
||||
total_usage_tick = total_begin_tick - (SysTick->VAL - get_system_tick()*(SysTick->LOAD+1)); // ˼·ͬ<C2B7><CDAC><EFBFBD><EFBFBD> usage_tick
|
||||
total_usage_time = (float)total_usage_tick / (SysTick->LOAD+1) * 1000.f; // ˼·ͬ<C2B7><CDAC><EFBFBD><EFBFBD> usage_time
|
||||
|
||||
if(total_usage_tick_max_in1s < total_usage_tick)
|
||||
{
|
||||
total_usage_tick_max_in1s = total_usage_tick;
|
||||
}
|
||||
if(total_usage_time_max_in1s < total_usage_time)
|
||||
{
|
||||
total_usage_time_max_in1s = total_usage_time;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief ϵͳ<CFB5><CDB3><EFBFBD>£<EFBFBD>ÿ<EFBFBD><C3BF>1ms<6D>ӵδ<D3B5><CEB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϽ<D0B6><CFBD><EFBFBD>һ<EFBFBD><D2BB> (<28><>stm32f4xx_it.c<><63> System_Update()<29>ﱻ<EFBFBD><EFB1BB><EFBFBD><EFBFBD>)
|
||||
* ͨ<><CDA8>uwTick,enable_flag,stop_time<6D><65>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7>ready_flag<61><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>last_time,stop_time
|
||||
* ÿ<><C3BF>1000ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> total_usage_tick_max_in1s <20><> total_usage_time_max_in1s
|
||||
* @changedate 2020.09.15
|
||||
*/
|
||||
void System_TaskUpdate()
|
||||
{
|
||||
for(uint8_t i=0;i<TASK_NUMBER;i++)
|
||||
{
|
||||
if(task_structs[i].out_time != 0)
|
||||
{
|
||||
if(task_structs[i].out_time == 1)
|
||||
{
|
||||
Task_InCallback(i); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>лָ<D0BB><D6B8><EFBFBD><EFBFBD>ָ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
task_structs[i].out_time--; //<2F><><EFBFBD><EFBFBD> out_time
|
||||
}
|
||||
// ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>ﵽ<EFBFBD><EFB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> ready_flag <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> last_time
|
||||
if(task_structs[i].enable_flag &&
|
||||
task_structs[i].out_time == 0 &&
|
||||
task_structs[i].interval_time<=(get_system_tick()-task_structs[i].last_time))
|
||||
{
|
||||
task_structs[i].ready_flag++;
|
||||
task_structs[i].last_time=get_system_tick();
|
||||
}
|
||||
}
|
||||
|
||||
if(get_system_tick()%1000 == 0) // ÿ<><C3BF>1000ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> total_usage_tick_max_in1s <20><> total_usage_time_max_in1s
|
||||
{
|
||||
total_usage_tick_max_in1s = total_usage_tick;
|
||||
total_usage_time_max_in1s = total_usage_time;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣһ<CDA3><D2BB>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
void System_TaskOut(uint8_t task_number,uint32_t stop_time)
|
||||
{
|
||||
task_structs[task_number].out_time = stop_time;
|
||||
Task_OutCallback(task_number);
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رգ<D8B1><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
void System_TaskDisable(uint8_t task_number)
|
||||
{
|
||||
task_structs[task_number].enable_flag = 0;
|
||||
Task_DisableCallback(task_number);
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
void System_TaskEnable(uint8_t task_number)
|
||||
{
|
||||
task_structs[task_number].enable_flag = 1;
|
||||
Task_EnableCallback(task_number);
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief ϵͳǿ<CDB3><C7BF>ͣ<EFBFBD><CDA3>
|
||||
* @changedate 2020.09.14
|
||||
*/
|
||||
void System_AllTaskDisable()
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
for(uint8_t i=0;i<TASK_NUMBER;i++)
|
||||
{
|
||||
task_structs[i].enable_flag = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
* @changedate 2021.04.15
|
||||
*/
|
||||
void System_SoftWatchDogInit(SoftWatchDogStruct *dog,uint32_t time_load,uint8_t default_state)
|
||||
{
|
||||
dog->state = default_state;
|
||||
dog->time_load = time_load;
|
||||
dog->time_cnt = dog->time_load;
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>ι<EFBFBD><CEB9>
|
||||
* @changedate 2021.04.15
|
||||
*/
|
||||
void System_SoftWatchDogFeed(SoftWatchDogStruct *dog)
|
||||
{
|
||||
dog->state = 1;
|
||||
dog->time_cnt = dog->time_load;
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>״̬
|
||||
* @changedate 2021.04.15
|
||||
*/
|
||||
void System_SoftWatchDogUpdate(SoftWatchDogStruct *dog)
|
||||
{
|
||||
if(dog->time_cnt > 0)
|
||||
{
|
||||
dog->time_cnt--;
|
||||
dog->state = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
dog->time_cnt = 0;
|
||||
dog->state = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>״̬
|
||||
* @changedate 2021.04.15
|
||||
*/
|
||||
uint8_t System_GetSoftWatchDogState(SoftWatchDogStruct *dog)
|
||||
{
|
||||
return dog->state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
34
App/sys.h
Normal file
34
App/sys.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef __SYS_H
|
||||
#define __SYS_H
|
||||
|
||||
#include "at32a423.h"
|
||||
|
||||
#define TASK_NUMBER 6 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define TASK1 0 //<2F><><EFBFBD>ӿɶ<D3BF><C9B6><EFBFBD>
|
||||
#define TASK2 1 //<2F><><EFBFBD>ӿɶ<D3BF><C9B6><EFBFBD>
|
||||
#define TASK3 2 //<2F><><EFBFBD>ӿɶ<D3BF><C9B6><EFBFBD>
|
||||
#define TASK4 3 //<2F><><EFBFBD>ӿɶ<D3BF><C9B6><EFBFBD>
|
||||
#define TASK5 4 //<2F><><EFBFBD>ӿɶ<D3BF><C9B6><EFBFBD>
|
||||
#define TASK6 5 //<2F><><EFBFBD>ӿɶ<D3BF><C9B6><EFBFBD>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t state; //<2F><>ǰ״̬<D7B4><CCAC>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
uint32_t time_load; //<2F><>װ<EFBFBD><D7B0>ֵ
|
||||
uint32_t time_cnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
|
||||
}SoftWatchDogStruct;
|
||||
|
||||
void System_TaskInit(void);
|
||||
void System_TaskUpdate(void);
|
||||
void System_TaskRun(void);
|
||||
void System_TaskOut(uint8_t task_number,uint32_t stop_time);
|
||||
void System_TaskDisable(uint8_t task_number);
|
||||
void System_TaskEnable(uint8_t task_number);
|
||||
|
||||
void System_SoftWatchDogInit(SoftWatchDogStruct *dog,uint32_t time_load,uint8_t default_state);
|
||||
void System_SoftWatchDogFeed(SoftWatchDogStruct *dog);
|
||||
void System_SoftWatchDogUpdate(SoftWatchDogStruct *dog);
|
||||
uint8_t System_GetSoftWatchDogState(SoftWatchDogStruct *dog);
|
||||
|
||||
#endif /* __SYS_H */
|
||||
|
||||
37
App/task.c
Normal file
37
App/task.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* @auther whlphlg
|
||||
* @brief task.c<><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ɶȽϴ<C8BD>
|
||||
* @changedate 2020.09.13
|
||||
*/
|
||||
|
||||
//<2F>û<EFBFBD>include
|
||||
#include "at32a423.h"
|
||||
#include "bsp_led.h"
|
||||
#include "scan.h"
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>include<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#include "task.h"
|
||||
#include "sys.h"
|
||||
|
||||
|
||||
void task1()
|
||||
{
|
||||
|
||||
}
|
||||
void task2()
|
||||
{
|
||||
System_TaskOut(TASK1,4000);
|
||||
}
|
||||
void task3()
|
||||
{
|
||||
bsp_led_toggle(LED2);
|
||||
}
|
||||
void task4()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void task5()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
17
App/task.h
Normal file
17
App/task.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef __TASK_H
|
||||
#define __TASK_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
void task1(void);
|
||||
void task2(void);
|
||||
void task3(void);
|
||||
void task4(void);
|
||||
void task5(void);
|
||||
|
||||
__weak void Task_DisableCallback(uint8_t task_number);
|
||||
__weak void Task_EnableCallback(uint8_t task_number);
|
||||
__weak void Task_OutCallback(uint8_t task_number);
|
||||
__weak void Task_InCallback(uint8_t task_number);
|
||||
|
||||
#endif /* __TASK_H */
|
||||
Reference in New Issue
Block a user