Docker 的優點
603
2025-03-31
Revision History
Draft?Date
Revision No.
Description
2016/05/25
V1.1
1.模板更新。
2015/04/28
V1.0
1.初始版本。
1 環境搭建
1.1安裝pru-sdk包
PRU的SDK源碼ti-pru-sw-1.00.00-r0+svnr33.tar.bz2位于光盤資料tools目錄下,將此文件解壓到虛擬機任意路徑下,解壓后如下圖所示:
圖 1
1.2 編譯pru-sdk包
執行以下命令進行編譯:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi-?LINUXKERNEL_INSTALL_DIR=/home/tl/omapl138/linux-3.3
編譯成功如下圖所示:
圖 2
參數解析:
CROSS_COMPILE:交叉編譯工具鏈;
LINUXKERNEL_INSTALL_DIR:內核安裝路徑;
請務必使用創龍提供的linux-3.3內核源碼進行編譯,編譯前確保內核源碼已正確編譯過。
1.3 安裝pru-sdk包到文件系統中
執行以下命令進行編譯:
Host# sudo make??DESTDIR=/home/tl/omapl138/rootfs?install
安裝完如下圖所示:
圖 3
參數解析:
DESTDIR:文件系統位置;
2? LED開發例程
本例程主要通過PRU控制開發板LED燈的閃爍。
2.1源碼安裝
源碼路徑位于光盤資料"demo/app/tl-pru-example/tl-pru-leds.tar.bz2",將源碼解壓到虛擬機任意路徑下,如下圖所示:
圖 4
2.2 修改配置文件
修改Rules.make配置文件:
CCTOOLS?=arm-none-linux-gnueabi-gcc???//交叉編譯工具鏈
# where the ti_pru_sw path
PRU_SW_DIR=/home/tl/pru/pru-sdk/ti-pru-sw-1.00.00-r0+svnr33???//PRU_SDK安裝目錄
LIBDIR_APP_LOADER?=$(PRU_SW_DIR)/app_loader/lib
INCDIR_APP_LOADER?=$(PRU_SW_DIR)/app_loader/include
UTILS_DIR=$(PRU_SW_DIR)/utils
如下圖所示:
圖 5
2.3 編譯
執行以下命令進行編譯:
Host# make
圖 6
編譯生成的可執行文件位于bin目錄下,如下圖所示:
圖 7
2.4 運行程序
將bin目錄中的tl-pru-leds和tl-pru-leds.bin目標文件拷貝到開發板上,并放于同一目錄下。在此目錄下執行以下命令:
Target# ./tl-pru-leds
如下圖所示:
圖 8
演示現象:
開發板LED會同時閃爍十次。
3 按鍵開發例程
本例程演示PRU通過按鍵對LED燈進行控制。
開發板LED編號和GPIO對應關系如下:
表 1
開發板型號
GPIO0[0]
GPIO0[5]
GPIO0[1]
GPIO0[2]
TL138/1808-EVM
D7
D6
D9
D10
TL138/1808-EasyEVM
D7
D6
D9
D10
TL138/1808-EthEVM
D7
D6
D9
D10
TL138/1808F-EasyEVM
\
GD1
GD2
GD3
TL138/1808F-EVM
\
D1
D2
D3
3.1 源碼安裝
源碼路徑位于光盤資料"demo/app/tl-pru-example/tl-pru-keys.tar.bz2",將源碼解壓到虛擬機任意路徑下,如下圖所示:
圖 9
3.2 修改配置文件
修改Rules.make配置文件:
CCTOOLS?=arm-none-linux-gnueabi-gcc???//交叉編譯工具鏈
# where the ti_pru_sw path
PRU_SW_DIR=/home/tl/pru/pru-sdk/ti-pru-sw-1.00.00-r0+svnr33???//PRU_SDK安裝目錄
LIBDIR_APP_LOADER?=$(PRU_SW_DIR)/app_loader/lib
INCDIR_APP_LOADER?=$(PRU_SW_DIR)/app_loader/include
UTILS_DIR=$(PRU_SW_DIR)/utils
如下圖所示:
圖 10
3.3編譯
執行以下命令進行編譯:
Host# make
圖 11
編譯生成的可執行文件位于當前bin目錄下,如下圖所示:
圖 12
3.4?運行程序
將bin目錄中的tl-pru-keys和tl-pru-keys.bin目標文件拷貝到開發板上,并放于同一目錄下。在此目錄下執行以下命令:
Target# ./tl-pru-keys
如下圖所示:
圖 13
演示現象:
以TL138-EVM為例,開發板LED D6被點亮,按下按鍵SW5時LED D9會被點亮,按下按鍵SW6時,LED D10會被點亮,大約歷時10s,測試程序執行完畢,LED D6熄滅,程序退出。
4 程序代碼分析
以LED例程為例:
Linux端代碼分析
程序設計流程如下:
初始化pru模塊
打開pru中斷
下載程序到pru中
等待程序執行完畢,pru會發送一個中斷給arm
關閉pru并退出
Linux端代碼主要位于tl-pru-leds.c文件內,代碼如下圖所示:
圖 14
PRU端代碼分析
PRU端代碼主要位于tl-pru-leds.p文件內,主要以匯編為主。主函數程序工作流程如下:
Pinmux配置
Gpio Direct配置
Gpio Data輸出1,LED ON
延時
Gpio Data輸出0,LED OFF
/*程序入口地址,匯編程序需要注明入口地址*/
.origin 0 ?????????? //表示PRU從程序的0開始的位置開始取指
.entrypoint START //告訴編譯器,程序入口地址是從label:START開始
/*宏定義*/
#define LOOP_TIMES 10 // define the LED flash times
// Refer to this mapping in the file - \prussdrv\include\pruss_intc_mapping.h
#define PRU0_ARM_INTERRUPT 34
#define GPIO_BASE 0x01E26000 // the base address of GPIO registers
#define GPIO01_DIRECT 0x10 // the offset address of DIR01 register
#define GPIO0_SETDATAOUT 0x18 // the offset address of SET_DATA01 ?registers
#define GPIO0_CLEARDATAOUT 0x1C // the offset address of CLR_DATA01 registers
#define SYSCFG_BASE 0x01c14000
#define PINMUX1_OFFSET 0x124
// PINMUX_GPIO0_0 ?PINMUX_GPIO0_1 ?PINMUX_GPIO0_2 ?PINMUX_GPIO0_5
#define PINMUX1_GPIO_LED_MASS (0xf << 28 | 0xf << 24 | 0xf << 20 | 0xf << 8)
#define PINMUX1_GPIO_LED (0x8 << 28 | 0x8 << 24 | 0x8 << 20 | 0x8 << 8)
/*START標號開始了PRU程序,類似C程序從main函數開始*/
START:
// setup pinmux gpio led
MOV r3, SYSCFG_BASE + PINMUX1_OFFSET
LBBO r2, r3, 0, 4
MOV r4, PINMUX1_GPIO_LED_MASS
NOT r4, r4
AND r2, r2, r4
MOV r4, PINMUX1_GPIO_LED
OR r2, r2, r4
SBBO r2, r3, 0, 4
/*函數的定義*/
// Delay 200ms funcation
DELAY_400MS:
MOV r0, 45600000 // delay: 400ms
LOOP_DELAY: // PRU CORE CLK: 228MHz, cycle:8.77ns
SUB r0, r0, 1 // 1 CPI
QBNE LOOP_DELAY, r0, 0 // 1 CPI
RET
/*函數的調用*/
CALL DELAY_400MS // Call to delay some time
/*發送中斷信號給ARM*/
// Send notification to Host for program completion
MOV r31.b0, #PRU0_ARM_INTERRUPT
/*關閉PRU*/
// Halt the processor
HALT
附錄1
圖15
Linux 單片機
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。