一、概述
本文介紹了如何使用i.MX RT系列芯片上的FlexIO實(shí)現(xiàn)XY2-100激光振鏡控制協(xié)議。FlexIO模塊是NXP Kinetis和i.MX RT系列MCU的片上外設(shè)。
FlexIO是一個(gè)高度可配置模塊,能夠模擬多種常見(jiàn)的通信協(xié)議:UART、I2C、SPI、I2S、SSI等,還可以使用FlexIO模擬實(shí)現(xiàn)XY2-100振鏡控制協(xié)議。
二、XY2-100振鏡協(xié)議簡(jiǎn)介
XY2-100是數(shù)字化激光掃描振鏡的通信接口協(xié)議,被廣泛地使用在大多振鏡激光掃描控制系統(tǒng)。在振鏡的運(yùn)動(dòng)控制中XY2-100是數(shù)字化激光掃描振鏡的接口定義及通信協(xié)議。
XY2-100協(xié)議包括四路信號(hào):
SECLOCK(時(shí)鐘信號(hào))
SYNC(同步信號(hào))
CHANNELX(X 通道數(shù)據(jù))
CHANNELY(Y 通道數(shù)據(jù))
這四路信號(hào)是一種同步串行傳輸?shù)倪^(guò)程,數(shù)據(jù)時(shí)序圖如下所示。
其中時(shí)鐘信號(hào)CLOCK為2MHz,其上升沿時(shí)位置數(shù)據(jù)被寫入,下降沿時(shí)位置數(shù)據(jù)被振鏡采樣。SYNC信號(hào)用于提供數(shù)據(jù)轉(zhuǎn)換的同步信息,當(dāng)它從低電平到高電平時(shí)第一位數(shù)據(jù)被發(fā)送,從高電平到低電平時(shí)最后一位校驗(yàn)位被發(fā)送;CHANNELX/Y是數(shù)據(jù)信號(hào),它有20位組成,其中C2、C1、C0是振鏡運(yùn)動(dòng)方向值,默認(rèn)值為001,D15—D0是16位的二進(jìn)制數(shù),用來(lái)控制振鏡偏轉(zhuǎn)的角度大??;最后一個(gè)bit(P)是偶校驗(yàn)位。 XY2-100協(xié)議的時(shí)鐘速率高達(dá)2MHz。如果使用普通MCU的GPIO以4MHz的頻率中斷響應(yīng)模擬實(shí)現(xiàn)協(xié)議,系統(tǒng)消耗資源過(guò)大,難以保證協(xié)議的實(shí)時(shí)性,影響激光振鏡的控制效果?,F(xiàn)有系統(tǒng)大部分采用CPLD/FPGA實(shí)現(xiàn)XY2-100協(xié)議,存在造價(jià)高,系統(tǒng)復(fù)雜的缺點(diǎn)。 使用NXPi.MX RT10xx系列MCU上的FlexIO模塊,可以方便實(shí)現(xiàn)XY2-100協(xié)議,并保證系統(tǒng)的實(shí)時(shí)性。
三、利用FlexIO模擬XY2-100
本節(jié)主要介紹如何使用FlexIO模擬XY2-100的主機(jī)協(xié)議,將會(huì)詳細(xì)闡述FlexIO模塊的相關(guān)配置項(xiàng)。
由于XY2-100數(shù)據(jù)格式與SPI接口類似,所以在FlexIO的配置上,XY2-100部分與模擬SPI相似。
可使用兩個(gè)FlexIO定時(shí)器、兩個(gè)Shifter移位器和四個(gè)引腳(FlexIO D5~D8)實(shí)現(xiàn)XY2-100協(xié)議接口。
FlexIO Timer0用于產(chǎn)生2MHz CLOCK時(shí)鐘信號(hào),Timer1用于產(chǎn)生19位的SYNC同步信號(hào)。Shifter0連接到CHANNEL_X引腳,Shifter1連接到CHANNEL_Y引腳,并在CLOCK的每個(gè)上升沿發(fā)送數(shù)據(jù)。用戶軟件實(shí)現(xiàn)中允許在中斷、輪詢和DMA模式下發(fā)送振鏡坐標(biāo)數(shù)據(jù)。
下圖顯示了FlexIO模擬XY2-100接口的內(nèi)部連接關(guān)系。
Timer0配置為雙8位計(jì)數(shù)器,在觸發(fā)事件高電平時(shí)被使能,在比較事件到來(lái)時(shí)禁用。Timer0的觸發(fā)源連接到內(nèi)部Shifter0和Shifter1,作為這二個(gè)移位器的觸發(fā)時(shí)鐘源。Timer0的計(jì)數(shù)遞減源配置為FlexIO Clock時(shí)鐘,Shifter0和Shifter1移位時(shí)鐘則由來(lái)自Timer0的每一次計(jì)時(shí)輸出。Timer0 需要被配置為能夠被Shifter0的狀態(tài)標(biāo)志位觸發(fā),當(dāng)Shifter0寫入數(shù)據(jù)則使能Timer0開(kāi)始工作。
在XY2-100協(xié)議中,由于傳輸頻率為2MHz,因此Timer0的Compare比較寄存器的值經(jīng)計(jì)算得到需配置為0x2702。
Timer1被配置為16位計(jì)數(shù)器模式,由Timer0觸發(fā)。Timer1的計(jì)數(shù)遞減源設(shè)置為觸發(fā)信號(hào)的兩個(gè)邊沿。由于XY2-100的同步信號(hào)為19位高電平,1位低電平,所以Timer1的Compare比較寄存器的值需配置為19 * 2。
Shifter0配置為Transmit模式,并在移位器時(shí)鐘的上升沿移位,使能移位器起始位并將其設(shè)置為邏輯低電平。通過(guò)FlexIO寄存器SHIFTBUFBIS[0]寫入CHANNEL_X的數(shù)據(jù)。
Shifter1配置為Transmit模式,并在移位器時(shí)鐘的上升沿移位,使能移位器起始位并將其設(shè)置為邏輯低電平。通過(guò)FlexIO寄存器SHIFTBUFBIS[1]寫入CHANNEL_Y的數(shù)據(jù)。
下面給出了在MIMXRT1050-EVK上實(shí)現(xiàn)XY2-100協(xié)議接口詳細(xì)的寄存器配置:
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é)議實(shí)際測(cè)試運(yùn)行
參照上面FlexIO的配置,以MIMXRT1050-EVK板為例進(jìn)行實(shí)際運(yùn)行測(cè)試。將四個(gè)XY2-100信號(hào)引腳連接到邏輯分析儀,運(yùn)行代碼后抓取i.MX RT1050的通信數(shù)據(jù),其波形如下圖所示。CHANNELX/Y數(shù)據(jù)與圖中的波形匹配,達(dá)到FlexIO模擬XY2-100的效果。
小結(jié)
以上介紹了如何在i.MX RT1050使用FlexIO模塊來(lái)模擬XY2-100振鏡通信協(xié)議接口。通過(guò)FlexIO的硬件Timer定時(shí)器和Shifter移位寄存器可以大大減輕CPU內(nèi)核的負(fù)荷,滿足協(xié)議的實(shí)時(shí)性要求。 除了本文給出的Timer和Shifter的配置外,用戶也可以利用其它FlexIO配置模擬XY2-100協(xié)議接口,這個(gè)方法不是唯一的。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
16785瀏覽量
349316 -
通信接口
+關(guān)注
關(guān)注
3文章
234瀏覽量
30943 -
控制協(xié)議
+關(guān)注
關(guān)注
0文章
9瀏覽量
6928 -
振鏡
+關(guān)注
關(guān)注
3文章
20瀏覽量
15073 -
時(shí)鐘信號(hào)
+關(guān)注
關(guān)注
4文章
440瀏覽量
28465
原文標(biāo)題:在i.MX RT10xx 使用FlexIO實(shí)現(xiàn)XY2-100振鏡控制協(xié)議
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論