Electricity/FWLIB/include/ENS1_UART.h

202 lines
6.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*Copyright (C),2023 , NANOCHAP
*File name: ENS1_UART.H
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
1 void UART_Init(CMSDK_UART_TypeDef *CMSDK_UART, UART_InitStructure* uart_paraX);
2 void UART_ITConfig(CMSDK_UART_TypeDef *CMSDK_UART, UART_ITStructure* uart_paraX);
3 unsigned char UartPutc(CMSDK_UART_TypeDef *CMSDK_UART ,unsigned char my_ch);
History:
1.V1.0
Date: -z
Author:
Modification: <20><><EFBFBD><EFBFBD>
*/
#ifndef _ENS1_UART_H_
#define _ENS1_UART_H_
#include "MY_HEADER.h"
#include "CMSDK_CM0.h"
#include "ENS1_CLOCK.h"
#include "math.h"
#define UART0_RX GPIO_2
#define UART0_TX GPIO_3
#define UART0_RTS GPIO_4
#define UART0_CTS GPIO_5
#define UART1_RX GPIO_12
#define UART1_TX GPIO_13
#define UART1_RTS GPIO_14
#define UART1_CTS GPIO_15
#define InterruptDisable __disable_irq
#define InterruptEnable __enable_irq
typedef enum uartRcvfifoTrigger{byte_1=0 , bytes_4=1,bytes_8=2,bytes_14=3}uartRcvTrigger;
typedef enum {OverSamp_16 = 0,OverSamp_13}UART_OverSamp;
// 外部变量声明在main.c中定义
extern uint8_t uart_rx_buffer[64];
extern uint8_t uart_rx_count;
extern volatile uint8_t uart_data_ready;
typedef enum {
StopLen_1 = 0,
StopLen_Other
}UART_StopLen;
typedef enum {
WordLen_5,
WordLen_6,
WordLen_7,
WordLen_8
}UART_WordLen;
typedef enum {
Stick_RESET = 0,
Stick_SET
}UART_Stick_EN;
typedef enum {
Odd_SET = 0,
Even_SET
}UART_Even_EN;
typedef enum {
Parity_RESET = 0,
Parity_SET
}UART_Parity_EN;
/*uart<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ<C3BD><E1B9B9>*/
typedef struct uart_fifo{
uartRcvTrigger level;
uint8_t DMA_Enable ;
uint8_t FIFO_Enable ;
}UART_FifoStructrue;
typedef struct uart_para{
uint8_t UART_OverSampMode;
uint32_t UART_BaudRate;
uint8_t UART_HardwareFlowControl; //Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>
UART_FifoStructrue* FifoSetting ;
UART_StopLen stop_len; //停止位长度
UART_WordLen Word_len; //数据位长度
UART_Stick_EN Stick_EN; //固定奇偶校验使能
UART_Even_EN Even_EN; //奇偶校验选择
UART_Parity_EN Parity_EN; //奇偶校验使能
}UART_InitStructure;
extern UART_FifoStructrue UART0_Fifo;
extern UART_InitStructure UART0_Init;
extern UART_FifoStructrue UART1_Fifo;
extern UART_InitStructure UART1_Init;
/*
<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>Դ˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1<EFBFBD><EFBFBD>THREINT THR<48><52><EFBFBD>ͼĴ<CDBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO<46><4F>
2<EFBFBD><EFBFBD>RDAINT <20><><EFBFBD>ռĴ<D5BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD> <20><>FIFOģʽ<C4A3>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
3<EFBFBD><EFBFBD>RTOINT FIFOģʽ<C4A3>½<EFBFBD><C2BD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ֽ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ֽ<EFBFBD><D6BD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD>ڽ<EFBFBD><DABD><EFBFBD>FIFO<46><4F>
4<EFBFBD><EFBFBD>RLSINT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
5<EFBFBD><EFBFBD>MSIINT <20><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>CTS<54><53><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>autoflow<6F><77><EFBFBD><EFBFBD>DSR/RI/DCD<43><44><EFBFBD><EFBFBD>״̬
*/
/*<2A>ж<EFBFBD>ʹ<EFBFBD><CAB9>*/
#define MSI_EN (uint8_t)0X8
#define RLSI_EN (uint8_t)0X4
#define THRE_EN (uint8_t)0X2
#define RDAI_EN (uint8_t)0X1
/*<2A>ж<EFBFBD><D0B6><EFBFBD>Ϣ*/
#define INT_MODEM_STATUS (uint8_t)0X0
#define INT_THR_EMPTY (uint8_t)0X1
#define INT_RCV_DATA_AVAILABLE (uint8_t)0X2
#define INT_RCV_LINE_STATUS (uint8_t)0X3
#define INT_CHAR_TIMEOUT_INDICATION (uint8_t)0X6
typedef struct uart_it_para{
uint8_t UartIntModel ; //ѡ<><D1A1><EFBFBD>жϵ<D0B6>ģʽ
uint8_t UartDMAEnable; //ѡ<><D1A1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>DMA
}UART_ITStructure;
extern UART_ITStructure UART0_ITSet;
extern UART_ITStructure UART1_ITSet;
#define UART_WordLength_5b ((uint8_t)0x00)
#define UART_WordLength_6b ((uint8_t)0x01)
#define UART_WordLength_7b ((uint8_t)0x02)
#define UART_WordLength_8b ((uint8_t)0x03)
#define UART_NO_PARITY ((uint8_t)0x00 & 0xff)
#define UART_LOGIC_1_ODD_NUM ((uint8_t)0x08 & 0xff) //<2F>߼<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define UART_LOGIC_1_EVEN_NUM ((uint8_t)0x18 & 0xff) //<2F>߼<EFBFBD><31><C5BC><EFBFBD><EFBFBD>
#define UART_STICK_PARITY_AS1 ((uint8_t)0x28 & 0xff) //<2F>̶<EFBFBD><CCB6><EFBFBD>żУ<C5BC><D0A3>Ϊ1
#define UART_STICK_PARITY_AS0 ((uint8_t)0x38 & 0xff)
/*<2A>ж<EFBFBD><D0B6><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ*/
/*<2A>жϹ<D0B6><CFB9><EFBFBD>*/
uint8_t UART_INT_PEND(CMSDK_UART_TypeDef* UARTx); //Ϊ0ʱ<30><CAB1>UART<52><54><EFBFBD>жϹ<D0B6><CFB9><EFBFBD>
/*<2A>ж<EFBFBD>״̬<D7B4>ж<EFBFBD>*/
uint8_t UART_INT_TYPE(CMSDK_UART_TypeDef* UARTx);
/*fifo ʹ<><CAB9>ָʾ<D6B8><CABE>*/
uint8_t UART_FIFO_USE(CMSDK_UART_TypeDef* UARTx); //0:<3A><>fifoģʽ 1<><31>fifo ʹ<><CAB9>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO*/
void UART_TXCLR(CMSDK_UART_TypeDef* UARTx);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO*/
void UART_RXCLR(CMSDK_UART_TypeDef* UARTx);
/*FIFOʹ<4F><CAB9>*/
void UART_FIFOEnable(CMSDK_UART_TypeDef* UARTx);
/*FIFO<46>ر<EFBFBD>*/
void UART_FIFODisable(CMSDK_UART_TypeDef* UARTx);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t READ_UART_RCVBuff(CMSDK_UART_TypeDef* UARTx );
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void WRITE_UART_THRBuff(CMSDK_UART_TypeDef* UARTx ,uint8_t data);
/*FIFO״̬<D7B4><CCAC>ȡ*/
uint8_t UART_RX_FIFO_LEN(CMSDK_UART_TypeDef* UARTx) ;
uint8_t UART_TX_FIFO_LEN(CMSDK_UART_TypeDef* UARTx) ;
uint8_t UART_RX_FIFO_FULL(CMSDK_UART_TypeDef* UARTx) ;
uint8_t UART_RX_FIFO_EMPTY(CMSDK_UART_TypeDef* UARTx) ;
uint8_t UART_TX_FIFO_FULL(CMSDK_UART_TypeDef* UARTx) ;
uint8_t UART_TX_FIFO_EMPTY(CMSDK_UART_TypeDef* UARTx) ;
/*<2A>շ<EFBFBD><D5B7><EFBFBD>״̬<D7B4><CCAC>ȡ*/
uint8_t UARTLine_RCVError(CMSDK_UART_TypeDef* UARTx);
/*<2A>жϷ<D0B6><CFB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>*/
uint8_t UARTLine_TRANSEmpty(CMSDK_UART_TypeDef* UARTx);
/*<2A>ж<EFBFBD>THR<48>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>*/
uint8_t UARTLine_THREmpty(CMSDK_UART_TypeDef* UARTx);
/*UART<52><54>ʼ<EFBFBD><CABC>*/
void UART_Init(CMSDK_UART_TypeDef *CMSDK_UART, UART_InitStructure* uart_paraX);
void UART_ITConfig(CMSDK_UART_TypeDef *CMSDK_UART, UART_ITStructure* uart_paraX);
unsigned char UartPutc(CMSDK_UART_TypeDef *CMSDK_UART ,unsigned char my_ch);
void Uart_Send(CMSDK_UART_TypeDef *CMSDK_UART ,uint8_t *data, uint8_t len);
typedef struct {
uint16_t function_code; // 功能码 (0x0003)
uint16_t data_length; // 数据长度 (0x0001)
uint8_t switch_type; // 开关状态以及电刺激类型
uint8_t intensity; // 强度值
uint16_t frequency; // 频率值
uint16_t duration; // 总持续时间 (ms)
uint16_t rest_time; // 休息时间 (ms)
uint16_t silent_time; // 静默时间 (ms)
uint8_t ramp_up_time; // 缓进时间
uint8_t hold_time; // 保持时间
uint8_t ramp_down_time; // 缓出时间
uint16_t crc16; // CRC16校验
} UART_EMS_Packet_t;
#endif