Roy
2023-06-05 16:26:08 +08:00
parent 0607d6cf9b
commit fe13bf4f42
4 changed files with 80 additions and 89 deletions
@@ -4,6 +4,6 @@
#define VERSION_DATE_YEAR 23
#define VERSION_DATE_MONTH 6
#define VERSION_DATE_DAY 5
#define VERSION_DATE_HOUR 14
#define VERSION_DATE_MINUTE 47
#define VERSION_DATE_HOUR 16
#define VERSION_DATE_MINUTE 26
#endif
@@ -31,12 +31,9 @@ static void update_led(uint8_t led);
#define TRI_D0_5V 8
#define TRI_D1_5V 9
#define TRIG_OUT_CH_MAX 10
struct trig_ch_en_ctx_t
{ // Trigger Channel
bool chan_en[TRIG_OUT_CH_MAX]; // [tri_pr0_en, tri_d0_en, tri_a0_en, tri_a2_en, tri_a3_en,
bool chan_en[TRIG_OUT_CH_MAX]; // [tri_pr0_en, tri_d0_en, tri_a0_en, tri_a2_en, tri_a3_en,
// tri_a1_en, tri_d1_en, tri_pr1_en, tri_d0_as_5v_en, tri_d1_as_5v_en]
};
/** TRIG01 trigger edge type **/
#define TRIG_POSEDGE 0x00
@@ -93,9 +90,6 @@ struct trig_ch_en_ctx_t
#define TRIG_input 0x04
// #define TRIG_CHAN_COUNT 10 // channel count of TRIG01
/* application use SPI parameters and buffers */
#define SPI_GPIO_BUFF_SIZE 10
struct elite_instru_t
{
uint8_t memoryboard_id;
@@ -199,7 +193,6 @@ enum set_para_e
};
struct _LH LH = { 0 };
struct trig_ch_en_ctx_t TRC = { 0 };
struct elite_instru_t instru = { 0 };
struct gptimer_t gpt = {0};
static int32_t notify_ch1 = 0;
@@ -89,7 +89,7 @@ static void WorkModeLED()
{
case MODE_ANALOG_CURRENT_CTRL:
case MODE_ALL_OUTPUT_CTRL:
set_channel_led(TRC.chan_en);
set_channel_led(chan_en);
break;
default:
@@ -524,22 +524,18 @@ static void receive_instruction(uint8 *ins)
break;
}
case SET_EN_CHAN: { // 0x81 //Trig mode use
case SET_EN_CHAN: { // 0x81 //ACC mode use
InitTrigChan();
switch (ins[3])
{
case TRIG_PR: { // 0x00
instru.tri_pr0_en = (bool)(ins[4] >> 4);
instru.tri_pr1_en = (bool)(ins[4] & 0x0F);
TRC.chan_en[0] = instru.tri_pr0_en;
TRC.chan_en[7] = instru.tri_pr1_en;
chan_en[TRI_PR0] = (bool)(ins[4] >> 4);
chan_en[TRI_PR1] = (bool)(ins[4] & 0x0F);
break;
}
case TRIG_MOS_DOUT: { // 0x01
instru.tri_d0_en = (bool)(ins[4] >> 4);
instru.tri_d1_en = (bool)(ins[4] & 0x0F);
TRC.chan_en[1] = instru.tri_d0_en;
TRC.chan_en[6] = instru.tri_d1_en;
chan_en[TRI_D0_SW] = (bool)(ins[4] >> 4);
chan_en[TRI_D1_SW] = (bool)(ins[4] & 0x0F);
break;
}
case TRIG_MOS_AOUT: { // 0x02
@@ -547,17 +543,17 @@ static void receive_instruction(uint8 *ins)
instru.tri_a1_en = (bool)(ins[4] & 0x0F);
instru.tri_a2_en = (bool)(ins[5] >> 4);
instru.tri_a3_en = (bool)(ins[5] & 0x0F);
TRC.chan_en[2] = instru.tri_a0_en;
TRC.chan_en[3] = instru.tri_a2_en;
TRC.chan_en[4] = instru.tri_a3_en;
TRC.chan_en[5] = instru.tri_a1_en;
chan_en[2] = instru.tri_a0_en;
chan_en[3] = instru.tri_a2_en;
chan_en[4] = instru.tri_a3_en;
chan_en[5] = instru.tri_a1_en;
break;
}
case TRIG_5V_OUT: { // 0x03
instru.tri_d0_as_5v_en = (bool)(ins[4] >> 4);
instru.tri_d1_as_5v_en = (bool)(ins[4] & 0x0F);
TRC.chan_en[8] = instru.tri_d0_as_5v_en;
TRC.chan_en[9] = instru.tri_d1_as_5v_en;
chan_en[8] = instru.tri_d0_as_5v_en;
chan_en[9] = instru.tri_d1_as_5v_en;
break;
}
default: {
@@ -577,7 +573,7 @@ static void receive_instruction(uint8 *ins)
break;
}
case SET_TRIG_EN: { // 0x41 //Trig mode use
case SET_TRIG_EN: { // 0x41 //ACC mode use
instru.trig0_en = (bool)(ins[3] >> 4);
instru.trig1_en = (bool)(ins[3] & 0x0F);
instru.trig0_edge = (uint8_t)(ins[4] >> 4); // 0: POS, 1: NEG, 2: BOTH, 3: DIS
@@ -596,7 +592,7 @@ static void receive_instruction(uint8 *ins)
break;
}
case MODE_ANALOG_CURRENT_CTRL: { // Trig mode use
case MODE_ANALOG_CURRENT_CTRL: { // ACC mode use
uint16_t a_out0_current = (uint16_t)ins[3] << 8 | (uint16_t)ins[4];
uint16_t a_out1_current = (uint16_t)ins[5] << 8 | (uint16_t)ins[6];
uint16_t a_out2_current = (uint16_t)ins[7] << 8 | (uint16_t)ins[8];
@@ -642,32 +638,32 @@ static void receive_instruction(uint8 *ins)
case Aout_CH_0:
set_para(instru.elite_mode, Aout_CH_0, value);
instru.tri_a0_en = chan;
TRC.chan_en[2] = instru.tri_a0_en;
set_output_enable(TRC.chan_en);
chan_en[2] = instru.tri_a0_en;
set_output_enable(chan_en);
update_led(LED_WORKING);
break;
case Aout_CH_1:
set_para(instru.elite_mode, Aout_CH_1, value);
instru.tri_a1_en = chan;
TRC.chan_en[5] = instru.tri_a1_en;
set_output_enable(TRC.chan_en);
chan_en[5] = instru.tri_a1_en;
set_output_enable(chan_en);
update_led(LED_WORKING);
break;
case Aout_CH_2:
set_para(instru.elite_mode, Aout_CH_2, value);
instru.tri_a2_en = chan;
TRC.chan_en[3] = instru.tri_a2_en;
set_output_enable(TRC.chan_en);
chan_en[3] = instru.tri_a2_en;
set_output_enable(chan_en);
update_led(LED_WORKING);
break;
case Aout_CH_3:
set_para(instru.elite_mode, Aout_CH_3, value);
instru.tri_a3_en = chan;
TRC.chan_en[4] = instru.tri_a3_en;
set_output_enable(TRC.chan_en);
chan_en[4] = instru.tri_a3_en;
set_output_enable(chan_en);
update_led(LED_WORKING);
break;
@@ -772,7 +768,7 @@ static void receive_instruction(uint8 *ins)
if (!TRIG_TrigEnable)
{
set_output_enable(TRC.chan_en);
set_output_enable(chan_en);
}
update_led(LED_WORKING);
break;
@@ -913,18 +909,18 @@ static void receive_instruction(uint8 *ins)
case 0x31: { // 0x31 ctrl PR0
//PIN15_setOutputValue(E_PIN_D0_PR_0, ?);
instru.tri_pr0_en = ins[4];
TRC.chan_en[0] = instru.tri_pr0_en;
set_output_enable(TRC.chan_en);
set_channel_led(TRC.chan_en);
chan_en[0] = instru.tri_pr0_en;
set_output_enable(chan_en);
set_channel_led(chan_en);
break;
}
case 0x32: { // 0x32 ctrl PR1
//PIN15_setOutputValue(E_PIN_D0_PR_1, ?);
instru.tri_pr1_en = ins[4];
TRC.chan_en[7] = instru.tri_pr1_en;
set_output_enable(TRC.chan_en);
set_channel_led(TRC.chan_en);
chan_en[7] = instru.tri_pr1_en;
set_output_enable(chan_en);
set_channel_led(chan_en);
break;
}
@@ -944,10 +940,10 @@ static void receive_instruction(uint8 *ins)
instru.tri_d0_en = 1;
break;
}
TRC.chan_en[8] = instru.tri_d0_as_5v_en;
TRC.chan_en[1] = instru.tri_d0_en;
set_output_enable(TRC.chan_en);
set_channel_led(TRC.chan_en);
chan_en[8] = instru.tri_d0_as_5v_en;
chan_en[1] = instru.tri_d0_en;
set_output_enable(chan_en);
set_channel_led(chan_en);
break;
}
@@ -967,11 +963,11 @@ static void receive_instruction(uint8 *ins)
instru.tri_d1_en = 1;
break;
}
TRC.chan_en[9] = instru.tri_d1_as_5v_en;
TRC.chan_en[6] = instru.tri_d1_en;
set_output_enable(TRC.chan_en);
chan_en[9] = instru.tri_d1_as_5v_en;
chan_en[6] = instru.tri_d1_en;
set_output_enable(chan_en);
set_channel_led(TRC.chan_en);
set_channel_led(chan_en);
break;
}
@@ -1281,9 +1277,9 @@ static void trig_en_check()
static void InitTrigChan()
{
memset(&TRC, 0x00, sizeof(TRC));
TRC.chan_en[8] = true; // 5V default disable
TRC.chan_en[9] = true;
memset(chan_en, 0x00, sizeof(chan_en));
chan_en[8] = true; // 5V default disable
chan_en[9] = true;
}
static void PIN_trig_edge_set(uint8_t trig0_edge, uint8_t trig1_edge)
@@ -1336,6 +1332,8 @@ static void PIN_trig_edge_set(uint8_t trig0_edge, uint8_t trig1_edge)
// }
}
/* application use SPI parameters and buffers */
#define SPI_GPIO_BUFF_SIZE 10
static void GPIO_SPI_transfer(uint32_t *GPIO_CLK_CH, uint16_t spi_GPIO_txbuf)
{
uint16_t SPI_GPIO[SPI_GPIO_BUFF_SIZE] = {0};
@@ -1697,7 +1695,7 @@ static void analog_current_ctrl_mode(struct gptimer_t *gpt)
{
cnt.output_rate = 0; // To get right data, ADC must be delay 1.5ms
curr_out();
set_output_enable(TRC.chan_en);
set_output_enable(chan_en);
}
// Notify counter(Notify control, check if we need to send notify)
@@ -1738,7 +1736,7 @@ static void all_output_ctrl_mode(struct gptimer_t *gpt)
{
cnt.output_rate = 0; // To get right data, ADC must be delay 1.5ms
curr_out();
set_output_enable(TRC.chan_en);
set_output_enable(chan_en);
WorkModeLED();
}
@@ -47,22 +47,22 @@ void __all_output_ctrl_mode_ch_vsan(struct ch_all_out_ctrl_ctx_t *channel, uint3
if (channel->t_early_period) {
if (ch==CH_D0 && instru.tri_d0_as_5v_en==1) {
if(channel->v_early) {
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 0;
chan_en[CH_D0] = 0;
chan_en[8] = 0;
} else {
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 1;
chan_en[CH_D0] = 0;
chan_en[8] = 1;
}
} else if (ch==CH_D1 && instru.tri_d1_as_5v_en==1) {
if(channel->v_early) {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 0;
chan_en[CH_D1] = 0;
chan_en[9] = 0;
} else {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 1;
chan_en[CH_D1] = 0;
chan_en[9] = 1;
}
} else {
TRC.chan_en[ch] = channel->v_early;
chan_en[ch] = channel->v_early;
}
if (channel->v_scan_rate >= channel->t_early) {
@@ -92,22 +92,22 @@ void __all_output_ctrl_mode_ch_vsan(struct ch_all_out_ctrl_ctx_t *channel, uint3
if (m < channel->t_part[i]) {
if (ch == CH_D0 && instru.tri_d0_as_5v_en==1) {
if(channel->v_mid & (1 << i)) {
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 0;
chan_en[CH_D0] = 0;
chan_en[8] = 0;
} else {
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 1;
chan_en[CH_D0] = 0;
chan_en[8] = 1;
}
} else if (ch == CH_D1 && instru.tri_d1_as_5v_en==1) {
if(channel->v_mid & (1 << i)) {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 0;
chan_en[CH_D1] = 0;
chan_en[9] = 0;
} else {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 1;
chan_en[CH_D1] = 0;
chan_en[9] = 1;
}
} else {
TRC.chan_en[ch] = channel->v_mid & (1 << i);
chan_en[ch] = channel->v_mid & (1 << i);
}
return;
}
@@ -118,35 +118,35 @@ void __all_output_ctrl_mode_ch_vsan(struct ch_all_out_ctrl_ctx_t *channel, uint3
if (channel->t_late_period) {
if (ch==CH_D0 && instru.tri_d0_as_5v_en==1) {
if(channel->v_late) {
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 0;
chan_en[CH_D0] = 0;
chan_en[8] = 0;
} else {
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 1;
chan_en[CH_D0] = 0;
chan_en[8] = 1;
}
} else if (ch==CH_D1 && instru.tri_d1_as_5v_en==1) {
if(channel->v_late) {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 0;
chan_en[CH_D1] = 0;
chan_en[9] = 0;
} else {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 1;
chan_en[CH_D1] = 0;
chan_en[9] = 1;
}
} else {
TRC.chan_en[ch] = channel->v_late;
chan_en[ch] = channel->v_late;
}
if (channel->v_scan_rate >= channel->t_late) {
channel->v_scan_rate -= channel->t_late; //To get right time
channel->used = false;
if (ch==CH_D0 && instru.tri_d0_as_5v_en==1) { //ending
TRC.chan_en[CH_D0] = 0;
TRC.chan_en[8] = 1;
chan_en[CH_D0] = 0;
chan_en[8] = 1;
} else if (ch==CH_D1 && instru.tri_d1_as_5v_en==1) {
TRC.chan_en[CH_D1] = 0;
TRC.chan_en[9] = 1;
chan_en[CH_D1] = 0;
chan_en[9] = 1;
} else {
TRC.chan_en[ch] = 0;
chan_en[ch] = 0;
}
}
return;