《Xilinx FPGA設計與實踐教程》課件-第10章_第1頁
《Xilinx FPGA設計與實踐教程》課件-第10章_第2頁
《Xilinx FPGA設計與實踐教程》課件-第10章_第3頁
《Xilinx FPGA設計與實踐教程》課件-第10章_第4頁
《Xilinx FPGA設計與實踐教程》課件-第10章_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第十章PS/2鼠標接口控制器

10.1PS/2鼠標接口電路10.2PS/2傳輸子系統(tǒng)設計10.3PS/2鼠標數(shù)據(jù)傳輸系統(tǒng)10.4PS/2鼠標數(shù)據(jù)接口電路本章小結 10.1PS/2鼠標接口電路

10.1.1關于鼠標

計算機上的鼠標是用來檢測在平面二維空間中的移動狀態(tài)和坐標的。其內部電路用來測量移動的相對距離以及按鍵狀態(tài)。對于PS/2接口的鼠標,鼠標的傳輸信息打包成三個數(shù)據(jù)包通過PS/2口發(fā)送出去;在傳輸過程中,數(shù)據(jù)以串行方式發(fā)送并且按照預先設定的采樣率持續(xù)傳輸。

PS/2端口的通信是雙向的。主設備可以發(fā)送命令參數(shù)給鍵盤和鼠標。對于鍵盤來說,不需要主設備向鍵盤發(fā)送參數(shù),因為這樣會對鍵盤提出更高的要求。而鼠標不一樣,上電之后不發(fā)送任何信息給主設備,反而主設備需要首先發(fā)送命令初始化鼠標,使鼠標處于連續(xù)發(fā)送信息狀態(tài)。所以PS/2鼠標接口是需要支持雙向通信接口的。下面介紹PS/2的鼠標接口協(xié)議,并設計一個簡單的雙向鼠標數(shù)據(jù)傳輸接口電路。10.1.2鼠標PS/2通信協(xié)議

標準的PS/2鼠標接口數(shù)據(jù)不僅反映鼠標在X軸和Y軸的移動情況,而且還包括鼠標左鍵、中鍵、右鍵的狀態(tài)信息。鼠標電路包含一個內部計數(shù)器,其用來計算鼠標的每次移動量。當數(shù)據(jù)傳輸給主機時,計數(shù)器清零后重新開始計數(shù)。該計數(shù)器的值為一個9bit寬的帶符號整數(shù),其正值代表向右或向上運動,其負值代表向左或向下運動。計數(shù)器與實際物理距離之間的關系由鼠標特性參數(shù)來決定。默認為每計數(shù)4次代表1mm。當鼠標持續(xù)移動時,數(shù)據(jù)以固定速率傳輸,這個速率由鼠標采樣率決定。默認采樣率為100次每秒。如果鼠標移動速率過快,采樣期間移動量計數(shù)值則有可能超過計數(shù)器的最大值。計數(shù)器在適當?shù)姆较蛟O置有最大幅度,并用兩位溢出位來指示這種情況。

反映鼠標的移動及點擊活動需要三個字節(jié),它們被封裝在PS/2協(xié)議中。3個字節(jié)數(shù)據(jù)的具體格式以及含義如表10-1所示。包含有如下的信息:

(1)?X8,…,X0:在2秒完全模式下的X軸移動量;

(2)?Xv:X軸移動溢出;

(3)?Y8,…,Y0:在2秒完全模式下的Y軸移動量;

(4)?Yv;Y軸溢出;

(5)?l:左鍵狀態(tài),當左鍵按下時為1;

(6)?r:右鍵狀態(tài),當右鍵按下時為1;

(7)?m:可選擇中鍵,當鍵按下時為1。

傳輸過程中,字節(jié)1首先被發(fā)送,字節(jié)3最后被發(fā)送。10.1.3初始化過程

鼠標的操作相對于鍵盤的操作要復雜的多。它有各種不同的模式,通常用的最多的是串行流模式,即鼠標檢測有移動或者有鍵按下時,不斷將數(shù)據(jù)發(fā)送給主機,如果運動是持續(xù)的,數(shù)據(jù)按照設計的采樣率發(fā)送。

