fix problem with LIDAR

This commit is contained in:
eddyem 2019-09-20 18:02:32 +03:00
parent ffef1590fc
commit 20011c92df
13 changed files with 96 additions and 53 deletions

View File

@ -58,9 +58,9 @@ static int checksum_true(const char *buf){
static void send_chksum(uint8_t chs){ static void send_chksum(uint8_t chs){
usart_putchar(GPS_USART, hex(chs >> 4)); usart_putchar(GPS_USART, hex(chs >> 4));
usart_putchar(1, hex(chs >> 4)); //usart_putchar(1, hex(chs >> 4));
usart_putchar(GPS_USART, hex(chs & 0x0f)); usart_putchar(GPS_USART, hex(chs & 0x0f));
usart_putchar(1, hex(chs & 0x0f)); //usart_putchar(1, hex(chs & 0x0f));
} }
/** /**
* Calculate checksum & write message to port * Calculate checksum & write message to port
@ -78,19 +78,19 @@ static void write_with_checksum(const char *buf){
break; break;
} }
} }
DBG("Send:"); //DBG("Send:");
uint8_t checksum = 0; uint8_t checksum = 0;
usart_putchar(GPS_USART, '$'); usart_putchar(GPS_USART, '$');
usart_putchar(1, '$'); //usart_putchar(1, '$');
GPS_send_string(buf); GPS_send_string(buf);
SEND(buf); //SEND(buf);
do{ do{
checksum ^= *buf++; checksum ^= *buf++;
}while(*buf); }while(*buf);
usart_putchar(GPS_USART, '*'); usart_putchar(GPS_USART, '*');
usart_putchar(1, '*'); //usart_putchar(1, '*');
send_chksum(checksum); send_chksum(checksum);
newline(); //newline();
GPS_endline(); GPS_endline();
} }
@ -155,9 +155,6 @@ void GPS_send_FullColdStart(){
*/ */
void GPS_parse_answer(const char *buf){ void GPS_parse_answer(const char *buf){
char *ptr; char *ptr;
#if defined USART1PROXY
usart_send(1, buf); newline();
#endif
if(buf[1] == 'P') return; // answers to proprietary messages if(buf[1] == 'P') return; // answers to proprietary messages
if(cmpstr(buf+3, "RMC", 3)){ // not RMC message if(cmpstr(buf+3, "RMC", 3)){ // not RMC message
need2startseq = 1; need2startseq = 1;

View File

@ -12,8 +12,6 @@ LDSCRIPT ?= stm32F103xB.ld
DEFS = -DVERSION=\"0.1.0\" DEFS = -DVERSION=\"0.1.0\"
# debug # debug
#DEFS += -DEBUG #DEFS += -DEBUG
# proxy GPS output over USART1
DEFS += -DUSART1PROXY
INDEPENDENT_HEADERS= INDEPENDENT_HEADERS=

View File

@ -86,7 +86,7 @@ uint8_t chkADCtrigger(){
}else{ // check if thigger shot }else{ // check if thigger shot
if(val > (int16_t)the_conf.ADC_min + ADC_THRESHOLD && val < (int16_t)the_conf.ADC_max - ADC_THRESHOLD){ if(val > (int16_t)the_conf.ADC_min + ADC_THRESHOLD && val < (int16_t)the_conf.ADC_max - ADC_THRESHOLD){
triggered = 1; triggered = 1;
fillshotms(4); fillshotms(ADC_TRIGGER);
} }
} }
return triggered; return triggered;

Binary file not shown.

View File

@ -52,6 +52,9 @@ typedef struct __attribute__((packed, aligned(4))){
#define FLAG_SAVE_EVENTS (1 << 0) #define FLAG_SAVE_EVENTS (1 << 0)
// strings ends with "\r\n" instead of normal "\n" // strings ends with "\r\n" instead of normal "\n"
#define FLAG_STRENDRN (1 << 1) #define FLAG_STRENDRN (1 << 1)
// proxy GPS messages over USART1
#define FLAG_GPSPROXY (1 << 2)
/* /*
* struct to save events logs * struct to save events logs

View File

@ -42,7 +42,7 @@ static uint8_t trigstate[DIGTRIG_AMOUNT];
// time of triggers shot // time of triggers shot
trigtime shottime[TRIGGERS_AMOUNT]; trigtime shottime[TRIGGERS_AMOUNT];
// Tms value when they shot // Tms value when they shot
static uint32_t shotms[TRIGGERS_AMOUNT]; uint32_t shotms[TRIGGERS_AMOUNT];
// trigger length (-1 if > MAX_TRIG_LEN) // trigger length (-1 if > MAX_TRIG_LEN)
int16_t triglen[TRIGGERS_AMOUNT]; int16_t triglen[TRIGGERS_AMOUNT];
// if trigger[N] shots, the bit N will be 1 // if trigger[N] shots, the bit N will be 1
@ -187,7 +187,7 @@ void fillunshotms(){
if(pinval != trigstate[i]) rdy = 1; // trigger is OFF if(pinval != trigstate[i]) rdy = 1; // trigger is OFF
} }
if(rdy){ if(rdy){
shotms[i] = Tms; if(i != LIDAR_TRIGGER) shotms[i] = Tms;
show_trigger_shot(X); show_trigger_shot(X);
trigger_shot &= ~X; trigger_shot &= ~X;
} }

View File

@ -41,7 +41,7 @@ extern uint8_t buzzer_on;
#define BUZZER_OFF() pin_clear(BUZZER_port, BUZZER_pin) #define BUZZER_OFF() pin_clear(BUZZER_port, BUZZER_pin)
#define BUZZER_GET() (pin_read(BUZZER_port, BUZZER_pin)) #define BUZZER_GET() (pin_read(BUZZER_port, BUZZER_pin))
// minimal time to buzzer to cheep (ms) // minimal time to buzzer to cheep (ms)
#define BUZZER_CHEEP_TIME (500) #define BUZZER_CHEEP_TIME 500
// PPS pin - PA1 // PPS pin - PA1
#define PPS_port GPIOA #define PPS_port GPIOA
@ -49,15 +49,15 @@ extern uint8_t buzzer_on;
// PPS and triggers state // PPS and triggers state
// amount of triggers, should be less than 9; 5 - 0..2 - switches, 3 - LIDAR, 4 - ADC // amount of triggers, should be less than 9; 5 - 0..2 - switches, 3 - LIDAR, 4 - ADC
#define TRIGGERS_AMOUNT (5) #define TRIGGERS_AMOUNT 5
// number of LIDAR trigger // number of LIDAR trigger
#define LIDAR_TRIGGER (3) #define LIDAR_TRIGGER 3
// number of ADC trigger // number of ADC trigger
#define ADC_TRIGGER (4) #define ADC_TRIGGER 4
// amount of digital triggers (on interrupts) // amount of digital triggers (on interrupts)
#define DIGTRIG_AMOUNT (3) #define DIGTRIG_AMOUNT 3
// max length of trigger event (ms) // max length of trigger event (ms)
#define MAX_TRIG_LEN (1000) #define MAX_TRIG_LEN 1000
#ifdef EBUG #ifdef EBUG
uint8_t gettrig(uint8_t N); uint8_t gettrig(uint8_t N);

View File

@ -24,6 +24,8 @@ uint16_t last_lidar_dist = 0;
uint16_t last_lidar_stren = 0; uint16_t last_lidar_stren = 0;
uint16_t lidar_triggered_dist = 0; uint16_t lidar_triggered_dist = 0;
extern uint32_t shotms[];
/** /**
* @brief parse_lidar_data - parsing of string from lidar * @brief parse_lidar_data - parsing of string from lidar
* @param txt - the string or NULL (if you want just check trigger state) * @param txt - the string or NULL (if you want just check trigger state)
@ -31,7 +33,16 @@ uint16_t lidar_triggered_dist = 0;
*/ */
uint8_t parse_lidar_data(char *txt){ uint8_t parse_lidar_data(char *txt){
static uint8_t triggered = 0; static uint8_t triggered = 0;
if(!txt) return triggered; if(!txt){
// clear trigger state after timeout -> need to monitor lidar
uint32_t len = Tms - shotms[LIDAR_TRIGGER];
//if(len > MAX_TRIG_LEN || len > (uint32_t)the_conf.trigpause[LIDAR_TRIGGER]){
if(len > MAX_TRIG_LEN){
triggered = 0;
DBG("MAX time gone, untrigger!");
}
return triggered;
}
last_lidar_dist = txt[2] | (txt[3] << 8); last_lidar_dist = txt[2] | (txt[3] << 8);
last_lidar_stren = txt[4] | (txt[5] << 8); last_lidar_stren = txt[4] | (txt[5] << 8);
if(last_lidar_stren < LIDAR_LOWER_STREN) return 0; // weak signal if(last_lidar_stren < LIDAR_LOWER_STREN) return 0; // weak signal

View File

@ -266,7 +266,7 @@ int main(void){
} }
// check if triggers that was recently shot are off now // check if triggers that was recently shot are off now
fillunshotms(); fillunshotms();
if(lastT > Tms || Tms - lastT > 499){ if(Tms - lastT > 499){
if(need2startseq) GPS_send_start_seq(); if(need2startseq) GPS_send_start_seq();
IWDG->KR = IWDG_REFRESH; IWDG->KR = IWDG_REFRESH;
switch(GPS_status){ switch(GPS_status){
@ -280,17 +280,15 @@ int main(void){
LED1_off(); // turn off LED1 if GPS not found or time unknown LED1_off(); // turn off LED1 if GPS not found or time unknown
} }
lastT = Tms; lastT = Tms;
if(usartrx(LIDAR_USART)){ /*if(usartrx(LIDAR_USART)){
char *txt; char *txt;
if(usart_getline(LIDAR_USART, &txt)){ if(usart_getline(LIDAR_USART, &txt)){
DBG("LIDAR:"); DBG("LIDAR:");
DBG(txt); DBG(txt);
} }
} }*/
IWDG->KR = IWDG_REFRESH; IWDG->KR = IWDG_REFRESH;
#if defined EBUG || defined USART1PROXY
transmit_tbuf(1); // non-blocking transmission of data from UART buffer every 0.5s transmit_tbuf(1); // non-blocking transmission of data from UART buffer every 0.5s
#endif
transmit_tbuf(GPS_USART); transmit_tbuf(GPS_USART);
transmit_tbuf(LIDAR_USART); transmit_tbuf(LIDAR_USART);
#ifdef EBUG #ifdef EBUG
@ -333,7 +331,6 @@ int main(void){
} }
IWDG->KR = IWDG_REFRESH; IWDG->KR = IWDG_REFRESH;
} }
#if defined EBUG || defined USART1PROXY
if(usartrx(1)){ // usart1 received data, store in in buffer if(usartrx(1)){ // usart1 received data, store in in buffer
r = usart_getline(1, &txt); r = usart_getline(1, &txt);
if(r){ if(r){
@ -348,18 +345,19 @@ int main(void){
transmit_tbuf(1); transmit_tbuf(1);
IWDG->KR = IWDG_REFRESH; IWDG->KR = IWDG_REFRESH;
} }
#else // USART1PROXY - send received data to GPS #endif
if(the_conf.defflags & FLAG_GPSPROXY){
usart_send(GPS_USART, txt); usart_send(GPS_USART, txt);
IWDG->KR = IWDG_REFRESH; IWDG->KR = IWDG_REFRESH;
#endif
} }
} }
#endif }
if(usartrx(GPS_USART)){ if(usartrx(GPS_USART)){
IWDG->KR = IWDG_REFRESH; IWDG->KR = IWDG_REFRESH;
r = usart_getline(GPS_USART, &txt); r = usart_getline(GPS_USART, &txt);
if(r){ if(r){
txt[r] = 0; txt[r] = 0;
if(the_conf.defflags & FLAG_GPSPROXY) usart_send(1, txt);
GPS_parse_answer(txt); GPS_parse_answer(txt);
} }
} }

View File

@ -92,6 +92,9 @@ static void showuserconf(){
USB_send("\nSAVE_EVENTS="); USB_send("\nSAVE_EVENTS=");
if(f & FLAG_SAVE_EVENTS) USB_send("1"); if(f & FLAG_SAVE_EVENTS) USB_send("1");
else USB_send("0"); else USB_send("0");
USB_send("\nGPSPROXY=");
if(f & FLAG_GPSPROXY) USB_send("1");
else USB_send("0");
USB_send("\nNFREE="); USB_send("\nNFREE=");
sendu(the_conf.NLfreeWarn); sendu(the_conf.NLfreeWarn);
USB_send("\n"); USB_send("\n");
@ -121,6 +124,7 @@ int parse_USBCMD(char *cmd){
CMD_DISTMAX " - max distance threshold (cm)\n" CMD_DISTMAX " - max distance threshold (cm)\n"
CMD_DUMP "N - dump 20 last stored events (no x), all (x<1) or x\n" CMD_DUMP "N - dump 20 last stored events (no x), all (x<1) or x\n"
CMD_FLASH " - FLASH info\n" CMD_FLASH " - FLASH info\n"
CMD_GPSPROXY "S - GPS proxy over USART1 on/off\n"
CMD_GPSRESTART " - send Full Cold Restart to GPS\n" CMD_GPSRESTART " - send Full Cold Restart to GPS\n"
CMD_GPSSTAT " - get GPS status\n" CMD_GPSSTAT " - get GPS status\n"
CMD_GPSSTR " - current GPS data string\n" CMD_GPSSTR " - current GPS data string\n"
@ -149,8 +153,8 @@ int parse_USBCMD(char *cmd){
if(the_conf.dist_min != (uint16_t)N){ if(the_conf.dist_min != (uint16_t)N){
conf_modified = 1; conf_modified = 1;
the_conf.dist_min = (uint16_t) N; the_conf.dist_min = (uint16_t) N;
succeed = 1;
} }
succeed = 1;
}else if(CMP(cmd, CMD_DISTMAX) == 0){ // set low limit }else if(CMP(cmd, CMD_DISTMAX) == 0){ // set low limit
DBG("CMD_DISTMAX"); DBG("CMD_DISTMAX");
GETNUM(CMD_DISTMAX); GETNUM(CMD_DISTMAX);
@ -158,8 +162,8 @@ int parse_USBCMD(char *cmd){
if(the_conf.dist_max != (uint16_t)N){ if(the_conf.dist_max != (uint16_t)N){
conf_modified = 1; conf_modified = 1;
the_conf.dist_max = (uint16_t) N; the_conf.dist_max = (uint16_t) N;
succeed = 1;
} }
succeed = 1;
}else if(CMP(cmd, CMD_STORECONF) == 0){ // store everything }else if(CMP(cmd, CMD_STORECONF) == 0){ // store everything
DBG("Store"); DBG("Store");
if(conf_modified){ if(conf_modified){
@ -193,8 +197,10 @@ int parse_USBCMD(char *cmd){
if(Nt > TRIGGERS_AMOUNT - 1) goto bad_number; if(Nt > TRIGGERS_AMOUNT - 1) goto bad_number;
if(getnum(cmd, &N)) goto bad_number; if(getnum(cmd, &N)) goto bad_number;
if(N < 0 || N > 10000) goto bad_number; if(N < 0 || N > 10000) goto bad_number;
if(the_conf.trigpause[Nt] != N) conf_modified = 1; if(the_conf.trigpause[Nt] != N){
conf_modified = 1;
the_conf.trigpause[Nt] = N; the_conf.trigpause[Nt] = N;
}
succeed = 1; succeed = 1;
}else if(CMP(cmd, CMD_TRGTIME) == 0){ }else if(CMP(cmd, CMD_TRGTIME) == 0){
DBG("Trigger time"); DBG("Trigger time");
@ -245,16 +251,16 @@ int parse_USBCMD(char *cmd){
if(the_conf.ADC_max != (int16_t)N){ if(the_conf.ADC_max != (int16_t)N){
conf_modified = 1; conf_modified = 1;
the_conf.ADC_max = (int16_t) N; the_conf.ADC_max = (int16_t) N;
succeed = 1;
} }
succeed = 1;
}else if(CMP(cmd, CMD_ADCMIN) == 0){ // set low limit }else if(CMP(cmd, CMD_ADCMIN) == 0){ // set low limit
GETNUM(CMD_ADCMIN); GETNUM(CMD_ADCMIN);
if(N < -4096 || N > 4096) goto bad_number; if(N < -4096 || N > 4096) goto bad_number;
if(the_conf.ADC_min != (int16_t)N){ if(the_conf.ADC_min != (int16_t)N){
conf_modified = 1; conf_modified = 1;
the_conf.ADC_min = (int16_t) N; the_conf.ADC_min = (int16_t) N;
succeed = 1;
} }
succeed = 1;
}else if(CMP(cmd, CMD_GPSRESTART) == 0){ }else if(CMP(cmd, CMD_GPSRESTART) == 0){
USB_send("Send full cold restart to GPS\n"); USB_send("Send full cold restart to GPS\n");
GPS_send_FullColdStart(); GPS_send_FullColdStart();
@ -297,17 +303,25 @@ int parse_USBCMD(char *cmd){
if(the_conf.USART_speed != (uint32_t)N){ if(the_conf.USART_speed != (uint32_t)N){
the_conf.USART_speed = (uint32_t)N; the_conf.USART_speed = (uint32_t)N;
conf_modified = 1; conf_modified = 1;
succeed = 1;
} }
succeed = 1;
}else if(CMP(cmd, CMD_RESET) == 0){ }else if(CMP(cmd, CMD_RESET) == 0){
USB_send("Soft reset\n"); USB_send("Soft reset\n");
NVIC_SystemReset(); NVIC_SystemReset();
}else if(CMP(cmd, CMD_STREND) == 0){ }else if(CMP(cmd, CMD_STREND) == 0){
char c = cmd[sizeof(CMD_STREND) - 1]; char c = cmd[sizeof(CMD_STREND) - 1];
succeed = 1; succeed = 1;
if(c == 'n' || c == 'N') the_conf.defflags &= ~FLAG_STRENDRN; if(c == 'n' || c == 'N'){
else if(c == 'r' || c == 'R') the_conf.defflags |= FLAG_STRENDRN; if(the_conf.defflags & FLAG_STRENDRN){
else{ conf_modified = 1;
the_conf.defflags &= ~FLAG_STRENDRN;
}
}else if(c == 'r' || c == 'R'){
if(!(the_conf.defflags & FLAG_STRENDRN)){
conf_modified = 1;
the_conf.defflags |= FLAG_STRENDRN;
}
}else{
succeed = 0; succeed = 0;
USB_send("Bad letter, should be 'n' or 'r'\n"); USB_send("Bad letter, should be 'n' or 'r'\n");
} }
@ -332,8 +346,17 @@ int parse_USBCMD(char *cmd){
sendu(maxLnum - 1); sendu(maxLnum - 1);
USB_send("\n"); USB_send("\n");
}else if(CMP(cmd, CMD_SAVEEVTS) == 0){ }else if(CMP(cmd, CMD_SAVEEVTS) == 0){
if('0' == cmd[sizeof(CMD_SAVEEVTS) - 1]) the_conf.defflags &= ~FLAG_SAVE_EVENTS; if('0' == cmd[sizeof(CMD_SAVEEVTS) - 1]){
else the_conf.defflags |= FLAG_SAVE_EVENTS; if(the_conf.defflags & FLAG_SAVE_EVENTS){
conf_modified = 1;
the_conf.defflags &= ~FLAG_SAVE_EVENTS;
}
}else{
if(!(the_conf.defflags & FLAG_SAVE_EVENTS)){
conf_modified = 1;
the_conf.defflags |= FLAG_SAVE_EVENTS;
}
}
succeed = 1; succeed = 1;
}else if(CMP(cmd, CMD_DUMP) == 0){ }else if(CMP(cmd, CMD_DUMP) == 0){
if(getnum(cmd+sizeof(CMD_DUMP)-1, &N)) N = -20; // default - without N if(getnum(cmd+sizeof(CMD_DUMP)-1, &N)) N = -20; // default - without N
@ -343,11 +366,27 @@ int parse_USBCMD(char *cmd){
}else if(CMP(cmd, CMD_NFREE) == 0){ }else if(CMP(cmd, CMD_NFREE) == 0){
GETNUM(CMD_NFREE); GETNUM(CMD_NFREE);
if(N < 0 || N > 0xffff) goto bad_number; if(N < 0 || N > 0xffff) goto bad_number;
if(the_conf.NLfreeWarn != (uint16_t)N){
conf_modified = 1;
the_conf.NLfreeWarn = (uint16_t)N; the_conf.NLfreeWarn = (uint16_t)N;
}
succeed = 1; succeed = 1;
}else if(CMP(cmd, CMD_DELLOGS) == 0){ }else if(CMP(cmd, CMD_DELLOGS) == 0){
if(store_log(NULL)) USB_send("Error during erasing flash\n"); if(store_log(NULL)) USB_send("Error during erasing flash\n");
else USB_send("All logs erased\n"); else USB_send("All logs erased\n");
}else if(CMP(cmd, CMD_GPSPROXY) == 0){
if(cmd[sizeof(CMD_GPSPROXY) - 1] == '0'){
if(the_conf.defflags & FLAG_GPSPROXY){
conf_modified = 1;
the_conf.defflags &= ~FLAG_GPSPROXY;
}
}else{
if(!(the_conf.defflags & FLAG_GPSPROXY)){
conf_modified = 1;
the_conf.defflags |= FLAG_GPSPROXY;
}
}
succeed = 1;
}else return 1; }else return 1;
/*else if(CMP(cmd, CMD_) == 0){ /*else if(CMP(cmd, CMD_) == 0){
; ;
@ -377,7 +416,7 @@ char *get_trigger_shot(int number, const event_log *logdata){
if(logdata->trigno == LIDAR_TRIGGER){ if(logdata->trigno == LIDAR_TRIGGER){
bptr = strcp(bptr, "LIDAR, dist="); bptr = strcp(bptr, "LIDAR, dist=");
bptr = strcp(bptr, u2str(logdata->lidar_dist)); bptr = strcp(bptr, u2str(logdata->lidar_dist));
bptr = strcp(bptr, ", TRIG" STR(LIDAR_TRIGGER) "="); bptr = strcp(bptr, ", TRIG" STR(LIDAR_TRIGGER));
}else{ }else{
bptr = strcp(bptr, "TRIG"); bptr = strcp(bptr, "TRIG");
*bptr++ = '0' + logdata->trigno; *bptr++ = '0' + logdata->trigno;

View File

@ -51,6 +51,7 @@
#define CMD_DUMP "dump" #define CMD_DUMP "dump"
#define CMD_NFREE "nfree" #define CMD_NFREE "nfree"
#define CMD_DELLOGS "deletelogs" #define CMD_DELLOGS "deletelogs"
#define CMD_GPSPROXY "gpsproxy"
extern uint8_t showGPSstr; extern uint8_t showGPSstr;

View File

@ -62,10 +62,12 @@ void time_increment(){
current_time.H = 0; current_time.H = 0;
} }
} }
/*
#ifdef EBUG #ifdef EBUG
SEND("time_increment(): "); SEND("time_increment(): ");
SEND(get_time(&current_time, 0)); SEND(get_time(&current_time, 0));
#endif #endif
*/
} }
static char *puttwo(uint8_t N, char *buf){ static char *puttwo(uint8_t N, char *buf){

View File

@ -96,7 +96,7 @@ void usart_send(int n, const char *str){
tbuf[n][tbufno[n]][odatalen[n][tbufno[n]]++] = *str++; tbuf[n][tbufno[n]][odatalen[n][tbufno[n]]++] = *str++;
} }
} }
#if defined EBUG || defined USART1PROXY #if defined EBUG
// only for USART1 // only for USART1
void newline(){ void newline(){
usart_putchar(1, '\n'); usart_putchar(1, '\n');
@ -170,9 +170,7 @@ static void usart_setup(int n, uint32_t BRR){
void usarts_setup(){ void usarts_setup(){
RCC->AHBENR |= RCC_AHBENR_DMA1EN; RCC->AHBENR |= RCC_AHBENR_DMA1EN;
#if defined EBUG || defined USART1PROXY
usart_setup(1, 72000000 / the_conf.USART_speed); // debug console or GPS proxy usart_setup(1, 72000000 / the_conf.USART_speed); // debug console or GPS proxy
#endif
usart_setup(2, 36000000 / 9600); // GPS usart_setup(2, 36000000 / 9600); // GPS
usart_setup(3, 36000000 / 115200); // LIDAR usart_setup(3, 36000000 / 115200); // LIDAR
} }
@ -217,11 +215,9 @@ void usart_isr(int n, USART_TypeDef *USART){
} }
} }
#if defined EBUG || defined USART1PROXY
void usart1_isr(){ void usart1_isr(){
usart_isr(1, USART1); usart_isr(1, USART1);
} }
#endif
// GPS_USART // GPS_USART
void usart2_isr(){ void usart2_isr(){
@ -279,14 +275,12 @@ void hexdump(uint8_t *arr, uint16_t len){
} }
#endif #endif
#if defined EBUG || defined USART1PROXY
void dma1_channel4_isr(){ // USART1 void dma1_channel4_isr(){ // USART1
if(DMA1->ISR & DMA_ISR_TCIF4){ // Tx if(DMA1->ISR & DMA_ISR_TCIF4){ // Tx
DMA1->IFCR = DMA_IFCR_CTCIF4; // clear TC flag DMA1->IFCR = DMA_IFCR_CTCIF4; // clear TC flag
txrdy[1] = 1; txrdy[1] = 1;
} }
} }
#endif
void dma1_channel7_isr(){ // USART2 void dma1_channel7_isr(){ // USART2
if(DMA1->ISR & DMA_ISR_TCIF7){ // Tx if(DMA1->ISR & DMA_ISR_TCIF7){ // Tx