摘要:2.4DSP接收數(shù)據(jù)DSP接收單片機發(fā)送過來的數(shù)據(jù)是通過中斷方式實現(xiàn)的,每傳輸一個數(shù)據(jù)就發(fā)生一次中斷。主程序完成對DSP的初始化后進入等待狀態(tài),一旦接收到單片機的中斷信號,DSP就進入中斷服務子程序,將接收到的數(shù)據(jù)存放在70H開始的存儲單元中。當所有數(shù)據(jù)傳輸完成后,將這些數(shù)據(jù)賦給相應的變量。這里要注意的是,DSP的SPIRXBUF是16
2.4 DSP接收數(shù)據(jù)
DSP接收單片機發(fā)送過來的數(shù)據(jù)是通過中斷方式實現(xiàn)的,每傳輸一個數(shù)據(jù)就發(fā)生一次中斷。主程序完成對DSP的初始化后進入等待狀態(tài),一旦接收到單片機的中斷信號,DSP就進入中斷服務子程序,將接收 到的數(shù)據(jù)存放在70H開始的存儲單元中。當所有數(shù)據(jù)傳輸完成后,將這些數(shù)據(jù)賦給相應的變量。這里要注意的是,DSP的SPIRXBUF是16位,而單片機發(fā)送的數(shù)據(jù)是8位,所以在DSP接收到數(shù)據(jù)以后需要做處 理,把高8位屏蔽掉??梢酝ㄟ^與00FF相與來達到這個目的。
中斷程序如下:
LDP #6
LACC K;K=K+1
ADD #1
SACL K
MAR *,AR2;AR2為存儲單元地址指針
LDP #DP_PF1
LACC SPIRXBUF
AND #00FFH;高位屏蔽掉
SACL *+
LDP #6
LACC K
SUB #1;判斷是否為指令數(shù)據(jù)
BCND L1,NEQ
LDP #0
LACC #70H
SUB #0
BCND L3,NEQ;不是0則跳到L3
BL2;是0則跳到L2
L1: …;判斷是否是第2個數(shù)據(jù)
L4: LACCK;判斷數(shù)據(jù)是否傳送完畢
SUB #05H
BCND L5,EQ
BL2
L5:LDP #0;數(shù)據(jù)全部發(fā)送完畢
LACC 72H
LDP #6
SACL SPEED;賦值給相應變量
……
L3: SPLK K,0;K=0
LDP #0
LAR AR2,#70H;地址指針指回70H
L2: CLRC INTM;開中斷
RET
3 結論
實驗證明,應用SPI通信進行MSP430單片機與DSP之間的串口通信完全滿足伺服系統(tǒng)實時性的要求。同時,由于SPI接口功能比較完善,通信協(xié)議清晰,時序簡單,無須外加其他元器件即可方便地實現(xiàn)DSP 與主機之間數(shù)據(jù)的串行通信,簡化了系統(tǒng)設計,增強系統(tǒng)的實時處理能力和應用范圍。結構靈活性強,便于擴展,同時減輕了主CPU負擔,提高了系統(tǒng)的可靠性。
[1] [2] [3] [4]