操作過程中,主機可以給鼠標發(fā)送命令,修改默認值或其他參數(shù),來設置不同的操作模式,然后鼠標發(fā)送狀態(tài)信號進行響應。在設計中要求所有設置為默認值,不做變化,唯一任務是設置鼠標為持續(xù)數(shù)據(jù)流模式。這時PS/2和FPGA開發(fā)板之間的初始化步驟如下:

(1)上電時鼠標首先進行上電自檢,如果鼠標發(fā)送一個字節(jié)AA,則表示自檢通過;然后發(fā)送一個字節(jié)數(shù)據(jù)00,為標準鼠標的ID號。

(2)?FPGA主機端發(fā)送命令F4,使能數(shù)據(jù)流模式,鼠標返回FE來響應命令。

(3)鼠標進入數(shù)據(jù)流模式,然后發(fā)送正常的數(shù)據(jù)包。

如果在FPGA板上電之前鼠標已經(jīng)插在了FPGA驗證板上,則當板子上電時,鼠標立即發(fā)送“AA00”,由于FPGA芯片當時還沒有被配置,那么將不能接收到鼠標發(fā)送的數(shù)據(jù)。所以通常會忽略上述步驟(1),將鼠標接口時序電路做簡化,僅需要發(fā)送F4命令來檢測鼠標FE響應,然后直接進入正常工作狀態(tài)來傳輸鼠標數(shù)據(jù)包。也可以通過發(fā)送復位命令來強制鼠標返回到初始狀態(tài)。

(1)?FPGA主機端發(fā)送命令FE復位鼠標,鼠標將返回FE來響應。

(2)鼠標執(zhí)行上電自測,然后發(fā)送“AA00”,在這個過程中,數(shù)據(jù)流模式將被禁止。

新型鼠標增加了很多功能,比如鼠標帶有滾輪或者另外增加新的按鈕,這樣就需要發(fā)送更多的信息,這些多出來的字節(jié)將和原始的三字節(jié)數(shù)據(jù)打包一起發(fā)送。

10.2PS/2傳輸子系統(tǒng)設計

10.2.1主系統(tǒng)對PS/2設備的通信協(xié)議

主系統(tǒng)對PS/2設備的通信協(xié)議包含雙向數(shù)據(jù)交換。鼠標數(shù)據(jù)和時鐘為開漏極電路,可以認為它們?yōu)槿龖B(tài)門。基本時序傳輸協(xié)議如圖10-1所示,其中,數(shù)據(jù)和時鐘信號線標為ps2d和ps2c。可以清楚地發(fā)現(xiàn),時序圖被分成兩部分,一部分反映主系統(tǒng)(host)的活動,而另一部分反映設備(mouse)的活動。基本操作時序如下:

(1)主設備強行置低ps2c至少100μs來禁止任何鼠標活動,可以認為是主系統(tǒng)請求發(fā)送數(shù)據(jù)包。

(2)主設備強行置低ps2d,禁止ps2c,可以認為是主機發(fā)送一個開始信號。

(3)此時PS/2從設備開始控制ps2c,負責PS/2時鐘信號的產生;當檢測到開始信號時,PS/2設備產生1到0的信號傳輸。

(4)一旦檢測到傳輸開始,主系統(tǒng)串行移位最低位數(shù)據(jù)在ps2d線上,并一直保持原值直到PS/2設備在ps2c線上產生1到0的跳變,也稱數(shù)據(jù)響應位。

(5)重復步驟(4),直到剩余的7位數(shù)據(jù)和1位奇偶校校驗位發(fā)送結束。

(6)發(fā)送完奇偶校驗位之后,主機禁止ps2d(設為高阻態(tài)),PS/2從設備接管ps2d數(shù)據(jù)線并通過置ps2d為0來響應傳輸完成。根據(jù)需要,主設備可以通過在ps2c從1到0跳變時刻檢查ps2d上面的值來驗證是否成功傳輸。圖10-1PS/2接口主從設備之間的時序圖10.2.2設計與編碼

