TMS320C6748开发视频教程笔记 第4章 存储空间

4-存储空间

  • 4.1 存储器类型
  • 4.2 TMS320C6748 内存映射
  • 4.3 使用读写内存的方式配置寄存器

视频地址:TMS320C6748开发视频教程笔记 4-存储空间

4.1 存储器类型

TMS320C6748开发视频教程笔记 第4章 存储空间_第1张图片

TMS320C6748开发视频教程笔记 第4章 存储空间_第2张图片

TMS320C6748开发视频教程笔记 第4章 存储空间_第3张图片
TMS320C6748开发视频教程笔记 第4章 存储空间_第4张图片

RAM ROM FLASH
SRAM:静态随机存储器,相比DRAM(动态随机存储器)不需要刷新就可以保存数据 PROM:早期的,可编程只读存储器 NOR FLASH:支持使用地址的方式在NOR FLASH中读取,读取速率比较快,写入速率比较慢,容量比较小,几MB
DRAM:动态随机存储器,需要定期刷新才能存储数据 EPROM:可擦除可编程只读存储器 NAND FLASH:读写速度相对非常快,容量大很多,几百MB,上GB容量
SDRAM:同步动态随机存储器,现在用的比较少 EEPROM:电可擦除可编程只读存储器(可进行多次擦写),容量比较小,一般只放置bootloader引导文件 eMMC:并不是一种存储器,内部由NAND FLASH和相关控制IC组成,把整个存储器封装成标准的MMC接口,这样可以使用标准接口管理内部存储的数据,几GB到几十GB不等
DDR SDRAM:双倍速率,在一个时钟的上升沿和下降沿都可以存储速率,速率是SDRAM的2倍,DDR1600实际工作频率800M,TMSC6748支持DDR2,最大支持256M

4.2 TMS320C6748 内存映射

TMS320C6748开发视频教程笔记 第4章 存储空间_第5张图片
TMS320C6748开发视频教程笔记 第4章 存储空间_第6张图片
TMS320C6748开发视频教程笔记 第4章 存储空间_第7张图片
框图所在文件:TMS320C6748 DSP Technical Reference Manual
TMS320C6748开发视频教程笔记 第4章 存储空间_第8张图片
L1 Pgm:32KB,程序缓存
L1 RAM:32KB,数据缓存
L2 RAM:256KB
这三部分都存在CPU内部,运行速度和CPU主频一致。
TMS320C6748开发视频教程笔记 第4章 存储空间_第9张图片
框图所在文件:广州创龙电子翻译的:TMS320C6748 DSP 技术参考手册 (Rev. A)-1 概述

  在TMS320C6748内部对所有的内存和外设是统一编址的,对所有设备的访问通过一个32位地址访问,最大寻址空间2的32次方,4GB。在个人电脑中也是4GB,但需要为一些硬件(集成显卡等)保留一部分空间,一般3.2G到3.8G。电脑中使用了PAE扩展技术,变成36位地址,最大寻址64G。
TMS320C6748开发视频教程笔记 第4章 存储空间_第10张图片
灰色区域表示该设备无法访问,白色表示可访问
  DSP L2 ROM:1024KB,不能存储任何自己的应用程序代码,存储DSP启动过程中需要的bootloader程序,完成对外设的初始化,加载自己的应用程序。AISgen工具中对DSP的配置,实际就是调用的L2 ROM中的函数。该部分还可以存储TI烧写进去的一些算法。
寄存器分为:通用寄存器、专用寄存器、控制寄存器。
控制寄存器:像一些开关来控制DSP硬件中的一些参数。
TMS320C6748开发视频教程笔记 第4章 存储空间_第11张图片
  在处于低地址DSP内部的存储空间只能DSP访问,TI同时把这一部分存储空间映射到高地址的存储空间,这部分空间同时可以被大部分外设访问,一般把我们的代码放在高地址的存储空间。
