- The difference with the original let's split's serial.c - It's high-speed about 4 times. - Stable bi-directional data transfer. (Helix need master to slave transfer) - serial.h was divided 2 files, serial_config.h and sereial.h - With multiple types of transaction support, communication contents can be optimized. (NEW flexible API) - USE OLD Simple APIs (compatible with let's split serial.c) - files : - serial_config.h -- hardware configuration (need include by config.h) - serial.c/serial.h -- serial communication - USE NEW flexible APIs. (Support multi-type transaction function.) serial.c was divided into 2 layers, split_scom.c and serial.c. The upper layer split_scomm.c is called from matrix.c. The lower layer serial.c accesses the hardware. - files - split_scomm.c -- communication buffer is defined in here. call by matrix.c. - split_scomm.h -- buffer size is defined in here. include by matrix.c, split_util.c - serial_config.h -- hardware configuration (need include by config.h) To use the NEW API, specify #define SERIAL_USE_MULTI_TRANSACTION - serial.c/serial.h -- serial communication lower layer - NEW APIs for serial.c / serial.h (The lower layer) // Soft Serial Transaction Descriptor typedef struct _SSTD_t { uint8_t *status; uint8_t initiator2target_buffer_size; uint8_t *initiator2target_buffer; uint8_t target2initiator_buffer_size; uint8_t *target2initiator_buffer; } SSTD_t; // initiator is transaction start side void soft_serial_initiator_init(SSTD_t *sstd_table); // target is interrupt accept side void soft_serial_target_init(SSTD_t *sstd_table); int soft_serial_transaction(int sstd_index); int soft_serial_get_and_clean_target_status(int sstd_index); - NEW APIs for split_scomm.c / split_scomm.h (The upper layer) move from old serial.c the following buffer and functions serial_slave_buffer[] serial_master_buffer[] void serial_master_init(void) void serial_slave_init(void) int serial_update_buffers(void) define SERIAL_xxxxx_BUFFER_LENGTH move from serial_config.h to split_scomm.hpull/3608/head
parent
7299d961b6
commit
8142a3c740
@ -1,5 +1,4 @@
|
|||||||
SRC += rev1/matrix.c
|
SRC += rev1/matrix.c
|
||||||
SRC += rev1/split_util.c
|
SRC += rev1/split_util.c
|
||||||
SRC += rev1/split_scomm.c
|
|
||||||
|
|
||||||
BACKLIGHT_ENABLE = no
|
BACKLIGHT_ENABLE = no
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
#ifdef USE_SERIAL
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <split_scomm.h>
|
|
||||||
#include "serial.h"
|
|
||||||
|
|
||||||
uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
|
|
||||||
uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
|
|
||||||
uint8_t volatile status0 = 0;
|
|
||||||
|
|
||||||
SSTD_t transactions[] = {
|
|
||||||
{ (uint8_t *)&status0,
|
|
||||||
sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
|
|
||||||
sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void serial_master_init(void)
|
|
||||||
{
|
|
||||||
soft_serial_initiator_init(transactions);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial_slave_init(void)
|
|
||||||
{
|
|
||||||
soft_serial_target_init(transactions);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 0 => no error
|
|
||||||
// 1 => slave did not respond
|
|
||||||
// 2 => checksum error
|
|
||||||
int serial_update_buffers(int master_update)
|
|
||||||
{
|
|
||||||
return soft_serial_transaction();
|
|
||||||
}
|
|
||||||
#endif /* USE_SERIAL */
|
|
@ -1,15 +0,0 @@
|
|||||||
#ifndef SPLIT_COMM_H
|
|
||||||
#define SPLIT_COMM_H
|
|
||||||
|
|
||||||
// Buffers for master - slave communication
|
|
||||||
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
|
||||||
#define SERIAL_MASTER_BUFFER_LENGTH 1
|
|
||||||
|
|
||||||
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
|
|
||||||
extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
|
|
||||||
|
|
||||||
void serial_master_init(void);
|
|
||||||
void serial_slave_init(void);
|
|
||||||
int serial_update_buffers(int master_changed);
|
|
||||||
|
|
||||||
#endif /* SPLIT_COMM_H */
|
|
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef SERIAL_CONFIG_SIMPLEAPI_H
|
||||||
|
#define SERIAL_CONFIG_SIMPLEAPI_H
|
||||||
|
|
||||||
|
#undef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
|
||||||
|
#endif // SERIAL_CONFIG_SIMPLEAPI_H
|
@ -1,18 +1,24 @@
|
|||||||
#ifndef SPLIT_COMM_H
|
#ifndef SPLIT_COMM_H
|
||||||
#define SPLIT_COMM_H
|
#define SPLIT_COMM_H
|
||||||
|
|
||||||
|
#ifndef SERIAL_USE_MULTI_TRANSACTION
|
||||||
|
/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
|
||||||
|
#include "serial.h"
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* --- USE flexible API (using multi-type transaction function) --- */
|
||||||
// Buffers for master - slave communication
|
// Buffers for master - slave communication
|
||||||
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
|
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
|
||||||
|
|
||||||
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
|
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
|
||||||
extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
|
extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
|
||||||
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
|
||||||
extern uint8_t slave_buffer_change_count;
|
extern uint8_t slave_buffer_change_count;
|
||||||
#endif
|
|
||||||
|
|
||||||
void serial_master_init(void);
|
void serial_master_init(void);
|
||||||
void serial_slave_init(void);
|
void serial_slave_init(void);
|
||||||
int serial_update_buffers(int master_changed);
|
int serial_update_buffers(int master_changed);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* SPLIT_COMM_H */
|
#endif /* SPLIT_COMM_H */
|
||||||
|
Loading…
Reference in new issue