與前面講述的接收子系統(tǒng)不同之處在于ps2c與ps2d信號為雙向傳輸。每個信號都需要三態(tài)緩沖器,三態(tài)緩沖器的接口如圖10-2所示。tri_c與tri_d信號為三態(tài)緩沖器的使能信號,當置為1時,ps2c_out與ps2d_out信號傳輸?shù)捷敵龆丝冢駝tps2c_out與ps2d_out信號為高阻狀態(tài)。圖10-2PS/2傳輸子系統(tǒng)三態(tài)緩沖器 為了更加明確設計傳輸子系統(tǒng)的流程,根據(jù)鼠標數(shù)據(jù)傳輸控制協(xié)議來畫出ASMD狀態(tài)圖,如圖10-3所示。狀態(tài)機起始狀態(tài)為空狀態(tài)(idle狀態(tài))。當主機置位wr_ps2信號并將數(shù)據(jù)放在din上時,狀態(tài)機啟動并裝載din信號和校驗位par,并一同送到移位寄存器shift_reg中,然后置c_reg寄存器為全1,c_reg寄存器由一個13位計數(shù)器組成,用來產生164μs的延遲。緊接著狀態(tài)機進入請求發(fā)送狀態(tài)(rts狀態(tài))。在rts狀態(tài),狀態(tài)機置位ps2c_out為0,并將相對應三態(tài)緩沖器的使能位tri_c置位,判斷c_reg還沒有清零,狀態(tài)機進入開始狀態(tài)(start狀態(tài))。這時,ps2時鐘信號被禁止,數(shù)據(jù)線被置為0,PS/2設備接管并生成時鐘信號在ps2c信號線上。當通過fall_edge信號檢測到ps2c信號下降沿時,狀態(tài)機進入數(shù)據(jù)傳輸狀態(tài)(data狀態(tài)),開始移位8位數(shù)據(jù)和1位檢驗位,而寄存器n用來保持追蹤移位數(shù)目。當寄存器n為0,即數(shù)據(jù)移位傳輸結束時,狀態(tài)機進入停止位(stopstate);此時,數(shù)據(jù)線被停止,當檢測到最后一個下降沿時返回到idle狀態(tài)。另外,狀態(tài)機還包含tx_idle信號來指示傳輸是否正在進行,此信號可以被用來作為與發(fā)送和接收接口模塊的狀態(tài)指示信號,具體細節(jié)如程序10-1所示。fall_edge信號也是通過與前面所述的濾波電路產生的。圖10-3PS/2發(fā)送子系統(tǒng)FSM流程圖

【程序10-1】PS/2發(fā)送子系統(tǒng)。

moduleps2_tx

(

input

wireclk,reset,

input

wirewr_ps2,

input

wire[7:0]din,

inout

wireps2d,ps2c,

output

regtx_idle,tx_done_tick

);

//狀態(tài)機狀態(tài)信號定義

localparam[2:0]

idle=3'b000,

rts=3'b001,

start??=3'b010,

data=3'b011,

stop=3'b100;

//信號聲明

reg[2:0]state_reg,state_next;

reg[7:0]filter_reg;

wire[7:0]filter_next;

regf_ps2c_reg;

wiref_ps2c_next;

reg[3:0]n_reg,n_next;

reg[8:0]b_reg,b_next;

reg[12:0]c_reg,c_next;

wirepar,fall_edge;

regps2c_out,ps2d_out;

regtri_c,tri_d;

//=================================================

//濾波和ps2c的下降沿檢測電路

//=================================================

always@(posedgeclk,posedgereset)

if(reset)

begin

filter_reg<=0;

f_ps2c_reg<=0;

end

else

begin

filter_reg<=filter_next;

f_ps2c_reg<=f_ps2c_next;

end

assignfilter_next={ps2c,filter_reg[7:1]};