TMS320C6748开发视频教程笔记 第4章 存储空间_第12张图片
LCD控制器的内存映射只可以访问DDR2\mDDR。
表格所在文件:TMS320C6748™ Fixed- and Floating-Point datasheet DSP (Rev. G)
TMS320C6748 定点与浮点数字信号处理器 (Rev. F)

PRU:简单的32位精简指令集的CPU
参考:PRU 开发详解

  地址映射:将CPU内部的存储空间和寄存器以一个全局地址方式来操作。对CPU内部的RAM和ROM来说,是一个实实在在的物理存储空间,寄存器实际上是一个逻辑上的存储空间。统一编址的好处是对所有空间的访问都可以以访问内存的方式来访问,方便了很多。
由于TMS320C6748内部没有可以供用户使用的ROM或FLASH存储空间,所有无法将用户的代码存在CPU内部,只能存储在外挂的NOR FLASH、NAND FLASH、SD卡或通过串口、SPI等接口从其他处理器或PC上接收程序数据,这样的话只需要关心内部的RAM,在默认情况下DSP的L1和L2配置为缓存进行使用的。CPU的L2 RAM默认配置为程序RAM来使用,可以把程序代码放在RAM中运行,也可以放在内部总线上的128KB共享内存中使用。如果程序比较大,可以把程序方在DDR2中使用,可以把256KB的L2 RAM配置为缓存,提高对低速外设的存储速度。

4.3 使用读写内存的方式配置寄存器

TMS320C6748开发视频教程笔记 第4章 存储空间_第13张图片
CCS工程
main.c

int main(void) 
{
    // 1、将LED所在引脚配置为GPIO口
	// 01C1 4124h  PINMUX1  Pin Multiplexing Control 1  Register Privileged mode   Section 10.5.9.2
	// 01C1 4124h  PINMUX1  引脚复用控制寄存器1  特权模式  Section 10.5.9.2
	// 复用为GP0[0] GP0[1] GP0[2] GP0[5]
	*(volatile unsigned int *)(0x01C14124) = 0x88800800;
	// 2、将LED所在的GPIO口配置为输出状态
	// 0x01E26000  0x01E26FFF  4K  GPIO
	// 10h  DIR01  GPIO Banks 0 and 1 Direction Register  Section 19.3.3
	// 10h  DIR01  GPIO Banks 0和1方向寄存器  第19.3.3节
	// 配置0x01E26010为:1111 1111 1111 1111 1111 1111 1101 1000
	// 即:GP0[0] GP0[1] GP0[2] GP0[5]为输出
    // &= 把固定几位置0,其他位不变
	*(volatile unsigned int *)(0x01E26000 + 0x10) &= 0xFFFFFFD8;
	// 3、向LED所在的GPIO口写1,即输出电平拉高
	// 14h  OUT_DATA01  GPIO Banks 0 and 1 Output Data Register  Section 19.3.4
	// 14h  OUT_DATA01  GPIO Banks 0和1输出数据寄存器  第19.3.4节
	// 配置:0x01E26014为:0000 0000 0000 0000 0000 0000 0010 0111
	// 即:GP0[0] GP0[1] GP0[2] GP0[5]为高电平
	// |= 把固定几位置1,其他位不变
	*(volatile unsigned int *)(0x01E26000 + 0x14) |= 0x00000027;

	return 0;
}

volatile关键字作用:要求程序每次需要从寄存器实时读取寄存器的值。

c = 1;
c = 2;
c = 3;

这段代码最终结果是c = 3,如果不使用volatile声明c,编译出的程序默认会使c = 3,会忽略c = 1;c = 2;这两句代码,对于普通变量没有问题,但对变量地址是寄存器来说会有问题,对寄存器来说是实实在在的外设模块,该值有可能不是程序修改的,有可能是被外设模块或其他模块来修改,如果不是实时从寄存器读取值,该值被其他模块修改但是程序不知道,可能会带来灾难性的后果,所以需要实时读取寄存器的值。

你可能感兴趣的:(DSP学习)