本發(fā)明屬于通訊技術(shù)領(lǐng)域,尤其涉及一種UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)系統(tǒng)。
背景技術(shù):
所謂的異步通信就是指通信雙方并不需要時(shí)鐘信號(hào)進(jìn)行同步,而是按照約定好的波特率將數(shù)據(jù)一位一位進(jìn)行傳輸,其中包括起始位(傳輸數(shù)據(jù)的開始標(biāo)志)、數(shù)據(jù)位、校驗(yàn)位(檢驗(yàn)數(shù)據(jù)傳輸?shù)恼_與否)和終止位(數(shù)據(jù)傳輸結(jié)束的標(biāo)志)。但是當(dāng)接收系統(tǒng)的數(shù)據(jù)幀速率與異步串行數(shù)據(jù)幀速率相同時(shí),為了準(zhǔn)確有效的接收串行異步發(fā)送的數(shù)據(jù)幀數(shù)據(jù),就必須進(jìn)行合理的處理。
綜上所述,現(xiàn)有技術(shù)存在的問題是:
由于接收轉(zhuǎn)發(fā)的數(shù)據(jù)幀速率與發(fā)送方的數(shù)據(jù)幀速率相同,直接采用現(xiàn)有的UART協(xié)議無法保證數(shù)據(jù)的正確接收轉(zhuǎn)發(fā),因此必須進(jìn)行處理。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)存在的問題,本發(fā)明提供了一種UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)系統(tǒng)。
本發(fā)明是這樣實(shí)現(xiàn)的,一種UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)系統(tǒng),包括:UART模塊、乒乓式接收控制模塊Read_UART_to_RAM、存儲(chǔ)控制模塊MUX_cmd_RAM12_signals、RAM1模塊、RAM2模塊、選擇控制模塊generate_flag_sel和2選1模塊MUX_cmd_to_RS422_frame;
所述UART模塊與乒乓式接收控制模塊Read_UART_to_RAM連接,用于異步、串行數(shù)據(jù)Rx通過UART接口模塊后,按照UART數(shù)據(jù)傳輸格式輸出8位數(shù)據(jù)位并且產(chǎn)生一個(gè)接收準(zhǔn)備控制信號(hào)rxrdy;
所述乒乓式接收控制模塊Read_UART_to_RAM與存儲(chǔ)控制模塊MUX_cmd_RAM12_signals連接,用于對50Hz的時(shí)鐘頻率進(jìn)行降頻處理,分別處理為兩個(gè)25Hz的時(shí)鐘頻率Data_end1和Data_end2;還用于產(chǎn)生RAM的時(shí)鐘和地址,所述RAM的時(shí)鐘和地址包括WRAM_CLK1、WRAM_CLK2和WRAM_A[5..0];還用于將接收到的UART模塊傳輸?shù)臄?shù)據(jù)合并成16位RAM_DATA[15..0];
所述存儲(chǔ)控制模塊MUX_cmd_RAM12_signals分別與RAM1模塊、RAM2模塊連接,用于接收乒乓式接收控制模塊Read_UART_to_RAM產(chǎn)生的信號(hào)WRAM_CLK1、WRAM_CLK2、WRAM_A[15..0]、Data_end1、Data_end2和外部輸入的讀RAM地址rd_ram_add;經(jīng)過處理后,產(chǎn)生的cmd_clk1、cmd1_add[4..0]輸出控制RAM1的時(shí)鐘和地址,同時(shí)產(chǎn)生的cmd_clk2、cmd2_add[4..0]輸出控制RAM2的時(shí)鐘和地址;
所述RAM1模塊與2選1模塊MUX_cmd_to_RS422_frame連接,用于接收存儲(chǔ)控制模塊MUX_cmd_RAM12_signals的cmd_clk1時(shí)鐘信號(hào)、cmd1_add[4..0]地址信號(hào),經(jīng)處理后,輸出寫入RAM的數(shù)據(jù)cmd_ram1_data[15..0];
所述RAM2模塊與2選1模塊MUX_cmd_to_RS422_frame連接,用于接收存儲(chǔ)控制模塊MUX_cmd_RAM12_signals的cmd2_clk2寫時(shí)鐘信號(hào)、cmd2_add[4..0]寫地址信號(hào),經(jīng)處理后,輸出寫入RAM的數(shù)據(jù)cmd_ram2_data[15..0];
所述選擇控制模塊generate_flag_sel與2選1模塊MUX_cmd_to_RS422_frame連接,用于接收存儲(chǔ)控制模塊MUX_cmd_RAM12_signals產(chǎn)生的Data_end1、Data_end2信號(hào)和外部采集控制輸入信號(hào)adc_end,產(chǎn)生輸出選擇控制信號(hào)flag_sel信號(hào);
所述2選1模塊MUX_cmd_to_RS422_frame與選擇控制模塊generate_flag_sel連接,用于接收RAM1模塊輸出的cmd_ram1_data[15..0]、RAM2模塊輸出的cmd_ram2_data[15..0]和選擇控制模塊flag_sel輸出的flag_sel信號(hào),最終輸出sdata[15..0]信號(hào)。
進(jìn)一步,在UART模塊輸出的8位數(shù)據(jù)位分別包括起始位、5位數(shù)據(jù)位、校驗(yàn)位和停止位。
進(jìn)一步,RAM1模塊輸入端還接收乒乓式接收控制模塊Read_UART_to_RAM產(chǎn)生的Data_end1和產(chǎn)生的16位要寫入RAM1的數(shù)據(jù)RAM_DATA[15..0];RAM2模塊輸入端還接收乒乓式接收控制模塊Read_UART_to_RAM產(chǎn)生的Data_end2和產(chǎn)生的16位要寫入RAM2的數(shù)據(jù)RAM_DATA[15..0]。
進(jìn)一步,選擇控制模塊generate_flag_sel產(chǎn)生選擇信號(hào)flag_sel對2選1模塊MUX_cmd_to_RS422_frame的數(shù)據(jù)進(jìn)行選擇輸出;具體選擇如下:當(dāng)flag_sel為低時(shí),將RAM1的數(shù)據(jù)輸出;flag_sel為高時(shí),將RAM2的數(shù)據(jù)輸出。
進(jìn)一步,乒乓式接收控制模塊Read_UART_to_RAM產(chǎn)生的使能信號(hào)Data_end1、存儲(chǔ)控制模塊MUX_cmd_RAM12_signals產(chǎn)生的地址cmd1_add[4..0]和乒乓式接收控制模塊Read_UART_to_RAM輸出的數(shù)據(jù)RAM_DATA[15..0]共同作用下進(jìn)行RAM1的讀寫操作。
進(jìn)一步,乒乓式接收控制模塊Read_UART_to_RAM產(chǎn)生的使能信號(hào)Data_end2、存儲(chǔ)控制模塊MUX_cmd_RAM12_signals產(chǎn)生的地址cmd2_add[4..0]和乒乓式接收控制模塊Read_UART_to_RAM輸出的數(shù)據(jù)RAM_DATA[15..0]共同作用下進(jìn)行RAM2的讀寫操作。
進(jìn)一步,寫使能Data_end1或Data_end2為低時(shí)寫RAM,為高時(shí)讀RAM;存儲(chǔ)控制模塊MUX_cmd_RAM12_signals產(chǎn)生的地址cmd1_add[4..0]或cmd2_add[4..0]中,當(dāng)Data_end1低時(shí)寫地址,當(dāng)Data_end1高時(shí)讀地址;當(dāng)Data_end2低時(shí)寫地址,當(dāng)Data_end2高時(shí)讀地址。
選擇控制模塊generate_flag_sel產(chǎn)生時(shí)序的方法如下:將50Hz信號(hào)進(jìn)行標(biāo)號(hào),從第1個(gè)脈沖開始持續(xù)往后開始標(biāo)號(hào),奇數(shù)序號(hào)脈沖產(chǎn)生Data_end1,而在下一個(gè)奇數(shù)序號(hào)脈沖即第3個(gè)脈沖上升沿Data_end1再變?yōu)榈?偶數(shù)序列號(hào)產(chǎn)生Data_end2;利用Data_end1和Data_end2作為RAM1和RAM2的使能信號(hào),控制RAM的讀寫操作;然后將Data_end1和Data_end2進(jìn)行與操作;然后再利用adc_end上升沿對sel信號(hào)進(jìn)行采集,就得到flag_sel。
本發(fā)明另一目的在于提供一種選擇控制模塊generate_flag_sel產(chǎn)生時(shí)序的方法,其方法如下:將50Hz的信號(hào)進(jìn)行標(biāo)號(hào),從第1個(gè)脈沖開始持續(xù)往后開始標(biāo)號(hào),奇數(shù)序號(hào)的脈沖用來產(chǎn)生Data_end1,而在下一個(gè)奇數(shù)序號(hào)脈沖即第3個(gè)脈沖的上升沿時(shí)Data_end1再變?yōu)榈?偶數(shù)序列號(hào)產(chǎn)生Data_end2;利用Data_end1和Data_end2作為RAM1和RAM2的寫使能信號(hào),控制RAM的讀寫操作;然后將Data_end1和Data_end2進(jìn)行與操作;然后再利用adc_end的上升沿對sel信號(hào)進(jìn)行采集,就得到flag_sel。
本發(fā)明的優(yōu)點(diǎn)及積極效果為:
本發(fā)明可以實(shí)現(xiàn)異步傳輸系統(tǒng)中接收幀速率與發(fā)送幀速率相同情況下的轉(zhuǎn)發(fā)通信,并且通過乒乓式操作實(shí)現(xiàn)對存儲(chǔ)器的控制,解決了接收端幀速率與異步串行數(shù)據(jù)幀速率一致時(shí)所造成的在數(shù)據(jù)幀周期內(nèi)無法有效對數(shù)據(jù)接收與存儲(chǔ)的問題;通過本系統(tǒng)可以實(shí)現(xiàn)UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)數(shù)據(jù)的100%有效接收。
附圖說明
圖1是本發(fā)明實(shí)施例提供的UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)系統(tǒng)示意圖;
圖2是本發(fā)明實(shí)施例提供的乒乓式接收控制模塊Read_UART_to_RAM示意圖;
圖3是本發(fā)明實(shí)施例提供的存儲(chǔ)控制模塊MUX_cmd_RAM12_signals示意圖;
圖4是本發(fā)明實(shí)施例提供的RAM1模塊示意圖;
圖5是本發(fā)明實(shí)施例提供的RAM2模塊示意圖;
圖6是本發(fā)明實(shí)施例提供的選擇控制模塊flag_sel示意圖;
圖7是本發(fā)明實(shí)施例提供的2選1模塊示意圖;
圖8是本發(fā)明實(shí)施例提供的選擇控制模塊flag_sel產(chǎn)生的時(shí)序圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
下面結(jié)合附圖對本發(fā)明的應(yīng)用原理作詳細(xì)描述。
如圖1所示,本發(fā)明實(shí)施例提供的UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)系統(tǒng),異步、串行數(shù)據(jù)Rx通過UART接口后,按照UART數(shù)據(jù)傳輸格式輸出8位數(shù)據(jù)位并且產(chǎn)生一個(gè)接收準(zhǔn)備控制信號(hào)rxrdy。在本系統(tǒng)中,這8位分別包括起始位、數(shù)據(jù)位(5位)、校驗(yàn)位和停止位。然后在Read_UART_to_RAM模塊中,對50Hz時(shí)鐘頻率進(jìn)行降頻處理,分別處理為兩個(gè)25Hz的時(shí)鐘頻率,即圖中所示的Data_end1、Data_end2,并且在該模塊中產(chǎn)生寫RAM的時(shí)鐘和地址即如圖2所示的WRAM_CLK1、WRAM_CLK2和WRAM_A[5..0],并且將接收到的數(shù)據(jù)合并成16位即圖2所示的RAM_DATA[15..0]。
接著再在存儲(chǔ)控制模塊MUX_cmd_RAM12_signals即圖3中分別輸出控制RAM1和RAM2的時(shí)鐘和地址,即在RAM1中如圖4所示,由存儲(chǔ)控制模塊MUX_cmd_RAM12_signals中產(chǎn)生的cmd_clk1、cmd1_add[4..0]以及在圖2中產(chǎn)生的Data_end1和RAM_DATA[15..0]分別為RAM1的時(shí)鐘、地址、使能和要寫入RAM1的數(shù)據(jù),最終輸出寫入RAM的數(shù)據(jù)cmd_ram1_data[15..0]。同理,RAM2如圖5所示也是如此,最終輸出cmd_ram2_data[15..0]。
然后利用選擇控制模塊generate_flag_sel產(chǎn)生選擇信號(hào)flag_sel,再利用選擇信號(hào)flag_sel對2選1模塊MUX_cmd_to_RS422_frame的數(shù)據(jù)進(jìn)行選擇輸出。
下面結(jié)合具體實(shí)施例對本發(fā)明的應(yīng)用原理作進(jìn)一步描述。
本發(fā)明實(shí)施例提供的UART協(xié)議同幀頻異步接收轉(zhuǎn)發(fā)系統(tǒng),異步串行數(shù)據(jù)幀經(jīng)過UART接口之后按照UART通信協(xié)議的數(shù)據(jù)傳輸格式輸出一個(gè)8位數(shù)據(jù)位并且產(chǎn)生一個(gè)接收準(zhǔn)備信號(hào)rxrdy,然后再經(jīng)過Read_UART_to_RAM模塊產(chǎn)生控制RAM1和RAM2的時(shí)鐘WRAM_CLK1、WRAM_CLK2,地址WRAM_A[15..0],使能Data_end1、Data_end2和寫入RAM1和RAM2的數(shù)據(jù)RAM_DATA[15..0]。
在圖2中產(chǎn)生的信號(hào)WRAM_CLK1、WRAM_CLK2、WRAM_A[15..0]、Data_end1、Data_end2,再加上外部輸入的讀RAM的地址rd_ram_add,經(jīng)過MUX_cmd_RAM12_signals模塊后輸出分別控制RAM1和RAM2的時(shí)鐘和地址。
在圖2中產(chǎn)生的使能信號(hào)Data_end1(為低時(shí)寫RAM,為高時(shí)讀RAM)、圖3中產(chǎn)生的地址cmd1_add[4..0](讀地址還是寫地址取決于Data_end1的高低)和RAM_DA TA[15..0]的作用下進(jìn)行RAM1的讀寫操作。
在圖2中產(chǎn)生的使能信號(hào)Data_end2(為低時(shí)寫RAM,為高時(shí)讀RAM)、圖3中產(chǎn)生的地址cmd2_add[4..0](讀地址還是寫地址取決于Data_end2的高低)和RAM_DA TA[15..0]的作用下進(jìn)行RAM2的讀寫操作。
在圖6中,以Data_end1、Data_end2和系統(tǒng)的采集控制信號(hào)adc_end作為輸入信號(hào),產(chǎn)生輸出的選擇控制信號(hào)flag_sel(具體的產(chǎn)生細(xì)節(jié)見圖8)。
利用圖6產(chǎn)生的選擇控制信號(hào)flag_sel作為圖7的2選1模塊MUX_cmd_to_RS422_frame的選擇信號(hào)。當(dāng)flag_sel為低時(shí),將RAM1的數(shù)據(jù)輸出;flag_sel為高時(shí),將RAM2的數(shù)據(jù)輸出。
如圖8所示,flag_sel產(chǎn)生時(shí)序的方法:將50Hz的信號(hào)進(jìn)行標(biāo)號(hào),從第1個(gè)脈沖開始持續(xù)往后開始標(biāo)號(hào),奇數(shù)序號(hào)的脈沖用來產(chǎn)生Data_end1,而在下一個(gè)奇數(shù)序號(hào)脈沖即第3個(gè)脈沖的上升沿時(shí)Data_end1再變?yōu)榈?偶數(shù)序列號(hào)產(chǎn)生Data_end2,原理也是如此。由于一個(gè)周期為20ms,經(jīng)過計(jì)算得到接收異步串行數(shù)據(jù)需要大約12.2ms即圖中所示的UART接收,那么也就是說只剩下不到8ms的時(shí)間對數(shù)據(jù)進(jìn)行存儲(chǔ),就可能會(huì)存在在下一周期到來時(shí)數(shù)據(jù)還沒有全部存儲(chǔ)到RAM中,因此將50Hz的信號(hào)進(jìn)行分頻處理,分別分為兩個(gè)25Hz的信號(hào)Data_end1和Data_end2,這樣寫RAM的時(shí)間變?yōu)椴坏?8ms,肯定能夠在下一個(gè)時(shí)鐘周期到來之前全部寫入RAM中。利用Data_end1和Data_end2作為RAM1和RAM2的寫使能,控制RAM的讀寫操作。然后將Data_end1和Data_end2進(jìn)行與操作,相與之后的結(jié)果為圖8所示的sel信號(hào),然后再利用adc_end上升沿對sel信號(hào)進(jìn)行采集,就得到flag_sel。
本發(fā)明中,異步串行幀速率為f,每幀包含64字節(jié),adc_end采集控制信號(hào)速率為f。在本系統(tǒng)中f=50Hz,異步串行數(shù)據(jù)位速率為57600bps。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。