一、概述
本文介紹了如何使用i.MX RT系列芯片上的FlexIO實現XY2-100激光振鏡控制協議。FlexIO模塊是NXP Kinetis和i.MX RT系列MCU的片上外設。
FlexIO是一個高度可配置模塊,能夠模擬多種常見的通信協議:UART、I2C、SPI、I2S、SSI等,還可以使用FlexIO模擬實現XY2-100振鏡控制協議。
二、XY2-100振鏡協議簡介
XY2-100是數字化激光掃描振鏡的通信接口協議,被廣泛地使用在大多振鏡激光掃描控制系統。在振鏡的運動控制中XY2-100是數字化激光掃描振鏡的接口定義及通信協議。
XY2-100協議包括四路信號:
SECLOCK(時鐘信號)
SYNC(同步信號)
CHANNELX(X 通道數據)
CHANNELY(Y 通道數據)
這四路信號是一種同步串行傳輸的過程,數據時序圖如下所示。
其中時鐘信號CLOCK為2MHz,其上升沿時位置數據被寫入,下降沿時位置數據被振鏡采樣。SYNC信號用于提供數據轉換的同步信息,當它從低電平到高電平時第一位數據被發送,從高電平到低電平時最后一位校驗位被發送;CHANNELX/Y是數據信號,它有20位組成,其中C2、C1、C0是振鏡運動方向值,默認值為001,D15—D0是16位的二進制數,用來控制振鏡偏轉的角度大小;最后一個bit(P)是偶校驗位。 XY2-100協議的時鐘速率高達2MHz。如果使用普通MCU的GPIO以4MHz的頻率中斷響應模擬實現協議,系統消耗資源過大,難以保證協議的實時性,影響激光振鏡的控制效果。現有系統大部分采用CPLD/FPGA實現XY2-100協議,存在造價高,系統復雜的缺點。 使用NXPi.MX RT10xx系列MCU上的FlexIO模塊,可以方便實現XY2-100協議,并保證系統的實時性。
三、利用FlexIO模擬XY2-100
本節主要介紹如何使用FlexIO模擬XY2-100的主機協議,將會詳細闡述FlexIO模塊的相關配置項。
由于XY2-100數據格式與SPI接口類似,所以在FlexIO的配置上,XY2-100部分與模擬SPI相似。
可使用兩個FlexIO定時器、兩個Shifter移位器和四個引腳(FlexIO D5~D8)實現XY2-100協議接口。
FlexIO Timer0用于產生2MHz CLOCK時鐘信號,Timer1用于產生19位的SYNC同步信號。Shifter0連接到CHANNEL_X引腳,Shifter1連接到CHANNEL_Y引腳,并在CLOCK的每個上升沿發送數據。用戶軟件實現中允許在中斷、輪詢和DMA模式下發送振鏡坐標數據。
下圖顯示了FlexIO模擬XY2-100接口的內部連接關系。
Timer0配置為雙8位計數器,在觸發事件高電平時被使能,在比較事件到來時禁用。Timer0的觸發源連接到內部Shifter0和Shifter1,作為這二個移位器的觸發時鐘源。Timer0的計數遞減源配置為FlexIO Clock時鐘,Shifter0和Shifter1移位時鐘則由來自Timer0的每一次計時輸出。Timer0 需要被配置為能夠被Shifter0的狀態標志位觸發,當Shifter0寫入數據則使能Timer0開始工作。
在XY2-100協議中,由于傳輸頻率為2MHz,因此Timer0的Compare比較寄存器的值經計算得到需配置為0x2702。
Timer1被配置為16位計數器模式,由Timer0觸發。Timer1的計數遞減源設置為觸發信號的兩個邊沿。由于XY2-100的同步信號為19位高電平,1位低電平,所以Timer1的Compare比較寄存器的值需配置為19 * 2。
Shifter0配置為Transmit模式,并在移位器時鐘的上升沿移位,使能移位器起始位并將其設置為邏輯低電平。通過FlexIO寄存器SHIFTBUFBIS[0]寫入CHANNEL_X的數據。
Shifter1配置為Transmit模式,并在移位器時鐘的上升沿移位,使能移位器起始位并將其設置為邏輯低電平。通過FlexIO寄存器SHIFTBUFBIS[1]寫入CHANNEL_Y的數據。
下面給出了在MIMXRT1050-EVK上實現XY2-100協議接口詳細的寄存器配置:
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協議實際測試運行
參照上面FlexIO的配置,以MIMXRT1050-EVK板為例進行實際運行測試。將四個XY2-100信號引腳連接到邏輯分析儀,運行代碼后抓取i.MX RT1050的通信數據,其波形如下圖所示。CHANNELX/Y數據與圖中的波形匹配,達到FlexIO模擬XY2-100的效果。
小結
以上介紹了如何在i.MX RT1050使用FlexIO模塊來模擬XY2-100振鏡通信協議接口。通過FlexIO的硬件Timer定時器和Shifter移位寄存器可以大大減輕CPU內核的負荷,滿足協議的實時性要求。 除了本文給出的Timer和Shifter的配置外,用戶也可以利用其它FlexIO配置模擬XY2-100協議接口,這個方法不是唯一的。
-
通信協議
+關注
關注
28文章
896瀏覽量
40334 -
寄存器
+關注
關注
31文章
5357瀏覽量
120664 -
cpu
+關注
關注
68文章
10879瀏覽量
212194 -
接口
+關注
關注
33文章
8645瀏覽量
151398
發布評論請先 登錄
相關推薦
評論