专栏中心

EEPW首页 > 专栏 > 利用GEL语言对dsp初始化设置(转帖)

利用GEL语言对dsp初始化设置(转帖)

发布人:0750long 时间:2010-02-14 来源:工程师 发布文章
利用GEL语言对dsp初始化设置(转帖)

 

 

GEL 文件的功能同emuinit.cmd 的功能基本相同,用于初始化DSP。但它的功能比emuinit
的功能有所增强,GEL 在CCS 下有一个菜单,可以根据DSP 的对象不同,设置不同的初始
化程序。以TMS320LF2407 为例:
#define SCSR1 0x7018 ;定义scsr1 寄存器
#define SCSR2 0X7019 ;定义scsr2 寄存器

#defineWDKEY 0x7025 ;定义wdkey 寄存器
#defineWDNTR 0x7029 ;定义wdntr 寄存器
StartUp() ; 开始函数
{
GEL_MapReset(); ; 存储空间复位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); 定义数据空间从0000-10000 可读写
GEL_MapAdd(0xffff,2,1,1,1); 定义i/o 空间0xffff 可读写
GEL_MapOn(); 存储空间打开
GEL_MemoryFill(0xffff,2,1,0x40); 在i/o 空间添入数值40h
*(int *)SCSR1=0x0200; 给scsr1 寄存器赋值
*(int *)SCSR2=0x000C; 给scsr2 寄存器赋值,在这里可以进行mp/mc 方式的转换
*(int *)WDNTR=0x006f; 给wdntr 寄存器赋值
*(int *)WDKEY=0x055; 给wdkey 寄存器赋值
*(int *)WDKEY=0x0AA; 给wdkey 寄存器赋值

}

GEL文件只是在仿真器和目标系统上电的时候起到初始化dsp的作用

在上电后再改变GEL文件将不会对DSP产生影响

除非断电后再上电

贴上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()

在上面的各个初始化函数中,多半是把0值付给寄存器。当然这些初始化值如果用户不使用的话必须在主程序中做修改。

所以加载了GEL文件以后,并不一定所有的寄存器都是复位值,主程序中没有赋值的寄存器并不一定就是它的上电复位值,因为加上了仿真器,加载了GEL文件,起到了作用。

程序员一定要好好注意。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

模拟电路教学心得

Linux内核注释

Linux可加载模块应用

埃隆·马斯克赢得 1 万亿美元的特斯拉薪酬投票

设计基础:什么是TensorFlow?

邢慧丽因在半导体研究方面的卓越表现而获奖

英特尔支持第八届进博会:创新不息,共创AI普惠新生活

亚马逊为电子书作者推出人工智能驱动的 Kindle 翻译服务

Linux的系统调用(systemcall)

论模拟电路的人才培养之道(沙龙纪实)

融合芯片制造与智能计算 三星携手英伟达造首家AI工厂

内存很重要:嵌入式 NVM(eNVM)

网络与存储 2025-11-07

上季度欧洲半导体销售额环比增长 7.2%

Ceva NeuPro-Nano NPU支持出门问问TicHear 语音AI 为智能边缘设备实现多语言设备端智能处理能力

Linux内核编程

模拟信号处理

“中国将赢得人工智能竞赛”——英伟达黄仁勋谴责美国电价阻碍发展

模拟电子教学方法的改进

亚利桑那州州立大学柔性显示器中心开发第一个触摸屏柔性显示器

更多 培训课堂
更多 焦点
更多 视频

技术专区