一、概述
本文介紹了如何使用i.MX RT系列芯片上的FlexIO實現(xiàn)XY2-100激光振鏡控制協(xié)議。FlexIO模塊是NXP Kinetis和i.MX RT系列MCU的片上外設(shè)。
FlexIO是一個高度可配置模塊,能夠模擬多種常見的通信協(xié)議:UART、I2C、SPI、I2S、SSI等,還可以使用FlexIO模擬實現(xiàn)XY2-100振鏡控制協(xié)議。
二、XY2-100振鏡協(xié)議簡介
XY2-100是數(shù)字化激光掃描振鏡的通信接口協(xié)議,被廣泛地使用在大多振鏡激光掃描控制系統(tǒng)。在振鏡的運動控制中XY2-100是數(shù)字化激光掃描振鏡的接口定義及通信協(xié)議。
XY2-100協(xié)議包括四路信號:
SECLOCK(時鐘信號)
SYNC(同步信號)
CHANNELX(X 通道數(shù)據(jù))
CHANNELY(Y 通道數(shù)據(jù))
這四路信號是一種同步串行傳輸?shù)倪^程,數(shù)據(jù)時序圖如下所示。
其中時鐘信號CLOCK為2MHz,其上升沿時位置數(shù)據(jù)被寫入,下降沿時位置數(shù)據(jù)被振鏡采樣。SYNC信號用于提供數(shù)據(jù)轉(zhuǎn)換的同步信息,當(dāng)它從低電平到高電平時第一位數(shù)據(jù)被發(fā)送,從高電平到低電平時最后一位校驗位被發(fā)送;CHANNELX/Y是數(shù)據(jù)信號,它有20位組成,其中C2、C1、C0是振鏡運動方向值,默認(rèn)值為001,D15—D0是16位的二進制數(shù),用來控制振鏡偏轉(zhuǎn)的角度大小;最后一個bit(P)是偶校驗位。 XY2-100協(xié)議的時鐘速率高達2MHz。如果使用普通MCU的GPIO以4MHz的頻率中斷響應(yīng)模擬實現(xiàn)協(xié)議,系統(tǒng)消耗資源過大,難以保證協(xié)議的實時性,影響激光振鏡的控制效果?,F(xiàn)有系統(tǒng)大部分采用CPLD/FPGA實現(xiàn)XY2-100協(xié)議,存在造價高,系統(tǒng)復(fù)雜的缺點。 使用NXPi.MX RT10xx系列MCU上的FlexIO模塊,可以方便實現(xiàn)XY2-100協(xié)議,并保證系統(tǒng)的實時性。
三、利用FlexIO模擬XY2-100
本節(jié)主要介紹如何使用FlexIO模擬XY2-100的主機協(xié)議,將會詳細闡述FlexIO模塊的相關(guān)配置項。
由于XY2-100數(shù)據(jù)格式與SPI接口類似,所以在FlexIO的配置上,XY2-100部分與模擬SPI相似。
可使用兩個FlexIO定時器、兩個Shifter移位器和四個引腳(FlexIO D5~D8)實現(xiàn)XY2-100協(xié)議接口。
FlexIO Timer0用于產(chǎn)生2MHz CLOCK時鐘信號,Timer1用于產(chǎn)生19位的SYNC同步信號。Shifter0連接到CHANNEL_X引腳,Shifter1連接到CHANNEL_Y引腳,并在CLOCK的每個上升沿發(fā)送數(shù)據(jù)。用戶軟件實現(xiàn)中允許在中斷、輪詢和DMA模式下發(fā)送振鏡坐標(biāo)數(shù)據(jù)。
下圖顯示了FlexIO模擬XY2-100接口的內(nèi)部連接關(guān)系。
Timer0配置為雙8位計數(shù)器,在觸發(fā)事件高電平時被使能,在比較事件到來時禁用。Timer0的觸發(fā)源連接到內(nèi)部Shifter0和Shifter1,作為這二個移位器的觸發(fā)時鐘源。Timer0的計數(shù)遞減源配置為FlexIO Clock時鐘,Shifter0和Shifter1移位時鐘則由來自Timer0的每一次計時輸出。Timer0 需要被配置為能夠被Shifter0的狀態(tài)標(biāo)志位觸發(fā),當(dāng)Shifter0寫入數(shù)據(jù)則使能Timer0開始工作。
在XY2-100協(xié)議中,由于傳輸頻率為2MHz,因此Timer0的Compare比較寄存器的值經(jīng)計算得到需配置為0x2702。
Timer1被配置為16位計數(shù)器模式,由Timer0觸發(fā)。Timer1的計數(shù)遞減源設(shè)置為觸發(fā)信號的兩個邊沿。由于XY2-100的同步信號為19位高電平,1位低電平,所以Timer1的Compare比較寄存器的值需配置為19 * 2。
Shifter0配置為Transmit模式,并在移位器時鐘的上升沿移位,使能移位器起始位并將其設(shè)置為邏輯低電平。通過FlexIO寄存器SHIFTBUFBIS[0]寫入CHANNEL_X的數(shù)據(jù)。
Shifter1配置為Transmit模式,并在移位器時鐘的上升沿移位,使能移位器起始位并將其設(shè)置為邏輯低電平。通過FlexIO寄存器SHIFTBUFBIS[1]寫入CHANNEL_Y的數(shù)據(jù)。
下面給出了在MIMXRT1050-EVK上實現(xiàn)XY2-100協(xié)議接口詳細的寄存器配置:
FlEXIO02.TIMCTL[0] = 0x01C30701
FlEXIO02.TIMCFG[0] = 0x00002220
FlEXIO02.TIMCMP[0] = 0x00002702
FlEXIO02.TIMCTL[1] = 0x03430603
FlEXIO02.TIMCFG[1] = 0x02102100
FlEXIO02.TIMCMP[1] = 0x00000026
FlEXIO02.SHIFTCTL[0] = 0x00030802
FlEXIO02.SHIFTCFG[0] = 0x00000030
FlEXIO02.SHIFTCTL[1] = 0x00030502
FlEXIO02.SHIFTCFG[1] = 0x00000030
四、XY2-100協(xié)議實際測試運行
參照上面FlexIO的配置,以MIMXRT1050-EVK板為例進行實際運行測試。將四個XY2-100信號引腳連接到邏輯分析儀,運行代碼后抓取i.MX RT1050的通信數(shù)據(jù),其波形如下圖所示。CHANNELX/Y數(shù)據(jù)與圖中的波形匹配,達到FlexIO模擬XY2-100的效果。
小結(jié)
以上介紹了如何在i.MX RT1050使用FlexIO模塊來模擬XY2-100振鏡通信協(xié)議接口。通過FlexIO的硬件Timer定時器和Shifter移位寄存器可以大大減輕CPU內(nèi)核的負荷,滿足協(xié)議的實時性要求。 除了本文給出的Timer和Shifter的配置外,用戶也可以利用其它FlexIO配置模擬XY2-100協(xié)議接口,這個方法不是唯一的。
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1038瀏覽量
41192 -
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124582 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217160 -
接口
+關(guān)注
關(guān)注
33文章
9005瀏覽量
153781
發(fā)布評論請先 登錄
【大聯(lián)大品佳 NXP i.MX RT1050試用申請】語音識別評測
【大聯(lián)大品佳 NXP i.MX RT1050試用申請】基于 NXP i.MX RT1050工業(yè)機器人開發(fā)
【大聯(lián)大品佳 NXP i.MX RT1050試用申請】i.MX RT1050 3D打印機控制器
【大聯(lián)大品佳 NXP i.MX RT1050試用申請】使用NXP i.MX RT1050開發(fā)板設(shè)計一款低成本CAN數(shù)據(jù)采集儀
i.MX RT1050平臺的相關(guān)資料推薦
i.MX RT系列(例如 RT1050/1060)有多少個PWM通道?
【044】SylixOS 正式支持 i.MX RT1050平臺

RT-Thread & NXP 發(fā)布 i.MX RT 系列 BSP 新框架

移植Arm-2D到i.MX RT1050-EVKB并繪制圖形界面
基于 NXP i.MX RT1050 的 3D 打印機方案

評論