OMAPL138基於SYSLINK的雙核通信LED實例


1、實例編譯

本實例實現了利用MCSDK的SYSLINK組件在ARM端控制DSP端來操作開發板外設LED執行跑馬燈程序。

編譯此實例。


2、實例演示

       執行此實例雙核通信需要4個文件,syslink.ko、slaveloader、server_dsp.xe674和app_host。

syslink.ko:/lib/modules/3.3.0/kernel/drivers/dsp/syslink.ko

slaveloader:開發板任意example的debug目錄中,如/ex03_notify/debug/slaveloader。

以下爲各個文件的作用:

syslink.ko:雙核通信驅動。

slaveloader:用於ARM端啓動DSP並加載.xe674格式的SYS/BIOS文件,例如server_dsp.xe674。

server_dsp.xe674:DSP端應用程序。在此實例中,增加的DSP端控制LED流水燈功能的代碼鏡像就是server_dsp.xe674。

app_host:ARM端應用程序。

       將以上編譯出來的slaveloader、server_dsp.xe674、app_host和ex10_led中的run.sh拷貝到開發板同一個目錄下,例如開發板的根目錄:

進入開發板的Linux文件系統後,執行如下命令安裝雙核通信驅動:

Targert#      insmod /lib/modules/3.3.0/kernel/drivers/dsp/syslink.koTRACE=1 TRACEFAILURE=1

       然後執行“./run.sh”命令,觀察發現LED會先閃爍兩次,再依次點亮所有LED,接着依次熄滅所有LED。

Target#        ./run.sh

       使用“cat run.sh”命令可以查看到run.sh腳本中的內容是:

以下爲腳本內容的解釋:

./slaveloaderstartup DSP server_dsp.xe674:加載SYS/BIOS應用程序和啓動DSP核。

./app_hostDSP:啓動ARM端Linux應用程序。

./slaveloadershutdown DSP:關閉DSP核。


3、實例解析

3.1 實例程序結構解析

       在ex10_led目錄中運行“tree -L 3”命令,可以看到實例程序目錄的結構。

dsp:SYS/BIOS源代碼。

host:ARM端Linux應用程序。

shared:ARM和DSP內存共享相關。

products.mak:makefile調用的配置文件,用於識別編譯的頭文件和庫文件路徑。


3.2 實例SYS/BIOS 應用程序解析

       dsp/main_dsp.c中創建了smain任務,smain任務會先執行Server_init()

       Server_init()在dsp/Server.c中定義,Server.c是最常修改的SYS/BIOS文件。此實例在Server.c中增加了LED控制函數led_init(),

       dsp/Server.c中的led_init()函數實現了LED對應的GPIO的基本配置。在初始化配置時讓4個LED連續閃爍2次

       LED對應的GPIO相關寄存器定義如下圖所示:




       SYS/BIOS的smain任務完成後會執行dsp/Server.c中的Server_create()函數。


       Server_create()函數在dsp/Server.c中定義

 

       Server_create()函數會註冊notify事件。當ARM端notify事件註冊時,DSP會觸發Server_notifyCB函數,接着執行dsp/Server.c中的Server_exec()函數。

       Server_exec()函數在dsp/Server.c中定義,該函數輪詢等待ARM端發來的命令,其中Server_waitForEvent()是一種信號量等待方式,當ARM端有命令傳送過來時會解除等待,然後解析ARM端傳入的命令。

 

       ARM傳到DSP並解析出來的是num和event兩個變量。APP_CMD_ON_PAYLOAD將在下一章節解釋。

3.3 實例Linux 應用程序解析

       host/main_host.c功能和dsp/main_dsp.c類似,它初始化SYSLINK,然後執行host/App.c中的App_create()函數註冊notify事件,等待DSP端創建notify事件後,接着執行host/App.c中App_exec()函數。ARM端在App_exec()函數中向DSP發送控制LED的命令。

 

       可以看出ARM端發送給DSP的命令有8個,分別是依次點亮4個LED,再依次熄滅4個LED。APP_CMD_ON_PAYLOAD和APP_CMD_OFF_PAYLOAD分別表示控制LED亮和滅,x分別爲4個LED編號。控制狀態和編號需要DSP端解析。所以APP_CMD_ON_PAYLOAD和APP_CMD_OFF_PAYLOAD是共享數據,其宏定義存放在shared/AppCommon.h中。

 

       APP_CMD_ON_PAYLOAD和APP_CMD_OFF_PAYLOAD宏是用戶根據實際情況在shared/AppCommon.h中修改或者添加的,ARM端和DSP端都會使用到。

 

詳細文檔請查閱廣州創龍的使用手冊:

http://pan.baidu.com/s/1c0hCAg4?qq-pf-to=pcqq.c2c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章