日韩成人激情_欧美黑人xxx_国产一区二精品区在线_精品在线一区_97成人资源_久久久久久一区

產品分類

當前位置: 首頁 > 工業電氣產品 > 端子與連接器 > 線路板連接器 > FFC連接器

類型分類:
科普知識
數據分類:
FFC連接器

在IWR1642/AWR1642上修改L3 RAM的分布

發布日期:2022-04-28 點擊率:36

Other Parts Discussed in Post: AWR1642, IWR1642, AWR1642BOOST

       本文以AWR1642為例,介紹了在AWR1642 ES2.0 EVM上基于mmWave SDK 2.1的mmw demo下如何修改代碼來改變L3 RAM分布的具體流程和步驟。

         IWR1642/AWR1642上總共有768KB L3 RAM。這768KB L3內存按照128KB一個bank,分成了6個bank(bank6~bank1),其中bank1到bank3是專門給DSS使用的。剩下的3個bank可以配置為DSS,R4F TCMA,R4F TCMB,或者為BSS使用。用戶可以根據自己軟件的需要,修改各個模塊使用L3 RAM的大小。默認代碼下所有共享的3個L3 bank都是給DSS使用的。本次測試示例修改了其中一個共享的L3 RAM bank(128KB)給MSS的TCMA使用。

圖1  IWR1642/AWR1642 L3 RAM

 

       在mmWave SDK 2.1里面提供了一個方便更改L3 RAM map的接口,環境變量MMWAVE_SDK_SHMEM_ALLOC。但是在某些情況可能僅僅修改這個環境變量還不充足。下面步驟里有具體說明。

 

MMWAVE_SDK_SHMEM_ALLOC

Bit

31~24

23~16

15~8

7~0

含義

分配給BSS使用的L3 RAM bank數量

分配給MSS TCMB使用的L3 RAM bank數量

分配給MSS TCMA使用的L3 RAM bank數量

分配給DSS使用的L3 RAM bank數量(包含DSS專用的bank數)

表1環境變量MMWAVE_SDK_SHMEM_ALLOC的定義

 

       步驟一:以本次測試示例為例,需要修改C: immwave_sdk_02_01_00_04packages icommonmmwave_sdk_xwr16xx.mak里環境變量MMWAVE_SDK_SHMEM_ALLOC的定義。但是里面并沒有本次測試需要的增加一個bank給MSS TCMA的代碼,所以需要添加相關代碼。因為一個bank給MSS TCMA,所以MMWAVE_SDK_SHMEM_ALLOC 的bit[15:8]=1,bit[15:8]=5。例如下面黃底加粗部分代碼。

MMWAVE_SDK_SHMEM_ALLOC=0x00000105

ifeq ("$(MMWAVE_SDK_SHMEM_ALLOC)", "")

SHMEM_ALLOC = 0x00000006                         # default case

MMWAVE_L3RAM_NUM_BANK = 6

MMWAVE_SHMEM_TCMA_NUM_BANK = 0

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00000006) # default case

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 6

MMWAVE_SHMEM_TCMA_NUM_BANK = 0

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00000105) # more MSS TCMA

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 5

MMWAVE_SHMEM_TCMA_NUM_BANK = 1

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00000204) # scenario where more MSS code space is needed

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 4

MMWAVE_SHMEM_TCMA_NUM_BANK = 2

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00010005) # scenario where more MSS .bss space is needed

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 5

MMWAVE_SHMEM_TCMA_NUM_BANK = 0

MMWAVE_SHMEM_TCMB_NUM_BANK = 1

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00010104) # scenario where more MSS code and MSS .bss space is needed

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 4

MMWAVE_SHMEM_TCMA_NUM_BANK = 1

MMWAVE_SHMEM_TCMB_NUM_BANK = 1

else

$(error Invalid SHMEM_ALLOC setting! Please check the environment variable MMWAVE_SDK_SHMEM_ALLOC.)

endif

       修改了MMWAVE_SDK_SHMEM_ALLOC的定義,在代碼里面有三處相關代碼會連動修改。

1. 一個是link文件里對L3段大小的定義,以本例子為例,是C: immwave_sdk_02_01_00_04packages iplatformxwr16xx目錄下的cmd文件。

r4f_linker.cmd

