| | |
| | | void RS485_read_data_RX_DMA_check(void) |
| | | { |
| | | uint16_t timeout_cnt = 0,dma_recv_cnt; |
| | | uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(DMA_CH3); |
| | | uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(RS485_READ_DATA_DMA_CHX); |
| | | |
| | | if(dma_mar_reg_read != (uint32)RS485_read_data_recv_buff){ |
| | | delay_ms(2); |
| | | while(dma_mar_reg_read != DMA_CHxMAR_Read(DMA_CH3)){ |
| | | dma_mar_reg_read = DMA_CHxMAR_Read(DMA_CH3); |
| | | while(dma_mar_reg_read != DMA_CHxMAR_Read(RS485_READ_DATA_DMA_CHX)){ |
| | | dma_mar_reg_read = DMA_CHxMAR_Read(RS485_READ_DATA_DMA_CHX); |
| | | delay_ms(2); |
| | | if(timeout_cnt++ > 100) |
| | | break; |
| | |
| | | dma_recv_cnt = dma_mar_reg_read - (uint32)RS485_read_data_recv_buff; |
| | | if(dma_recv_cnt) |
| | | { |
| | | if((dma_recv_cnt >= RS485_READ_DATA_RECV_BUFF_LEN_MAX)||(dma_recv_cnt >= WRC_REC_BUF_LENGTH)) |
| | | return; |
| | | rs485_com_uart_data_g.recv_length = dma_recv_cnt; |
| | | arrayA_2_arrayB(RS485_read_data_recv_buff , rs485_com_uart_data_g.recv_buf, dma_recv_cnt, LITTLE_ENDIAN) ; |
| | | rs485_com_uart_data_g.recv_flag = SET;//½ÓÊÕÍê³É |
| | |
| | | if(rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt == 0) //ÑÓʱµ½0¾Í¿ÉÒÔ·¢ËͶÁȡָÁî |
| | | { |
| | | //´®¿ÚÅäÖÃ |
| | | RS485_UART_GPIO_Init(); |
| | | // RS485_UART_GPIO_Init(); //uart_InitÒѾ°üº¬ÁËIOÅäÖà |
| | | switch(flow_meter_para_g.baudrate_code ){ |
| | | case BAUDRATE_1200:BaudRate = 1200; break; |
| | | case BAUDRATE_2400:BaudRate = 2400; break; |
| | |
| | | |
| | | RS485_read_data_uart_Init(BaudRate,ParityBit,OneBit); |
| | | RS485_read_data_RX_DMA_CH3_Init(); |
| | | uart_ctrl_para_g.RS485_rxto_flag = RESET; |
| | | |
| | | RS485_PWR_ON; |
| | | delay_us(10); |
| | |
| | | rs485_com_ctrl_pata_g.reread_wait_time_cnt = RS485_REREAD_WATI_TIME; //ÖØÖõȴýÏìӦʱ¼ä |
| | | return RS485_COM_WAIT_ANSWER; |
| | | } |
| | | |
| | | return RS485_COM_SEND; |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | ErrorStatus read_ok = FAIL; |
| | | //¼ì²é´®¿ÚÊý¾Ý |
| | | RS485_read_data_RX_DMA_check(); |
| | | |
| | | if(uart_ctrl_para_g.RS485_rxto_flag ==SET){ |
| | | uart_ctrl_para_g.RS485_rxto_flag = RESET; |
| | | RS485_read_data_RX_DMA_check(); |
| | | } |
| | | //·ÖÎöÊý¾Ý,Èç¹û³É¹¦¶Áµ½Êý¾Ýread_ok = PASS |
| | | if(rs485_com_uart_data_g.recv_flag == SET){ |
| | | rs485_com_uart_data_g.recv_flag =RESET; |
| | | |
| | | read_ok = rs485ComDataAnalysis(rs485_com_uart_data_g,SIZHUMODBUSV2_0,1,rs485_com_ctrl_pata_g ) ;//?É豸´úÂë¡¢´Ó»úµØÖ·Èë²ÎÒª¸Ä |
| | | memset(rs485_com_uart_data_g.recv_buf, 0, sizeof(rs485_com_uart_data_g.recv_buf)); //Ó¦´ðÍêºóÇå¿Õ½ÓÊÕ |
| | | |
| | | } |
| | | |
| | | if(read_ok==PASS){ |
| | |
| | | RS485_trigger_settle_flag = SET; //RS485²É¼¯Ö®ºó´¥·¢Ò»´Î½áËã |
| | | } |
| | | } |
| | | } |
| | | } |