#ifndef _WK2XXX_H_ #define _WK2XXX_H_ #include "main.h" #define WK2XXX_GPORT 1// /wkxxxx Global rigister of PORT #define WK2XXX_GENA 0X00 #define WK2XXX_GRST 0X01 #define WK2XXX_GMUT 0X02 #define WK2XXX_GIER 0X10 #define WK2XXX_GIFR 0X11 #define WK2XXX_GPDIR 0X21 #define WK2XXX_GPDAT 0X31 //wkxxxx slave uarts rigister address defines #define WK2XXX_SPAGE 0X03 //PAGE0 #define WK2XXX_SCR 0X04 #define WK2XXX_LCR 0X05 #define WK2XXX_FCR 0X06 #define WK2XXX_SIER 0X07 #define WK2XXX_SIFR 0X08 #define WK2XXX_TFCNT 0X09 #define WK2XXX_RFCNT 0X0A #define WK2XXX_FSR 0X0B #define WK2XXX_LSR 0X0C #define WK2XXX_FDAT 0X0D #define WK2XXX_FWCR 0X0E #define WK2XXX_RS485 0X0F //PAGE1 #define WK2XXX_BAUD1 0X04 #define WK2XXX_BAUD0 0X05 #define WK2XXX_PRES 0X06 #define WK2XXX_RFTL 0X07 #define WK2XXX_TFTL 0X08 #define WK2XXX_FWTH 0X09 #define WK2XXX_FWTL 0X0A #define WK2XXX_XON1 0X0B #define WK2XXX_XOFF1 0X0C #define WK2XXX_SADR 0X0D #define WK2XXX_SAEN 0X0E #define WK2XXX_RTSDLY 0X0F //WK串口扩展芯片的寄存器的位定义 //wkxxx register bit defines // GENA #define WK2XXX_UT4EN 0x08 #define WK2XXX_UT3EN 0x04 #define WK2XXX_UT2EN 0x02 #define WK2XXX_UT1EN 0x01 //GRST #define WK2XXX_UT4SLEEP 0x80 #define WK2XXX_UT3SLEEP 0x40 #define WK2XXX_UT2SLEEP 0x20 #define WK2XXX_UT1SLEEP 0x10 #define WK2XXX_UT4RST 0x08 #define WK2XXX_UT3RST 0x04 #define WK2XXX_UT2RST 0x02 #define WK2XXX_UT1RST 0x01 //GIER #define WK2XXX_UT4IE 0x08 #define WK2XXX_UT3IE 0x04 #define WK2XXX_UT2IE 0x02 #define WK2XXX_UT1IE 0x01 //GIFR #define WK2XXX_UT4INT 0x08 #define WK2XXX_UT3INT 0x04 #define WK2XXX_UT2INT 0x02 #define WK2XXX_UT1INT 0x01 //SPAGE #define WK2XXX_SPAGE0 0x00 #define WK2XXX_SPAGE1 0x01 //SCR #define WK2XXX_SLEEPEN 0x04 #define WK2XXX_TXEN 0x02 #define WK2XXX_RXEN 0x01 //LCR #define WK2XXX_BREAK 0x20 #define WK2XXX_IREN 0x10 #define WK2XXX_PAEN 0x08 #define WK2XXX_PAM1 0x04 #define WK2XXX_PAM0 0x02 #define WK2XXX_STPL 0x01 //FCR //SIER #define WK2XXX_FERR_IEN 0x80 #define WK2XXX_CTS_IEN 0x40 #define WK2XXX_RTS_IEN 0x20 #define WK2XXX_XOFF_IEN 0x10 #define WK2XXX_TFEMPTY_IEN 0x08 #define WK2XXX_TFTRIG_IEN 0x04 #define WK2XXX_RXOUT_IEN 0x02 #define WK2XXX_RFTRIG_IEN 0x01 //SIFR #define WK2XXX_FERR_INT 0x80 /* 接收FIFO数据错误中断标志位 */ #define WK2XXX_CTS_INT 0x40 #define WK2XXX_RTS_INT 0x20 #define WK2XXX_XOFF_INT 0x10 #define WK2XXX_TFEMPTY_INT 0x08 /* 发送FIFO空中断标志位 */ #define WK2XXX_TFTRIG_INT 0x04 /* 发送FIFO触点中断标志位 */ #define WK2XXX_RXOVT_INT 0x02 /* 接收FIFO超时中断标志位 */ #define WK2XXX_RFTRIG_INT 0x01 /* 接收FIFO触点中断标志位 */ //TFCNT //RFCNT //FSR FIFO #define WK2XXX_RFOE 0x80 /* 子串口溢出 */ #define WK2XXX_RFBI 0x40 /* 子串口 break line */ #define WK2XXX_RFFE 0x20 /* 子串口数据帧错误 */ #define WK2XXX_RFPE 0x10 /* 子串口数据校验错误 */ #define WK2XXX_RDAT 0x08 /* 子串口接收为空 0:非空 1:空*/ #define WK2XXX_TDAT 0x04 /* 子串口发送为空 */ #define WK2XXX_TFULL 0x02 /* 子串口发送满 */ #define WK2XXX_TBUSY 0x01 /* 子串口发送忙 */ //LSR 接收状态 #define WK2XXX_OE 0x08 /* 子串口接收溢出 */ #define WK2XXX_BI 0x04 /* 子串口接收 line-break */ #define WK2XXX_FE 0x02 /* 子串口数据接收帧错误 */ #define WK2XXX_PE 0x01 /* 子串口数据接收校验错误 */ //FWCR uint16_t WK_PortSendData(uint8_t port, const void* buf, uint16_t len); uint16_t WK_PortRecvData(uint8_t port, void* buf, uint16_t len); void WK_PortInit(uint8_t port, uint32_t fosc, uint32_t baudrate); void WK_IRQHandler(void); void WK_Rst(void); uint8_t Wk2xxx_Test(void); /* 切换子串口回调函数 */ // int wk2114_sub_uart_chenge_recv_fun(struct wk2114_sub_uart *sub_uart,void *recv_class,wk2114_sub_uart_recv_fun recv_fun); #endif /* _WK2XXX_H_ */ // // #include "sys.h" // #include "myuart.h" // #include "main.h" // static uint8_t init_buf=0x55; // //如下为WK系列串口扩展芯片的寄存器地址定义,不同的芯片,可能寄存器少一些,所以具体的寄存器请看数据手册 // //wkxxxx Global rigister address defines // #define WK2XXX_GENA 0X00 // #define WK2XXX_GRST 0X01 // #define WK2XXX_GMUT 0X02 // #define WK2XXX_GIER 0X10 // #define WK2XXX_GIFR 0X11 // #define WK2XXX_GPDIR 0X21 // #define WK2XXX_GPDAT 0X31 // #define WK2XXX_GPORT 1// /wkxxxx Global rigister of PORT // //wkxxxx slave uarts rigister address defines // #define WK2XXX_SPAGE 0X03 // //PAGE0 // #define WK2XXX_SCR 0X04 // #define WK2XXX_LCR 0X05 // #define WK2XXX_FCR 0X06 // #define WK2XXX_SIER 0X07 // #define WK2XXX_SIFR 0X08 // #define WK2XXX_TFCNT 0X09 // #define WK2XXX_RFCNT 0X0A // #define WK2XXX_FSR 0X0B // #define WK2XXX_LSR 0X0C // #define WK2XXX_FDAT 0X0D // #define WK2XXX_FWCR 0X0E // #define WK2XXX_RS485 0X0F // //PAGE1 // #define WK2XXX_BAUD1 0X04 // #define WK2XXX_BAUD0 0X05 // #define WK2XXX_PRES 0X06 // #define WK2XXX_RFTL 0X07 // #define WK2XXX_TFTL 0X08 // #define WK2XXX_FWTH 0X09 // #define WK2XXX_FWTL 0X0A // #define WK2XXX_XON1 0X0B // #define WK2XXX_XOFF1 0X0C // #define WK2XXX_SADR 0X0D // #define WK2XXX_SAEN 0X0E // #define WK2XXX_RRSDLY 0X0F // //WK串口扩展芯片的寄存器的位定义 // //wkxxx register bit defines // // GENA // #define WK2XXX_UT4EN 0x08 // #define WK2XXX_UT3EN 0x04 // #define WK2XXX_UT2EN 0x02 // #define WK2XXX_UT1EN 0x01 // //GRST // #define WK2XXX_UT4SLEEP 0x80 // #define WK2XXX_UT3SLEEP 0x40 // #define WK2XXX_UT2SLEEP 0x20 // #define WK2XXX_UT1SLEEP 0x10 // #define WK2XXX_UT4RST 0x08 // #define WK2XXX_UT3RST 0x04 // #define WK2XXX_UT2RST 0x02 // #define WK2XXX_UT1RST 0x01 // //GIER // #define WK2XXX_UT4IE 0x08 // #define WK2XXX_UT3IE 0x04 // #define WK2XXX_UT2IE 0x02 // #define WK2XXX_UT1IE 0x01 // //GIFR // #define WK2XXX_UT4INT 0x08 // #define WK2XXX_UT3INT 0x04 // #define WK2XXX_UT2INT 0x02 // #define WK2XXX_UT1INT 0x01 // //SPAGE // #define WK2XXX_SPAGE0 0x00 // #define WK2XXX_SPAGE1 0x01 // //SCR // #define WK2XXX_SLEEPEN 0x04 // #define WK2XXX_TXEN 0x02 // #define WK2XXX_RXEN 0x01 // //LCR // #define WK2XXX_BREAK 0x20 // #define WK2XXX_IREN 0x10 // #define WK2XXX_PAEN 0x08 // #define WK2XXX_PAM1 0x04 // #define WK2XXX_PAM0 0x02 // #define WK2XXX_STPL 0x01 // //FCR // //SIER // #define WK2XXX_FERR_IEN 0x80 // #define WK2XXX_CTS_IEN 0x40 // #define WK2XXX_RTS_IEN 0x20 // #define WK2XXX_XOFF_IEN 0x10 // #define WK2XXX_TFEMPTY_IEN 0x08 // #define WK2XXX_TFTRIG_IEN 0x04 // #define WK2XXX_RXOVT_IEN 0x02 // #define WK2XXX_RFTRIG_IEN 0x01 // //SIFR // #define WK2XXX_FERR_INT 0x80 // #define WK2XXX_CTS_INT 0x40 // #define WK2XXX_RTS_INT 0x20 // #define WK2XXX_XOFF_INT 0x10 // #define WK2XXX_TFEMPTY_INT 0x08 // #define WK2XXX_TFTRIG_INT 0x04 // #define WK2XXX_RXOVT_INT 0x02 // #define WK2XXX_RFTRIG_INT 0x01 // //TFCNT // //RFCNT // //FSR // #define WK2XXX_RFOE 0x80 // #define WK2XXX_RFBI 0x40 // #define WK2XXX_RFFE 0x20 // #define WK2XXX_RFPE 0x10 // #define WK2XXX_RDAT 0x08 // #define WK2XXX_TDAT 0x04 // #define WK2XXX_TFULL 0x02 // #define WK2XXX_TBUSY 0x01 // //LSR // #define WK2XXX_OE 0x08 // #define WK2XXX_BI 0x04 // #define WK2XXX_FE 0x02 // #define WK2XXX_PE 0x01 // //FWCR // //RS485 // //常用波特率宏定义 // #define B600 1 // #define B1200 2 // #define B2400 3 // #define B4800 4 // #define B9600 5 // #define B19200 6 // #define B38400 7 // #define B76800 8 // #define B1800 9 // #define B3600 10 // #define B7200 11 // #define B14400 12 // #define B28800 13 // #define B57600 14 // #define B115200 15 // #define B230400 16 // // typedef int (*wk2xxx_send_fun)(void *send_obj,char *buf,uint32_t size); // typedef void (*wk2xxx_sub_uart_recv_fun)( void *recv_obj, uint8_t *buf, uint32_t size ); //< 子串口接收数据回调函数 // typedef int (*wk2xxx_send_fun)( void *send_obj, uint8_t *buf, uint32_t size ); //< wk2114发送函数 // /* 发送数据的buf size*/ // struct wk2114_send_record // { // uint32_t size; // uint8_t *p_data; // }; // /*子串口*/ // struct wk2114_sub_uart // { // uint8_t flag; //< 标志位 // uint8_t cmd; //< 上一次的子串口寄存器读命令 // uint8_t reg; //< 上一次接收到的子串口寄存器 // uint8_t uart_index; //< 串口地址 // void *recv_obj; //< 接收回调函数的第一个参数 // wk2xxx_sub_uart_recv_fun recv_fun; //< 接收回调函数 // uint8_t *recv_buf; //< 接收缓冲区 // uint8_t *send_buf; //< 当前发送数据指针 // uint32_t recv_buf_p; //< 接收缓冲区计数 // uint32_t recv_buf_size; //< 接收缓冲区大小 // uint32_t send_buf_p; //< 发送缓冲区计数 // struct wk2114_send_record send_record[8]; //< 发送记录 // WK2xxx_TypeDef *wk2114; //< wk2114结构指针 // }; // /*主串口 主spi*/ // typedef struct // { // // UART_HandleTypeDef *huart; // uint8_t flag; //< 标志位 // uint8_t cmd; //< 上一次的全局寄存器读命令 // uint8_t reg; //< 上一次接收到的全局寄存器 // uint32_t dev_clock_hz; //< wk2114时钟源频率 // uint8_t cmd_buf[64][2]; //< 命令队列缓冲区 // uint8_t send_buf[18]; //< 发送缓冲区 // void *send_obj; //< 主spi // wk2xxx_send_fun send; // EXTI_HandleTypeDef *exti; // uint8_t trans_mode; /* 0 :polling, 1: IT 2: DMA*/ // struct wk2114_sub_uart *sub_uart[4]; //< 子串口 // }WK2xxx_TypeDef; // WK2xxx_TypeDef* WK2XXX_Init( void ); // void WK2xxx_EXTI_callback( WK2xxx_TypeDef *wk2xxx ); // void Wk2xxxWriteReg( unsigned char port, unsigned char reg, unsigned char dat ); // unsigned char Wk2xxxReadReg( unsigned char port, unsigned char reg ); // void Wk2xxxWriteFifo( unsigned char port,unsigned char *wbuf,unsigned int len ); // void Wk2xxxReadFifo( unsigned char port,unsigned char *rbuf,unsigned int len ); // void Wk2xxxInit( unsigned char port ); // void Wk2xxxClose( unsigned char port ); // void Wk2xxxSetBaud( unsigned char port, int baud ); // unsigned int Wk2xxxGetBuf( unsigned char port,unsigned char *getbuf ); // unsigned int Wk2xxxSendBuf( unsigned char port,unsigned char *sendbuf,unsigned int len ); // extern void WK2XXX_SPI_Init(void); // extern void WK2XXX_Reset_Init(void); // extern void WK2XXX_RST_Init(void);