ADSP-21489的开发详解:VDSP+自己编程写代码开发(5-SDRAM 内存的硬件设计和软件例程)(含源代码)
硬件准备
ADSP-21489EVB:ADI 21489处理器的开发板
AD-HP530ICE:ADI DSP专用仿真器
USBi:ADI SigmaDSP和SHARC DSP的图形化编程调试器
软件准备:
Visual DSP++
CCES
SigmaStudio
硬件链接示意图
硬件设计原理图
通过对 SDRAM 写入测试数据,读出校验,判断 SDRAM 内存的工作情况。
将 SDRAM 自检工程拖到 VDSP 中,编译,运行。
运行代码,等代码跑完后,可以从内存数据窗口中看到写入的数据。
输入一个地址:0x200000,数据如下:
程序源码
#include <cdef21489.h>
#include <def21489.h>
#define SDRAM_START 0x0200000 // start address of SDRAM
#define SDRAM_SIZE 0x00800000 // size of SDRAM in 32-bit words. (i.e. 4M x 32)
#define SDMODIFY (BIT_17)
void InitPLL(void)
{
int n;
*pPMCTL = (PLLM16|PLLD4|DIVEN);
n = *pPMCTL;
n |= PLLBP;
n ^= DIVEN;
*pPMCTL = n;
for(n = 0; n < 10000; n++ )
{asm("nop;");
}*pPMCTL ^= PLLBP;
}
void InitSDRAM(void)
{
int nValue = 0;
*pSYSCTL |= MSEN;
// Mapping Bank 0 to SDRAM
*pEPCTL |= B0SD;
*pEPCTL &= (~(B1SD|B2SD|B3SD));
*pSDRRC = 0x4D8;
*pSDRRC|= SDROPT | BIT_17; // Enabling SDRAM read optimization// Setting the Modify to 1// Programming SDRAM control register
*pSDCTL = (SDCL3|SDTRAS7|SDTRP3|SDCAW9|SDPSS|SDTWR2|SDTRCD3|SDRAW13|X16DE);
}
main(void)
{
int bPassed = 0;
InitPLL();
InitSDRAM();
bPassed = TEST_SDRAM();
}
//
// int TEST_SDRAM(void)
//
// PURPOSE: Test the SDRAM
//
int TEST_SDRAM(void)
{
volatile unsigned int *pDst;
int nIndex = 0;
int bError = 1; // returning 1 indicates a pass, anything else is a fail
int n;
// write incrementing values to each SDRAM location
for(nIndex = 0, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++, nIndex++ )
{
*pDst = nIndex;
}
// verify incrementing values
for(nIndex = 0, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++, nIndex++ )
{
if( nIndex != *pDst )
{
bError = 0;
break;
}
}
for(nIndex = 0x12345678, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{*pDst = nIndex;
}for(nIndex = 0x12345678, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{if( nIndex != *pDst ){bError = 0;break;}
}for(nIndex = 0x87654321, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{*pDst = nIndex;
}for(nIndex = 0x87654321, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{if( nIndex != *pDst ){bError = 0;break;}
}for(nIndex = 0x01234567, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{*pDst = nIndex;
}for(nIndex = 0x01234567, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{if( nIndex != *pDst ){bError = 0;break;}
}for(nIndex = 0x76543210, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{*pDst = nIndex;
}for(nIndex = 0x76543210, pDst = (unsigned int *)SDRAM_START; pDst < (unsigned int *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{if( nIndex != *pDst ){bError = 0;break;}
}// butterfly test. Write incrementing values to beginging and end of SDRAM
volatile unsigned int *pStart = (volatile unsigned int *)SDRAM_START;
volatile unsigned int *pEnd = (volatile unsigned int *)(SDRAM_START + SDRAM_SIZE)-1;for(nIndex = 0; nIndex < (SDRAM_SIZE/2); nIndex++ )
{*pStart = nIndex;*pEnd = (SDRAM_SIZE - nIndex);pStart++;pEnd--;
}// verify butterfly test values
pStart = (volatile unsigned int *)SDRAM_START;
pEnd = (volatile unsigned int *)(SDRAM_START + SDRAM_SIZE)-1;for(nIndex = 0; nIndex < (SDRAM_SIZE/2); nIndex++ )
{if( nIndex != *pStart ){bError = 0;break;}if( (SDRAM_SIZE - nIndex) != *pEnd ){bError = 0;break;}pStart++;pEnd--;
}return bError;
}
ADSP-21489的开发详解:VDSP+自己编程写代码开发(5-SDRAM 内存的硬件设计和软件例程)(含源代码)相关推荐
- ADSP-21489的开发详解:VDSP+自己编程写代码开发(1-如何来做21489和21479的开发?简单说两句)
编者的话 经常有人问,21479 和 21489 这一类的 ADI SHARC DSP 到底应该怎么开发?我需要哪些硬件,板子用什么,仿真器用什么,会用到哪些软件?既然有这么多的问题,我索性就做一款 ...
- ADSP-21489的开发详解:VDSP+自己编程写代码开发(3-可能出现的故障和解决办法)
硬件准备 ADSP-21489EVB:ADI 21489处理器的开发板 AD-HP530ICE:ADI DSP专用仿真器 USBi:ADI SigmaDSP和SHARC DSP的图形化编程调试器 软件 ...
- ADSP-21489的开发详解:VDSP+自己编程写代码开发(7-Block-Based Talkthru 48 or 96 kHz)(含源代码)
硬件准备 ADSP-21489EVB:ADI 21489处理器的开发板 AD-HP530ICE:ADI DSP专用仿真器 USBi:ADI SigmaDSP和SHARC DSP的图形化编程调试器 软件 ...
- ADSP-21489的开发详解:VDSP+自己编程写代码开发(4-按键控制 LED 灯)(含源代码)
硬件准备 ADSP-21489EVB:ADI 21489处理器的开发板 AD-HP530ICE:ADI DSP专用仿真器 USBi:ADI SigmaDSP和SHARC DSP的图形化编程调试器 软件 ...
- ADSP-21489的开发详解:VDSP+自己编程写代码开发(8-延时算法)
硬件准备 ADSP-21489EVB:ADI 21489处理器的开发板 AD-HP530ICE:ADI DSP专用仿真器 USBi:ADI SigmaDSP和SHARC DSP的图形化编程调试器 软件 ...
- linux设备驱动开发详解源码,linux设备驱动开发详解光盘源码.rar
压缩包 : linux设备驱动开发详解光盘源码.rar 列表 19/busybox源代码/busybox-1.2.1.tar.bz2 19/MTD工具/mtd-utils-1.0.0.tar.gz 1 ...
- linux设备驱动开发详解孔夫子,Linux设备驱动开发详解
[内容简介] <Linux设备驱动开发详解(第2版)>是一本介绍linux设备驱动开发理论.框架与实例的书,<Linux设备驱动开发详解(第2版)>基于ldd6410开发板,以 ...
- java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
今天,下午在和朋友聊天的时候,聊起了反射这个话题. 我们就从下面这个段简单的代码开始吧. 这个代码输出什么,想必大部分的读者跟我一样,会很快地知道答案:0 1 2 3 4 5 6 7 8 9.事实也是 ...
- 《Linux设备驱动开发详解》虚拟机及案例代码下载
虚拟机实验环境下载(内含案例代码): 链接:https://pan.baidu.com/s/1YNvAySz-_AgZ4F8rZSMfsg 提取码:vpdt 如果仅仅想下载代码不想要庞大的虚拟机, ...
最新文章
- .substr()在字符串每个字母前面加上一个1
- python怎么new对象_Python使用__new__()方法为对象分配内存及返回对象的引用示例
- 学习OpenResty编程
- 写下thinkphp5和thinkphp3.2的不同
- Windows安装mysql8.0
- 1071svm函数 r语言_R语言机器学习之核心包e1071 - 数据分析
- bootstrap 滚动 进度条_bootstrap实现动态进度条效果
- ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”
- 两种MBR分区表恢复方法
- kf.qq.com.lol.html,英雄联盟安全信用星级,英雄联盟封号查询中心
- PyTorch模型定义和训练技巧
- 工厂模式——烘烤OO披萨
- ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+SuperL
- 中荷人寿山东省分公司开展保险消费者权益保护教育宣传周活动
- 10台世界上最快的超级计算机
- 封装一个常用的js工具类
- Windows系统安装搭建ios开发环境
- qmainwindow 背景充电_Qt 设置背景图片(背景图片可随意拉伸)
- 昆仑通泰(MCGS)官方资料
- 基于Python+django的航班查询与推荐-计算机毕业设计