<span id="so776"><output id="so776"><nav id="so776"></nav></output></span>

    <span id="so776"><output id="so776"><nav id="so776"></nav></output></span>

    <acronym id="so776"></acronym>

    1. <span id="so776"><output id="so776"><b id="so776"></b></output></span>

      行業資訊

      您所在的位置:首頁 > 關于飛凌 > 行業資訊
      長文分享丨TI AM5718的PRU開發詳解
      發布人:管理員   發布時間:2019/6/28 15:12:49

      PRUSS簡介

      TI AM5718 系列 OK5718開發板 有兩個PRU-ICSS(ProgrammableReal-Time Unit Subsystem and Industrial CommunicationSubsystem),可以獨立編程實現一些實時性要求高的個性化需求,實現產品的差異化。

       

      本文介紹PRU處理器架構,開發,調試方法。在系統架構上,PRUSS是連接L3_MAIN內部總線上的一個模塊,與系統中其它主模塊如ARM,DSP一樣,可以訪問芯片上的其它外設。


       

      PRUSS包括兩個PRU,通過自己的32-bitinterconnect總線與子系統的中斷控制器、指令內存、數據內存、共享內存、外設模塊相連。

      PRU不是一個加速器,它是32-bitLoad/Store RISC架構小端處理器,每個PRU有32個通用寄存器R0~R31,12Kbyte指令RAM,8Kbyte數據RAM和32byte共享RAM。指令RAM是獨立的,互相之間不能訪問,但數據RAM可以通過映射地址互相訪問;專用的21個輸入引腳和21個輸出引腳。

      設備中的pru-icss1和pru-icss2集成功能:

      •PD_L4PER power domain instantiation
      • two master ports (PRU0and PRU1 core initiators) on the device L3_MAIN interconnect
      •Non-wakeup capable - smart Standby protocol with the device PRCM
      •Software assertion of a standby request "MStandby" (formaster port clock disable) with local (PRUICSS) monitoring of thePRCM "MWait" acknowledge.
      • one slave(configuration) port on the L3_MAIN interconnect for device hosts(MPU, DSP1, etc.) to
      access various memories and registers ofPRU-ICSS
      • Non-wakeup capable - smart Idle protocol with thedevice PRCM
      • 10 output interrupt events from local interruptcontroller - PRUSS_INTC:

      – 2events to each PRU core (events 0 and 1)
      – 8 events mapped tothe device IRQ_CROSSBAR which further remaps them to deviceinterrupt
      controllers (events 2 through 9)
      – 2 eventsmapped to the device DMA_CROSSBAR, that remaps them to device DMAcontrollers
      (events 8 and 9)
      • 32 external interrupts aremapped via the device IRQ_CROSSBAR to the local PRUSS_INTC
      • Alocal software gating of clocks to several modules within PRUsubsystem (local clock management
      protocol), as follows:
      –PRUSS_IEP
      – PRUSS_eCAP_0
      – PRUSS_UART0
      –PRUSS_INTC
      – PRUSS_PRU0
      – PRUSS_PRU1
      • 3 inputclocks obtained from device PRCM:
      – a PRU-ICSS top levelgatable interface clock
      – a PRUSS IEP functional clock
      –a PRUSS UART0
      • No memory/register retention is supported
      •One hardware non-retention (level sensitive) reset

      wps3.png

       

      PART 01 ▼ PRU內存映射

       1.1 指令空間 

      每個PRU獨立的指令空間為0x00000000~0x00002FFF。指令空間由外部主處理ARM/DSP初始化,程序指針PC是32bit字地址,不是字節地址,如PC=2,代表指令地址0x08。

      ▲PRU指令空間映射表

       1.2 數據空間 

      每個PRU獨立的8Kbyte數據RAM空間為0x0000~0x01FF,因為數據RAM連接在PRU子系統的內部總線上,所以子系統中的其它主模塊也可以訪問到這塊空間,這段內存空間在另一個PRU上的映射地址為0x2000~0x21FF。位于數據空間的還有共用的中斷控制器寄存器;PRU控制/狀態寄存器等,有各自的地址空間。


      ▲PRUSS本地數據空間內存映射表 

       1.3 全局地址空間映射 

      PRU_ICSS1局部地址在系統全局地址空間基地址(L3_MAINbase address)為0x4B2A0000,PRU_ICSS2局部地址在系統全局地址空間基地址(L3_MAINbase address)為0x4B28E000。表3表示PRU_ICSS局部地址空間的偏移量(OffsetAddress)。
       

      ▲PRUSS全局空間內存映射表


      PRU可以通過表2的局部地址,也可以通過全局地址訪問PRUSS的數據空間,通過全局地址空間訪問要經過系統L3_MAINdevice,比通過局部地址空間訪問要慢。

      PRUSS外部主模塊如ARM,DSP等可通過系統全局地址空間映射端口+全局地址空間訪問(表3的OffsetAddress + L3_MAIN base address)PRU資源。詳情參考《AM571xTechnical Reference Manual》中30.4.4.2PRU-ICSS Global Memory Map章節內容。

      PART 02 ▼ 控制/狀態寄存器

      PRU0的控制/狀態寄存器地址位于0x00020000~0x0002_3FFF,PRU1的控制/狀態寄存器地址位于0x0002_4000~0x0002_5FFF,寄存器列表如表4所示,各寄存器的詳細說明請參閱[1]。


       

       

      ▲PRU控制/狀態寄存器表

       

       2.1 PRU_CONTROL控制寄存器 

      外部主模塊ARM/DSP通過控制寄存器可以控制PRU的運行狀態。


      ▲表5 PRU控制寄存器說明表 

       2.2 PRU_STATUS狀態寄存器 

      狀態寄存即PRU的程序指針寄存器,與程序的真正運行狀態有一個周期的延時。

       2.3 PRU_WAKEUP_EN喚醒使能寄存器 

      在程序執行SLP指令進入睡眠狀態之前,使能WAKEUP寄存器相應的位,當輸入狀態寄存器R31相應的位置1時,即WAKEUP&R31!=0時,喚醒PRU。

       2.4 PRU_CYCLE周期計數器 

      當CONTROL[ENABLE]=1和CONTROL[COUNTENABLE]=1時,CYCLECNT以PRU時鐘周期計數。當CONTROL[ENABLE]=0或CONTROL[COUNTENABLE]=0時,計數停止。當重新使能時,恢復繼續計數。

       2.5 STALLCNT取指停止計數器 

      當CONTROL[ENABLE]=1和CONTROL[COUNTENABLE]=1,且由于某種原因PRU不能取指令時,STALLCNT開始以PRU時鐘周期計數。其值總是小于,或等于CYCLECNT的值。

       2.6 PRUSS_DBG_GPREG 0~31調試通用寄存器 

      PRUSS_DBG_GPREG0~31與通用寄存器R0~R31對應,為外部主模塊提供一個調試窗口。當PRU停止時,ARM/DSP讀/寫INTGPR0~31直接讀/寫寄存器R0~R31。

       

      PART 03 ▼ PRU通用寄存器 

       3.1 PRU事件/狀態寄存器R31 

      R31是一個特殊的寄存器,讀與寫操作時的功能是不一樣的。寫R31寄存器時,寫一個0到15之間的通道號到R31_PRU_VEC[3:0],同時設置R31_PRU_VEC_VALID,將產生相應的中斷輸出事件到中斷控制器的系統事件。兩個PRU輸出的斷事件相“或”輸出到同一個中斷控制器系統事件。


       

      讀R31寄存器時,R31[29:0]反映PRU的輸入管腳PRU_R30[29:0]的狀態。R31[31:30]是映射到中斷控制器的INTR_IN[0]和INTR_IN[1]的狀態。

       3.2 通用輸出寄存器R30 

      每個PRU有32個獨立的輸出管腳PRU0_R31[31:0]和PRU1_R31[31:0],寫到寄存器R30[31:0]的值直接輸出到PRUn_R31[31:0]管腳。

       

      PART 04▼PRU中斷控制器

      PRU中斷控制器支持64個系統事件,10個中斷通道,10個主機中斷。


      ▲圖2 PRU中斷控制器框圖


      PRU-ICSS1_INTC/PRUSS2_INTC的中斷0~31對應著PRU-ICSS集成模塊產生的事件。系統事件16~31由寫R31產生。


      PRU_ICSS系統事件32~55(中斷輸入),可以通過系統配置寄存器PRUSS_MII_RT[0]選擇標準的或者MII_RT系統事件,PRUSSEVTSEL=0時選擇PRU-ICSS專用IRQ_CROSSBAR輸出的事件作為中斷源,PRUSSEVTSEL=1時選擇MII_RT模塊產生的事件作為中斷源。如下圖所示:


       

      10個通道可以由任意64個系統事件映射,可以多個系統事件映射到一個通道,但不要將一個系統事件映射到多個通道。

      設置PRUSS_INTC_CMR實現通道和64個系統事件的映射,PRUSS_INTC_CMRi(i為0~15)寄存器用于實現i*4到i*4+k號系統事件映射到相應的通道。通過寄存器相應位設置的通道號映射到相應的系統事件。

      10個主機中斷與10個通道之間可以任意映射,可以多個通道映射到一個主機中斷,但不要將一個通道映射到多個主機中斷,推薦按x號通道映射到x號主機中斷方式映射。

      PRUSS_INTC_HMR寄存器主機中斷和通道的映射。PRUSS_INTC_HMRi(i為0~3)寄存器用于實現0-9號通道映射到0-9號主機中斷。通過寄存器相應位設置主機中斷號,將住中斷號與通道號建立映射。

      主機中斷0輸出到R31.b30,主機中斷1輸出到R31.b31。主機中斷2~9接輸出PRUSS到ARM和DSP的中斷控制器的系統事件PRUSS_EVTOUT0~7。PRU不支持中斷向量表,產生的0,1主機中斷可用來喚醒PRU,或為PRU軟件提供狀態查詢。PRU中斷控制器寄存器說明請參考文獻[2]。

      看點05▼PRU代碼包

      飛凌嵌入式 AM571x 系列 OK5718開發板 用戶資料中提供了大量的實例源碼,目錄結構如圖3所示。


       

      關于例程的編譯和測試,詳見《OK5718-C_軟件手冊_》7.4Ti 官方例程編譯及測試和7.5飛凌例程編譯及測試。

       

      PART06▼PRU軟件調試

       6.1 調試工具 

      調試工具我們使用TI官方推出的仿真器XDS100V2 ,XDS100V2是一款USBJTAG仿真器。

       6.2 硬件連接 

      步驟一:

      將XDS100V2仿真器相關引腳通過飛凌調試轉接板與0K5718-C開發板 的JTAG

      接口使用排線進行連接。連接方式如下:


       

      步驟二:

      使用USB數據連接線連接XDS100V2到PC機USB接口。

       6.3 軟件調試 

      本實例使用飛凌pru測試程序PRU_LED0做仿真調試,將項目導入到ccs后,右擊PRU_LED0,選擇Properties。


       

      選擇使用仿真器和編譯器版本,設置完成后點擊ok。


       

      右擊PRU_LED0,選擇DebugConfigurations。


       

      選擇PRU_LED0,去掉相應的勾選之后如下圖。點擊Apply,最后點Debug。


       

      點擊run菜單,選擇debug。


       

      以下方式也可以進入debug。


       

      如果編譯通過的話,會是這個樣子。


       

      進入仿真后光標會停在主函數開始處。


       

      下面對上圖的按鈕做一下說明 

      按鈕1,運行按鈕,全速運行。如果為灰色,說明一直在執行代碼,也可能是死循環,點暫停鍵看看。

      按鈕2,暫停運行。

      按鈕3,退出仿真。

      按鈕4,單步運行,遇到子函數進入子函數。

      按鈕5,單步運行,遇到函數會當成語句,直接一步過,不進入函數內部。

      按鈕6,單步運行,如果程序在子函數中運行,點擊此按鈕,跳出子函數。

      按鈕7,匯編單步,遇到子函數,進入子函數。

      按鈕8,匯編單步運行,遇到函數會當成語句,直接一步過,不進入函數內部。

      在軟件調試過程中,進行如下操作可以查看變量,寄存器值。

      點擊view菜單,選擇Expressions項。


       

      出現以下界面


       

      ▼ 選中要觀察的變量名,右擊選中AddWatch Expression 項。


       

      點擊ok。


       

      Expressions 窗口中加入變量gpio的值。


       

      點擊Addnew expression  輸入R30,在Expressions窗口中顯示R30值。


       

      當進入調試界面后,當要程序運行到某一行時,右擊某一行,點擊runto line 。則運行到此行,右擊57行。


       

      運行到57行gpio值發生變化,轉化為16進制為0xffffffff。


       

      右擊60行,選擇runto line,R30值發生變化。


       

      ----  END   ----


       長按識別二維碼加關注 

      飛凌嵌入式

      專注于智能設備核心平臺研發與制造


      ■ 關注“飛凌嵌入式”公眾號,不定期分享行業干貨及產品一線資料。

      ■ 直接微信回復產品平臺,如“LS1043A”,即可快速獲取對應產品信息。

      ■ 想要了解飛凌更多信息,歡迎與我們聯系:

      銷售工程師:400-699-6866

      國際業務部:0312-3102650-854

      技術服務部:0312-3119192

      方案定制類:17713286015 (杜工),18633238067(王工 

      ■ 實時技術支持:

      AM 9:00—11:30,PM 13:30—17:00(周一至周五)

       

      推薦閱讀

      您所在的位置:首頁 > 關于飛凌 > 行業資訊



      科技引領進步!數采低成本 環保率先行
      干貨分享丨Linux系統下強大的ethtool命令
      站在風口上,邊緣計算牽手LS1043A開發板
      解鎖新技能!iMXRT1052核心板支持操作系統RT-Thread
      未來觸手可及,智慧燈桿掀起“城市信息革命”IOT風向標丨智慧城市呼喚智能建筑
      小巧嵌入式平臺“玩轉”大型的數據庫管理系統
      飛凌干貨丨芯片在不同電平電路中的應用
      無人機在智能交通領域的應用大盤點!
      飛凌嵌入式丨我們是如何解決TVS管使用錯誤的
      LS1012A丨一文看懂何謂“低耗高速佼佼者”
      穩定壓倒一切,開發板電源架構解析之IMX6UL
      飛凌嵌入式 S5P4418 核心板為自助加油系統“加油”
      小白也能玩轉 i.MX6 平臺的 GPIO 應用筆記


      Copyright © 2007-2015 保定飛凌嵌入式技術有限公司 All Rights Reserved  冀ICP備12004394號  
      2000xxx影院