利用GEL語言對dsp初始化設(shè)置
2013/10/9 15:21:48
GEL 文件的功能同emuinit.cmd 的功能基本相同,用于初始化DSP。但它的功能比emuinit的功能有所增強,GEL 在CCS 下有一個菜單,可以根據(jù)DSP 的對象不同,設(shè)置不同的初始化程序。以TMS320LF2407 為例:
#define SCSR1 0x7018 ;定義scsr1 寄存器
#define SCSR2 0X7019 ;定義scsr2 寄存器 #defineWDKEY 0x7025 ;定義wdkey 寄存器
#defineWDNTR 0x7029 ;定義wdntr 寄存器
StartUp() ; 開始函數(shù)
{
GEL_MapReset(); ; 存儲空間復(fù)位GEL_MapAdd(0x0000,0,0x7fff,1,1); 定義程序空間從0000
-7fff 可讀寫
GEL_MapAdd(0x8000,0,0x7000,1,1); 定義程序空間從8000-f000 可讀寫
GEL_MapAdd(0x0000,1,0x10000,1,1); 定義數(shù)據(jù)空間從0000-10000 可讀寫
GEL_MapAdd(0xffff,2,1,1,1); 定義i/o 空間0xffff 可讀寫
GEL_MapOn(); 存儲空間打開
GEL_MemoryFill(0xffff,2,1,0x40); 在i/o 空間添入數(shù)值40h
*(int *)SCSR1=0x0200; 給scsr1 寄存器賦值
*(int *)SCSR2=0x000C; 給scsr2 寄存器賦值,在這里可以進行mp/mc 方式的轉(zhuǎn)換
*(int *)WDNTR=0x006f; 給wdntr 寄存器賦值
*(int *)WDKEY=0x055; 給wdkey 寄存器賦值
*(int *)WDKEY=0x0AA; 給wdkey 寄存器賦值
}
GEL文件只是在仿真器和目標系統(tǒng)上電的時候起到初始化dsp的作用
在上電后再改變GEL文件將不會對DSP產(chǎn)生影響
除非斷電后再上電
貼上DSP5416的GEL文件
/* set PMST to: MP = OVLY = 1; DROM off, CLKOUT on */
#define PMST_VAL 0x0ffe0u
/* set wait-state control reg for: 2 w/s or more on i/o; one for ext memory */
#define SWWSR_VAL 0x2009u
/* set external-banks switch control for: no bank switching; BH set */
#define BSCR_VAL 0x02u
/* Set Default Reset Initialization Value */
#define ZEROS 0x0000u
這一部分是對寄存器初始化
/* Set Peripheral Control Register Addresses for DEV_RESET */
#define DMPREC 0x0054u
#define DMSA 0x0055u
#define DMSDI 0x0056u
#define DMA_CH0_DMFSC_SUB_ADDR 0x0003u
#define DMA_CH1_DMFSC_SUB_ADDR 0x0008u
#define DMA_CH2_DMFSC_SUB_ADDR 0x000Du
#define DMA_CH3_DMFSC_SUB_ADDR 0x0012u
#define DMA_CH4_DMFSC_SUB_ADDR 0x0017u
#define DMA_CH5_DMFSC_SUB_ADDR 0x001cu
#define MCBSP0_SPSA 0x0038u
#define MCBSP0_SPSD 0x0039u
#define MCBSP1_SPSA 0x0048u
#define MCBSP1_SPSD 0x0049u
#define MCBSP2_SPSA 0x0034u
#define MCBSP2_SPSD 0x0035u
#define MCBSP_SPCR1_SUB_ADDR 0x0000u
#define MCBSP_SPCR2_SUB_ADDR 0x0001u
#define MCBSP_SRGR1_SUB_ADDR 0x0006u
#define MCBSP_SRGR2_SUB_ADDR 0x0007u
#define MCBSP_MCR1_SUB_ADDR 0x0008u
#define MCBSP_MCR2_SUB_ADDR 0x0009u
#define SRGR1_INIT 0x0001u
#define PRD0 0x0025u
#define TCR0 0x0026u
#define PRD1 0x0031u
#define TCR1 0x0032u
#define TIMER_STOP 0x0010u
#define TIMER_RESET 0x0020u
#define PRD_DEFAULT 0xFFFFu
#define GPIOCR 0x0010u
StartUp()
{
C5416_Init();
GEL_TextOut("Gel StartUp complete.\n");
}
menuitem "C5416_Configuration";
hotmenu CPU_Reset()
{
GEL_Reset();
PMST = PMST_VAL;
/* don't change the wait states, let the application code handle it */
/* note: at power up all wait states will be the maximum (7) */
/* SWWSR = SWWSR_VAL; */
BSCR = BSCR_VAL;
GEL_TextOut("CPU Reset Complete.\n");
}
/* All memory maps are based on the PMST value of 0xFFE8 */
hotmenu C5416_Init()
{
GEL_Reset();
PMST = PMST_VAL;
/* don't change the wait states, let the application code handle it */
/* note: at power up all wait states will be the maximum (7) */
/* SWWSR = SWWSR_VAL; */
BSCR = BSCR_VAL;
C5416_Periph_Reset();
GEL_XMDef(0,0x1eu,1,0x8000u,0x7f);
GEL_XMOn();
GEL_MapOn();
GEL_MapReset();
GEL_MapAdd(0x80u,0,0x7F80u,1,1); /* DARAM */
GEL_MapAdd(0x08000u,0,0x8000u,1,1); /* External */
GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* DARAM */
GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* SARAM */
GEL_MapAdd(0x28000u,0,0x8000u,1,1); /* SARAM */
GEL_MapAdd(0x0u,1,0x60u,1,1); /* MMRs */
GEL_MapAdd(0x60u,1,0x7FA0u,1,1); /* DARAM */
GEL_MapAdd(0x08000u,1,0x8000u,1,1); /* DARAM */
GEL_TextOut("C5416_Init Complete.\n"); }
/* ****************************** */
C5416_Periph_Reset()
{
IFR = 0xFFFFu;
IFR = 0x0000u;
DMA_Reset();
MCBSP0_Reset();
MCBSP1_Reset();
MCBSP2_Reset();
TIMER0_Reset();
GPIO_Reset();
}
DMA_Reset()
MCBSP0_Reset()
MCBSP1_Reset()
MCBSP2_Reset()
TIMER0_Reset()
GPIO_Reset()
在上面的各個初始化函數(shù)中,多半是把0值付給寄存器。當(dāng)然這些初始化值如果用戶不使用的話必須在主程序中做修改。
所以加載了GEL文件以后,并不一定所有的寄存器都是復(fù)位值,主程序中沒有賦值的寄存器并不一定就是它的上電復(fù)位值,因為加上了仿真器,加載了GEL文件,起到了作用。
#define SCSR1 0x7018 ;定義scsr1 寄存器
#define SCSR2 0X7019 ;定義scsr2 寄存器 #defineWDKEY 0x7025 ;定義wdkey 寄存器
#defineWDNTR 0x7029 ;定義wdntr 寄存器
StartUp() ; 開始函數(shù)
{
GEL_MapReset(); ; 存儲空間復(fù)位GEL_MapAdd(0x0000,0,0x7fff,1,1); 定義程序空間從0000
-7fff 可讀寫
GEL_MapAdd(0x8000,0,0x7000,1,1); 定義程序空間從8000-f000 可讀寫
GEL_MapAdd(0x0000,1,0x10000,1,1); 定義數(shù)據(jù)空間從0000-10000 可讀寫
GEL_MapAdd(0xffff,2,1,1,1); 定義i/o 空間0xffff 可讀寫
GEL_MapOn(); 存儲空間打開
GEL_MemoryFill(0xffff,2,1,0x40); 在i/o 空間添入數(shù)值40h
*(int *)SCSR1=0x0200; 給scsr1 寄存器賦值
*(int *)SCSR2=0x000C; 給scsr2 寄存器賦值,在這里可以進行mp/mc 方式的轉(zhuǎn)換
*(int *)WDNTR=0x006f; 給wdntr 寄存器賦值
*(int *)WDKEY=0x055; 給wdkey 寄存器賦值
*(int *)WDKEY=0x0AA; 給wdkey 寄存器賦值
}
GEL文件只是在仿真器和目標系統(tǒng)上電的時候起到初始化dsp的作用
在上電后再改變GEL文件將不會對DSP產(chǎn)生影響
除非斷電后再上電
貼上DSP5416的GEL文件
/* set PMST to: MP = OVLY = 1; DROM off, CLKOUT on */
#define PMST_VAL 0x0ffe0u
/* set wait-state control reg for: 2 w/s or more on i/o; one for ext memory */
#define SWWSR_VAL 0x2009u
/* set external-banks switch control for: no bank switching; BH set */
#define BSCR_VAL 0x02u
/* Set Default Reset Initialization Value */
#define ZEROS 0x0000u
這一部分是對寄存器初始化
/* Set Peripheral Control Register Addresses for DEV_RESET */
#define DMPREC 0x0054u
#define DMSA 0x0055u
#define DMSDI 0x0056u
#define DMA_CH0_DMFSC_SUB_ADDR 0x0003u
#define DMA_CH1_DMFSC_SUB_ADDR 0x0008u
#define DMA_CH2_DMFSC_SUB_ADDR 0x000Du
#define DMA_CH3_DMFSC_SUB_ADDR 0x0012u
#define DMA_CH4_DMFSC_SUB_ADDR 0x0017u
#define DMA_CH5_DMFSC_SUB_ADDR 0x001cu
#define MCBSP0_SPSA 0x0038u
#define MCBSP0_SPSD 0x0039u
#define MCBSP1_SPSA 0x0048u
#define MCBSP1_SPSD 0x0049u
#define MCBSP2_SPSA 0x0034u
#define MCBSP2_SPSD 0x0035u
#define MCBSP_SPCR1_SUB_ADDR 0x0000u
#define MCBSP_SPCR2_SUB_ADDR 0x0001u
#define MCBSP_SRGR1_SUB_ADDR 0x0006u
#define MCBSP_SRGR2_SUB_ADDR 0x0007u
#define MCBSP_MCR1_SUB_ADDR 0x0008u
#define MCBSP_MCR2_SUB_ADDR 0x0009u
#define SRGR1_INIT 0x0001u
#define PRD0 0x0025u
#define TCR0 0x0026u
#define PRD1 0x0031u
#define TCR1 0x0032u
#define TIMER_STOP 0x0010u
#define TIMER_RESET 0x0020u
#define PRD_DEFAULT 0xFFFFu
#define GPIOCR 0x0010u
StartUp()
{
C5416_Init();
GEL_TextOut("Gel StartUp complete.\n");
}
menuitem "C5416_Configuration";
hotmenu CPU_Reset()
{
GEL_Reset();
PMST = PMST_VAL;
/* don't change the wait states, let the application code handle it */
/* note: at power up all wait states will be the maximum (7) */
/* SWWSR = SWWSR_VAL; */
BSCR = BSCR_VAL;
GEL_TextOut("CPU Reset Complete.\n");
}
/* All memory maps are based on the PMST value of 0xFFE8 */
hotmenu C5416_Init()
{
GEL_Reset();
PMST = PMST_VAL;
/* don't change the wait states, let the application code handle it */
/* note: at power up all wait states will be the maximum (7) */
/* SWWSR = SWWSR_VAL; */
BSCR = BSCR_VAL;
C5416_Periph_Reset();
GEL_XMDef(0,0x1eu,1,0x8000u,0x7f);
GEL_XMOn();
GEL_MapOn();
GEL_MapReset();
GEL_MapAdd(0x80u,0,0x7F80u,1,1); /* DARAM */
GEL_MapAdd(0x08000u,0,0x8000u,1,1); /* External */
GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* DARAM */
GEL_MapAdd(0x18000u,0,0x8000u,1,1); /* SARAM */
GEL_MapAdd(0x28000u,0,0x8000u,1,1); /* SARAM */
GEL_MapAdd(0x0u,1,0x60u,1,1); /* MMRs */
GEL_MapAdd(0x60u,1,0x7FA0u,1,1); /* DARAM */
GEL_MapAdd(0x08000u,1,0x8000u,1,1); /* DARAM */
GEL_TextOut("C5416_Init Complete.\n"); }
/* ****************************** */
C5416_Periph_Reset()
{
IFR = 0xFFFFu;
IFR = 0x0000u;
DMA_Reset();
MCBSP0_Reset();
MCBSP1_Reset();
MCBSP2_Reset();
TIMER0_Reset();
GPIO_Reset();
}
DMA_Reset()
MCBSP0_Reset()
MCBSP1_Reset()
MCBSP2_Reset()
TIMER0_Reset()
GPIO_Reset()
在上面的各個初始化函數(shù)中,多半是把0值付給寄存器。當(dāng)然這些初始化值如果用戶不使用的話必須在主程序中做修改。
所以加載了GEL文件以后,并不一定所有的寄存器都是復(fù)位值,主程序中沒有賦值的寄存器并不一定就是它的上電復(fù)位值,因為加上了仿真器,加載了GEL文件,起到了作用。
提交
查看更多評論
其他資訊
2025中歐綠色建筑工業(yè)化論壇9月北京啟幕 全球智慧共推建筑產(chǎn)業(yè)“雙碳”轉(zhuǎn)型
喜訊!華強電子網(wǎng)榮獲“2025年中國產(chǎn)業(yè)互聯(lián)網(wǎng)創(chuàng)新企業(yè)”
深入實施“人工智能+”行動 浪潮軟件集團看好人工智能+工業(yè)質(zhì)檢廣闊前景,持續(xù)布局線纜行業(yè)智能質(zhì)檢
海爾新增2家卓越級智能工廠,總數(shù)品類行業(yè)雙第一
深度剖析格力打破磁懸浮壓縮機國外壟斷,底氣來自對自主創(chuàng)新的堅守!

投訴建議