assignf_ps2c_next=(filter_reg==8'b11111111)?1'b1:

(filter_reg==8'b00000000)?1'b0:

f_ps2c_reg;

assignfall_edge=f_ps2c_reg&~f_ps2c_next;

//=============================================

//FSMD

//=============================================

//FSMD狀態(tài)和數(shù)據(jù)寄存器

always@(posedgeclk,posedgereset)

if(reset)

begin

state_reg<=idle;

c_reg<=0;

n_reg<=0;

b_reg<=0;

end

else

begin

state_reg<=state_next;

c_reg<=c_next;

n_reg<=n_next;

b_reg<=b_next;

end

//偶校驗位

assignpar=~(^din);

//FSMD下一狀態(tài)邏輯

always@*

begin

state_next=state_reg;

c_next=c_reg;

n_next=n_reg;

b_next=b_reg;

tx_done_tick=1'b0;

ps2c_out=1'b1;

ps2d_out=1'b1;

tri_c=1'b0;

tri_d=1'b0;

tx_idle=1'b0;

case(state_reg)

idle:

begin

tx_idle=1'b1;

if(wr_ps2)

begin

b_next={par,din};

c_next=13'h1fff; //213-1

state_next=rts;

end

end

rts: //發(fā)送請求

begin

ps2c_out=1'b0;

tri_c=1'b1;

c_next=c_reg-1;

if(c_reg==0)

state_next=start;

end

start: //置位start

begin

ps2d_out=1'b0;

tri_d=1'b1;

if(fall_edge)

begin

n_next=4'h8;

state_next=data;

end

end

data: //8位數(shù)據(jù)+1位校驗

begin

ps2d_out=b_reg[0];

tri_d=1'b1;

if(fall_edge)

begin

b_next={1'b0,b_reg[8:1]};

if(n_reg==0)

state_next=stop;

else

n_next=n_reg-1;

end

end

stop://ps2d置位為高

if(fall_edge)

begin

state_next=idle;

tx_done_tick=1'b1;

end

endcase

end

//三態(tài)緩沖器

assignps2c=(tri_c)?ps2c_out:1'bz;

assignps2d=(tri_d)?ps2d_out:1'bz;

endmodule

本代碼中沒有錯誤檢查電路。更健壯的設計要求檢查校驗位的正確性,并且包含一個看門狗計數(shù)器來防止鼠標在錯誤的狀態(tài)下抖動。

10.3PS/2鼠標數(shù)據(jù)傳輸系統(tǒng)

10.3.1雙向傳輸PS/2接口電路設計

綜合接收和發(fā)送系統(tǒng)來設計雙向傳輸PS/2接口電路。圖10-4為設計模塊框圖,用tx_idle和rx_en作為狀態(tài)信號來調整傳輸和接收操作。傳輸操作優(yōu)先級略高,當系統(tǒng)正在進行傳輸時,tx_idle信號無效;否則,禁止接收操作。接收系統(tǒng)只有在傳輸系統(tǒng)為空的情況下才允許輸入,兩者輪流工作,具體細節(jié)如程序10-2所示。圖10-4雙向PS/2接口的頂層模塊圖

【程序10-2】雙向傳播PS/2接口電路。

moduleps2_rxtx

(

input

wireclk,reset,

input

wirewr_ps2,

inout

wireps2d,ps2c,

input

wire[7:0]din,

output

wirerx_done_tick,tx_done_tick,

output

wire[7:0]dout

);

//信號聲明

wiretx_idle;

//例化PS/2接收器

ps2_rxps2_rx_unit

(.clk(clk),.reset(reset),.rx_en(tx_idle),

.ps2d(ps2d),.ps2c(ps2c),

.rx_done_tick(rx_done_tick),.dout(dout));

//例化PS/2發(fā)送器

ps2_txps2_tx_unit

(.clk(clk),.reset(reset),.wr_ps2(wr_ps2),

.din(din),.ps2d(ps2d),.ps2c(ps2c),

.tx_idle(tx_idle),.tx_done_tick(tx_done_tick));

endmodule10.3.2雙向傳輸PS/2驗證電路

設計一個測試電路來驗證雙向傳輸PS/2接口電路,整體框圖如10-5所示。人工發(fā)送傳輸命令,用8位撥碼開關設置數(shù)據(jù),然后用按鍵產生一個時鐘脈寬的脈沖來發(fā)送數(shù)據(jù)包,接收數(shù)據(jù)包首先需要通過byte-to-ascii電路,將數(shù)據(jù)轉接成ASCII碼外加空格的形式,然后用UART發(fā)送到PC的超級終端上。具體細節(jié)如程序10-3所示。圖10-5PS/2雙向接口驗證電路【程序10-3】雙向傳輸PS/2驗證電路。

moduleps2_monitor

(

input

wireclk,reset,

input

wire[7:0]sw,

input

wire[2:0]btn,

inout

wireps2d,ps2c,

output

wiretx

);

//常數(shù)定義

localparamSP=8'h20; //spaceinASCII

//狀態(tài)聲明

localparam[1:0]

idle=2'b00,

send1=2'b01,

send0=2'b10,

sendb=2'b11;

//信號聲明

reg[1:0]state_reg,state_next;

wire[7:0]rx_data;

reg[7:0]w_data,ascii_code;

wirepsrx_done_tick,wr_ps2;

regwr_uart;

wire[3:0]hex_in;

//==============================================

//例化

//==============================================

//例化PS/2傳輸接收

ps2_rxtxps2_rxtx_unit

(.clk(clk),.reset(reset),.wr_ps2(wr_ps2),

.din(sw),.dout(rx_data),.ps2d(ps2d),.ps2c(ps2c),

.rx_done_tick(psrx_done_tick),.tx_done_tick());

//例化UART發(fā)送模塊

uartuart_unit

(.clk(clk),.reset(reset),.rd_uart(1'b0),

.wr_uart(wr_uart),.rx(1'b1),.w_data(w_data),

.tx_full(),.rx_empty(),.r_data(),.tx(tx));

//例化按鍵防反彈電路

debouncebtn_db_unit

(.clk(clk),.reset(reset),.sw(btn[0]),

.db_level(),.db_tick(wr_ps2));

//============================================

//發(fā)送ASCII字符狀態(tài)機模塊

//============================================

//狀態(tài)寄存器

always@(posedgeclk,posedgereset)

if(reset)

state_reg<=idle;

else

state_reg<=state_next;

//下一狀態(tài)邏輯

always

@*

begin

wr_uart=1'b0;

w_data=SP;

state_next=state_reg;

case(state_reg)

idle:

if(psrx_done_tick) //接收掃描碼

state_next=send1;

send1: //發(fā)送十六進制字符高字節(jié)

begin

w_data=ascii_code;

wr_uart=1'b1;

state_next=send0;

end

send0: //發(fā)送十六進制字符低字節(jié)

begin

w_data=ascii_code;

wr_uart=1'b1;

state_next=sendb;

end

sendb: //發(fā)送空格字符

begin

w_data=SP;

wr_uart=1'b1;

state_next=idle;

end

endcase

end

//===========================================

//顯示掃描碼

//===========================================

//將掃描碼分離成兩個4bit十六進制數(shù)

assignhex_in=(state_reg==send1)?rx_data[7:4]:

rx_data[3:0];

//十六進制數(shù)到ASCII碼轉換電路

always@*

case(hex_in)

4'h0:ascii_code=8'h30;

4'h1:ascii_code=8'h31;

4'h2:ascii_code=8'h32;

4'h3:ascii_code=8'h33;

4'h4:ascii_code=8'h34;

4'h5:ascii_code=8'h35;

4'h6:ascii_code=8'h36;

4'h7:ascii_code=8'h37;

4'h8:ascii_code=8'h38;

4'h9:ascii_code=8'h39;

4'ha:ascii_code=8'h41;

4'hb:ascii_code=8'h42;

4'hc:ascii_code=8'h43;

4'hd:ascii_code=8'h44;

4'he:ascii_code=8'h45;

default:ascii_code=8'h46;

endcase

endmodule 10.4PS/2鼠標數(shù)據(jù)接口電路

10.4.1傳輸PS/2接口電路設計

PS/2接口電路是在PS/2雙向傳輸電路外面再包一層電路。其主要功能是使能串行流模式和處理三個傳輸數(shù)據(jù)字節(jié)。電路的輸出包括兩個9位信號:xm和ym,分別代表鼠標在X軸和Y軸的移動信號;btm為3位按鍵狀態(tài)信號;信號m_done_tick為一位時鐘脈寬長度的狀態(tài)信號,當傳輸數(shù)據(jù)有效時置位。

具體細節(jié)如程序10-4所示。程序主體狀態(tài)機由7個狀態(tài)組成。int1、int2和int3三個狀態(tài)為在reset有效之后執(zhí)行。在這三個狀態(tài)中,狀態(tài)機處理F4命令,等待數(shù)據(jù)傳輸后數(shù)據(jù)包開始響應,這時鼠標進入串行數(shù)據(jù)流模式。之后,狀態(tài)機在pack1、pack2和pack3三個狀態(tài)獲取和處理下一個三字節(jié)數(shù)據(jù)包,然后在done狀態(tài)激活m_done_tick信號,狀態(tài)機不斷循環(huán)后面四個狀態(tài)。

【程序10-4】基本鼠標接口電路。

modulemouse

(

input

wireclk,reset,

inout

wireps2d,ps2c,

output

wire[8:0]xm,ym,

output

wire[2:0]btnm,

output

regm_done_tick

);

//常數(shù)聲明

localparamSTRM=8'hf4; //數(shù)據(jù)流發(fā)送命令F4

//狀態(tài)聲明

localparam[2:0]

init1=3'b000,

init2=3'b001,

init3=3'b010,

pack1=3'b011,

pack2=3'b100,

pack3=3'b101,

done=3'b110;

//信號聲明

reg[2:0]state_reg,state_next;

wire[7:0]rx_data;

regwr_ps2;

wirerx_done_tick,tx_done_tick;

reg[8:0]x_reg,y_reg,x_next,y_next;

reg[2:0]btn_reg,btn_next;

//例化

ps2_rxtxps2_unit

(.clk(clk),.reset(reset),.wr_ps2(wr_ps2),

.din(STRM),.dout(rx_data),.ps2d(ps2d),.ps2c(ps2c),

.rx_done_tick(rx_done_tick),

.tx_done_tick(tx_done_tick));

//FSMD狀態(tài)和數(shù)據(jù)寄存器

always@(posedgeclk,posedgereset)

if(reset)

begin

state_reg<=init1;

x_reg<=0;

y_reg<=0;

btn_reg<=0;

end

else

begin

state_reg<=state_next;

x_reg<=x_next;

y_reg<=y_next;

btn_reg<=btn_next;

end

//FSMD下一狀態(tài)邏輯

always

@*

begin

state_next=state_reg;

wr_ps2=1'b0;

m_done_tick=1'b0;

x_next=x_reg;

y_next=y_reg;

btn_next=btn_reg;

case(state_reg)

init1:

begin

wr_ps2=1'b1;

state_next=init2;

end

init2: //等待發(fā)送完畢

if(tx_done_tick)

state_next=init3;

init3: //等待數(shù)據(jù)包返回標志

if(rx_done_tick)

state_next=pack1;

pack1: //等待第一個數(shù)據(jù)包

if(rx_done_tick)

begin

state_next=pack2;

y_next[8]=rx_data[5];

x_next[8]=rx_data[4];

btn_next=rx_data[2:0];

end

pack2: //等待第二個數(shù)據(jù)包

if(rx_done_tick)

begin

state_next=pack3;

x_next[7:0]=rx_data;

end

pack3: //等待第三個數(shù)據(jù)包

if(rx_done_tick)

begin

state_next=done;

y_next[7:0]=rx_data;

end

done:

begin

m_done_tick=1'b1;

state_next=pack1;

end

endcase

end

//輸出邏輯

assignxm=x_reg;

assignym=y_reg;

assignbtnm=btn_reg;

endmodule

10.4.2傳輸PS/2接口電路測試

我們設計一個簡單的測試電

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論