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)
2021-9-8 15:27 上傳
點擊文件名下載附件
|