PROG_RAM (RX) : origin=0x00000100 length=0x0003FF00+(MMWAVE_SHMEM_TCMA_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例修改后length=0x0005FF00

   DATA_RAM (RW) : origin=0x08000000 length=0x00030000+(MMWAVE_SHMEM_TCMB_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例修改后length=0x00030000

L3_RAM (RW)   : origin=0x51000000 length=MMWAVE_L3RAM_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例修改后length=0xA0000

注意:為了驗證測試,在測試代碼中單獨把擴展出來的一塊分出來,便于測試代碼加入。在實際應用的代碼里面不需要對r4f_linker.cmd文件做修改。

r4f_linker.cmd修改為:

MEMORY{

   …

   PROG_RAM (RX) : origin=0x00000100 length=0x0003FF00

   PROG_RAM2 (RX): origin=0x00040000 length=0x0001FFFF

   …

}

SECTIONS{

   …  

   my_section : {} > PROG_RAM2

}

 

c674x_linker.cmd

#define MMWAVE_L3RAM_SIZE (MMWAVE_L3RAM_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例MMWAVE_L3RAM_SIZE 值為0xA0000

MEMORY

{

PAGE 0:

   L3SRAM:         o = 0x20000000, l = MMWAVE_L3RAM_SIZE

PAGE 1:

   L3SRAM:         o = 0x20000000, l = MMWAVE_L3RAM_SIZE

}

 

2.  一個是sys_common頭文件里和L3, TCMA and TCMB 大小的相關定義。以本文為例是C: immwave_sdk_02_01_00_04packages icommonsys_common_xwr16xx_mss.h文件。相關內如如下。

#define SOC_XWR16XX_MSS_SHMEM_TCMA_NUM_BANK         MMWAVE_SHMEM_TCMA_NUM_BANK

#define SOC_XWR16XX_MSS_SHMEM_TCMA_SIZE             MMWAVE_SHMEM_TCMA_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE          

#define SOC_XWR16XX_MSS_TCMA_SIZE                   MMWAVE_SHMEM_TCMA_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE+0x40000U  

 

#define SOC_XWR16XX_MSS_SHMEM_TCMB_NUM_BANK         MMWAVE_SHMEM_TCMB_NUM_BANK

#define SOC_XWR16XX_MSS_SHMEM_TCMB_SIZE             MMWAVE_SHMEM_TCMB_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE          

#define SOC_XWR16XX_MSS_TCMB_SIZE                   MMWAVE_SHMEM_TCMB_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE+0x30000U  

 

#define SOC_XWR16XX_MSS_L3RAM_NUM_BANK               MMWAVE_L3RAM_NUM_BANK

#define SOC_XWR16XX_MSS_L3RAM_SIZE                   MMWAVE_L3RAM_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE

 

3. 第三個是在ccsdebug和mmw demo的makefile文件里的相關定義。

C: immwave_sdk_02_01_00_04packages iutilsccsdebugmakefile

all: mssCCSDebug dssCCSDebug

            @echo 'Built the CCS Debug MSS & DSS. Preparing the metaIMAGE BIN ...'

            @$(GENERATE_metaIMAGE) $(CCS_DEBUG_BIN) $(SHMEM_ALLOC) $(CCS_DEBUG_MSS_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(CCS_DEBUG_DSS_OUT)

            @$(GENERATE_HS_metaIMAGE) $(CCS_DEBUG_SECURE_BIN) $(SHMEM_ALLOC) $(CCS_DEBUG_MSS_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(CCS_DEBUG_DSS_OUT) $(MMWAVE_SECDEV_HSIMAGE_CFG)

 

C: immwave_sdk_02_01_00_04packages idemoxwr16xxmmwmakefile mmwDemo: mssDemo dssDemo

            @$(GENERATE_metaIMAGE) $(MMW_DEMO_BIN) $(SHMEM_ALLOC) $(MSS_MMW_DEMO_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(DSS_MMW_DEMO_OUT)

            @$(GENERATE_HS_metaIMAGE) $(MMW_DEMO_SECURE_BIN) $(SHMEM_ALLOC) $(MSS_MMW_DEMO_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(DSS_MMW_DEMO_OUT) $(MMWAVE_SECDEV_HSIMAGE_CFG)

 

       步驟二:特別需要注意的是,SOC驅動里的SOC_deviceInit代碼使用了sys_common_xwr16xx_mss.h里和L3 RAM大小相關的定義。因為這些定義的值改變了,所以這個SOC驅動要重新編譯。驅動路徑是C: immwave_sdk_02_01_00_04packages idriverssoc。編譯驅動的流程,請參考mmwave_sdk_user_guide.pdfd 4. 5. 4. 1. Building drivers/control/alg components章節。SOC驅動的重新編譯必須在mmw demo和ccs debug工程編譯之前。

 

       步驟三:在mmw demo里面添加測試代碼并測試運行。

  1. 測試代碼添加在mss_main.c里。

#pragma CODE_SECTION (my_delay , "my_section")

void my_delay()

{

   int i;

                for (i=0;i<0x100;)

                                {

           i++;

                }

                System_printf ("Debug: delay done! Increase MSS TCMA ");

}

 

int main (void)

{

   Task_create(MmwDemo_mssInitTask, &taskParams, NULL);

 

   //add for test

   my_delay();

 

  

   BIOS_start();

return 0;

}

  1. 在soc驅動重新編譯后,重新編譯mmw demo(make clean;make all)。在map文件里面可以看到已經有代碼分配到了擴展出來的TCMA區域了。

MEMORY CONFIGURATION

 

         name             origin         length       used         unused     attr   fill

---------------------- --------           ---------      --------      --------      ---- --------

VECTORS               00000000   00000100 0000003c 000000c4           X

PROG_RAM         00000100   0003ff00  00016128 00029dd8 R     X

PROG_RAM2       00040000   0001ffff    0000004a 0001ffb5    R    X

  1. 將生成的bin文件燒錄到flash上運行,mmw demo可正常運行。

 

     步驟四:在CCS下查看在擴展的TCMA中添加的代碼輸出的打印信息。

  1. 在SOC驅動重新編譯后,重新編譯ccs debug代碼(make clean;make all)。

  2. 將重新編譯生成的ccsdebug.bin燒寫到AWR1642BOOST的QSPI flash上。

  3. 然后斷電,修改SOP設置,連上仿真器。分別在MSS/DSS下載之前編譯好的mmw demo的可執行文件。分別運行MMS/DSS。在CCS的輸出串口可以看到下面的打印信息。標黃部分說明在擴展的TCMA上的代碼正確運行了,也就是一個L3 RAM bank已經成功的分配給了MSS TCMA。

[Cortex_R4_0] **********************************************

Debug: Launching the Millimeter Wave Demo

**********************************************

Debug: delay done! Increase MSS TCMA

Debug: MMWDemoMSS Launched the Initialization Task

Debug: MMWDemoMSS mmWave Control Initialization was successful

[C674X_0] Debug: MMWDemoDSS mmWave Control Initialization succeeded

[Cortex_R4_0] Debug: CLI is operational

[C674X_0] Debug: MMWDemoDSS Data Path init succeeded

Debug: MMWDemoDSS initTask exit

  1. 之后連上mmwave visualizer,下載chirp配置命令,demo正常運行。

[Cortex_R4_0] Sensor has been stopped

Debug: MMWDemoMSS Received CLI sensorStart Event

[C674X_0] Heap L2_Heap : size 49152 (0xc000), free 47104 (0xb800)

Heap L1 : size 16384 (0x4000), free 4096 (0x1000)

Heap L2 : size 49152 (0xc000), free 35592 (0x8b08)

Heap L3 : size 655360 (0xa0000), free 507904 (0x7c000)

 

       綜合上面步驟三和步驟四的信息,可以證明修改L3 RAM的分布成功!如果用戶還有不同的L3 RAM的分配,參考上的流程修改即可。

 

后話

       實際修改L3 RAM的分布是需要修改SHMEMBANKSEL7TO4寄存器的。該寄存器每8個bit控制一個bank,0x1 : DSS 0x2 : MSS TCMA 0x4 : MSS TCMB 0x10: BSS TCMA。每個bank能夠配置的使用者略有不同,具體信息請參考xWR1642 TRM里該寄存器的解釋。但在上面測試的步驟里面并沒有添加修改SHMEMBANKSEL7TO4

的代碼。原因是在生成xWR1642的image的時候,會有相應L3 RAM分布信息輸入,在image里面就包含了L3 RAM的配置信息。這樣ROM code在啟動時候就會根據image里L3 RAM的配置信息設置好相關的寄存器,用戶不需要在添加代碼來修改SHMEMBANKSEL7TO4寄存器了。

       下面是運行修改后代碼在CCS下讀取到的SHMEMBANKSEL7TO4寄存器的值。可以看到bank 7為BSS所使用。Bank 6為MSS TCMA使用。Bank 5/4為DSS所使用,和測試預想的一致。

 

圖2 運行測試代碼后SHMEMBANKSEL7TO4寄存器值

 

補充:

對于修改r4f的memory,還有一點需要考慮的是r4f的mpu配置。SDK代碼里面mpu的配置在C: immwave_sdk_02_01_00_04packages idriverssocplatformsoc_xwr16xx_mss.c文件的SOC_mpu_config()函數里。默認定義DOWNLOAD_FROM_CCS變量時,TCMA配置為可讀寫,可執行,不緩存,配置大小為512KB。所以在上面的例子里,TCMA的大小從256KB,加大到256KB+128KB,大小仍然小于512KB。所以mpu的配置不需要做修改。但是如果用戶是增加了TCMB的大小,默認TCMB配置為256KB(實際192KB),但增加128KB后,TCMB的大小就變成了320KB,就大于256KB了,這時候就需要修改相關的mpu配置。另外,TCMB默認的mpu配置為不可執行,是不可以放代碼,只能放數據。如果用戶需要在TCMB上既放代碼又放數據,要修改mpu為可執行即可。下面是加大TCMB大小并修改為可執行的一個例子。

#if ((SOC_XWR16XX_MSS_TCMB_base_ADDRESS & (256U * ONE_KB - 1)) != 0)

#error SOC_XWR16XX_MSS_TCMB_base_ADDRESS not aligned to 256 KB

#endif

    _mpuSetRegion_(mpuREGION3);

   _mpuSetRegionbaseAddress_(SOC_XWR16XX_MSS_TCMB_base_ADDRESS);

    _mpuSetRegionTypeAndPermission_(MPU_NORMAL_OINC_NONSHARED, MPU_PRIV_RW_USER_RW_EXEC);

      _mpuSetRegionSizeRegister_(mpuREGION_ENABLE | MPU_512_KB);


參考文獻:

  1. mmwave_sdk_02_01_00_04docsmmwave_sdk_user_guide.pdf

  2. mmwave_sdk_02_01_00_04packagesscriptsImageCreatorImage_Creator_User_Guide.pdf

  3. AWR16xx/14xx Technical Reference Manual

  4. https://e2e.ti.com/support/sensors/f/1023/t/732843

下一篇: PLC、DCS、FCS三大控

上一篇: MSP430G2755 Main Mem

推薦產品

更多
主站蜘蛛池模板: 一区二区精品 | 欧美一区二区在线看 | 国产成人高清成人av片在线看 | 久久综合久色欧美综合狠狠 | 中文字幕欧美日韩一区 | 一级欧美 | 草久久免费视频 | 欧美aaaa视频 | 欧美性猛交一区二区三区精品 | 久久久精品欧美 | 91精品国产一区二区三区 | 青春草91 | 第一区在线观看免费国语入口 | 久久伊人免费视频 | 99久久99久久精品国产片果冰 | 狠狠干2020| 国产资源视频 | 超碰3| 一级毛片免费看 | 超碰人人艹 | 亚洲中午字幕 | 国产精品精品久久久 | 嫩草视频在线 | 成人毛片视频在线播放 | 中文字幕亚洲视频 | 成人黄色网址大全 | 成人免费在线观看 | 成人福利电影 | 国产日韩精品在线 | 精品久久久久久久久久久久久 | 日韩成人在线播放 | 国产乱码精品一区二区三区忘忧草 | 久久久国产一区 | 一区二区三区视频 | 中文字幕日韩欧美 | 日韩中文字幕一区二区 | 日韩精品人成在线播放 | 日韩国产中文字幕 | 免费一级黄色录像 | 精品久久久久一区二区国产 | 色偷偷人人澡人人爽人人模 |