WK2124是成都为开微生产的SPI扩4路UART的芯片,主接口SPI支持10波特率,有4个独立的子串口,每个独立的子串口都有256个字节的发送FIFO、接收FIFO,特别适合于需要多个串口主机设备。资料里有数据手册、原理图、MCU驱动、Linux下驱动等。
1.产品概述
WK2124是SPITM接口的4通道UART器件,WK2124实现SPI桥接/扩展4个增强功能串口(UART)的功能。
扩展的子通道的UART具备如下功能特点:
每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。
每个子通道可以独立设置工作在IrDA红外通信。
每个子通道具备收/发独立的256 BYTE FIFO,FIFO的中断可按用户需求进行编程触发点。
WK2124采用SSOP20绿色环保的无铅封装,可以工作在2.5~5.0V的宽工作电压范围,具备可配置自动休眠/唤醒功能。
[注]:SPITM 为MOTOLORA公司的注册商标。
2.基本特性
2.1 总体特性
低功耗设计,可以配置自动休眠,自动唤醒模式(uS 级唤醒)
超大硬件收发缓存,支持256级FIFO
宽工作电压设计,工作电压为2.5V~5.0V
精简的配置寄存器和控制字,操作简单可靠
提供工业级
高速CMOS工艺,子串口速率最高可达2Mbps@5V、1.5Mbps@3.3V、1Mbps@2.5V
采用符合绿色环保政策的SSOP20无铅封装
2.2 扩展子通道UART特性
子通道串口独立配置,高速、灵活:
每个子串口为全双工,每个子串口可以通过软件开启/关闭
波特率可以独立设置,子串口最高可以达到2Mbit/s
每个子串口字符格式包括数据长度、停止位数、奇偶校验模式可以独立设置
完善的子串口状态查询功能
可以实现对单个子串口软件复位
FIFO功能:
每个子串口具备独立的256级发送FIFO,发送FIFO触发点可按用户需求进行编程
每个子串口具备独立的256接收FIFO,接收FIFO触发点可按用户需求进行编程
软件FIFO使能和清空
FIFO状态和计数器输出
错误检测:
支持奇偶校验错,数据帧错误、溢出错误及Line-Break错误检测
支持起始位错误检测
中断特点:
具备子串口接收FIFO超时中断
支持Line-Break错误中断
内置符合SIR标准的IrDA红外收发编解码器,传输速度可达115.2K bit/s
2.3 SPI主接口特性
最高速度10M bit/s
仅支持SPI从模式
SPI模式0
支持最长256字节连续收发
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "wk2xxx.h"
- #include "wk2xxx_test.h"
- #include "spi.h"
- #include "exti.h"
- /*
- 目前stm32和WK2XXX 硬件连接关系
- 复位RST:PB8
- cs:PA4
- clk:PA5
- mosi:PA7
- miso:PA6
- */
- void EXTI1_IRQHandler(void)
- {
- u8 gifr,rxbuf[256];
- int rxlen;
- printf("IN EXTI2_IRQ!!!!\n");
- /*关闭LED灯*/
- LED1(LED_OFF);
- LED2(LED_OFF);
- LED3(LED_OFF);
- LED4(LED_OFF);
- if(EXTI_GetFlagStatus(EXTI_Line1)!= RESET)
- { EXTI_ClearITPendingBit(EXTI_Line1); //清除LINE1上的中断标志位
- gifr=WkReadGReg(WK2XXX_GIFR);/**/
- do{
- if(gifr&WK2XXX_UT1INT)//判断子串口1是否有中断
- { /*数据处理*/
- /*数据接收*/
- rxlen=wk_RxChars(1,rxbuf);//一次接收的数据不会超过256Byte
- /*数据发送*/
- //把接收的数据发送出去
- wk_TxChars(1,rxlen,rxbuf);
- }
-
- if(gifr&WK2XXX_UT2INT)//判断子串口2是否有中断
- {
- /*数据接收*/
- rxlen=wk_RxChars(2,rxbuf);//一次接收的数据不会超过256Byte
- /*数据发送*/
- //把接收的数据发送出去
- wk_TxChars(2,rxlen,rxbuf);
-
- }
- if(gifr&WK2XXX_UT3INT)//判断子串口3是否有中断
- {
- /*数据接收*/
- rxlen=wk_RxChars(3,rxbuf);//一次接收的数据不会超过256Byte
- /*数据发送*/
- //把接收的数据发送出去
- wk_TxChars(3,rxlen,rxbuf);
- // printf("port!!!!\n");
- }
- if(gifr&WK2XXX_UT4INT)//判断子串口4是否有中断
- {
- /*数据接收*/
- rxlen=wk_RxChars(4,rxbuf);//一次接收的数据不会超过256Byte
- /*数据发送*/
- //把接收的数据发送出去
- //wk_TxChars(4,rxlen,rxbuf);
- }
-
- gifr=WkReadGReg(WK2XXX_GIFR);
- //printf("IN EXTI2_IRQ GIFR:0X%X !!!\n",gifr);
- }while(gifr&0x0f);
- printf("IN EXTI2_IRQ over! !!!\n");
- }
- }
- int main(void)
- {
-
- //wk2xxx相关定义
- unsigned char dat1,sendbuf[256]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x12};
- int len,scr;
- LED_Init();
- delay_init(); //延时函数初始化
- NVIC_Configuration();// 设置中断优先级分组
- uart_init(115200); //串口初始化为115200
- WK_SPI_Init();//初始化SPI总线
- /*读写GNEA,测试主接口通信是否成功*/
- dat1=WkReadGReg(WK2XXX_GENA);
- printf("gena=0x%x.\n",dat1);
- /*硬件复位芯片*/
- WK_RstInit();
- /*初始化子串口*/
- Wk_Init(1);
- Wk_Init(2);
- Wk_Init(3);
- Wk_Init(4);
- /*设置子串口波特率*/
- Wk_SetBaud(1,115200);
- Wk_SetBaud(2,115200);
- Wk_SetBaud(3,115200);
- Wk_SetBaud(4,115200);
- /*使能485*/
- //WK_RS485(1);
- //WK_RS485(2);
- //WK_RS485(3);
- //WK_RS485(4);
- EXTIX_Init();//初始化CPU外部中断
- while(1)
- { /*打开LED*/
- LED1(LED_ON);
- LED2(LED_ON);
- LED3(LED_ON);
- LED4(LED_ON);
- delay_ms(10);
- Exti_Disable();/*关闭外部中断响应*/
- /*中断屏蔽区,这样可以防止中断响应打乱spi的操作时序*/
- /*通常在中断函数外部操作读写寄存器的时候,最好关断中断响应,但是这个时间也不要过长,过长导致子串口溢出,从而导致数据丢失*/
- /*如果对于大数据需要发送,一次操作不要超过256,最好不要让程序阻塞在发送中*/
- //len=wk_TxLen(4);/*判断子串口4能写入数据的个数*/
- //wk_TxChars(4,len,sendbuf);/*写入len个数据进入发送fifo*/
- WkWriteSFifo(4,sendbuf,10);
- Exti_Enable();/*开启外部中断响应*/
- }
- }
复制代码
所有资料51hei附件下载:
WK2124 Resources V1.1.7z
(3.76 MB, 下载次数: 47)
|