DSC core V.S ARM core

DSC(Digital Signal Controller, 数字信号控制器)是一个不同于MCU,也不同于DSP的一种CORE,有点跨界的意思,不过是一个年纪比较大的core了,比较典型的应用就是MCF56F83XX系列了。

Memory Map

DSC core采用哈佛体系结构,也就是有单独的数据总线和地址总线,数据和地址单独存储,可以使用相同的地址空间,一般对于运算量比较大的数字处理,这样可以有效的提升处理速度。正是因为这个原因,DSC的内存分布分为代码空间分布和数据空间分布。对于ARM来说,V7(Cortex系列MCU)一般是冯诺伊曼的结构,而ARM V9-V11一般是哈佛结构。

代码段地址分布如下:

地址范围大小用途
0x000000 - 0x00FFFF64KW1Flash array 1
0x010000 - 0x01FFFF64KWFlash array 22
0x060000 - 0x067FFF32KWRAM
0x078000 - 0x07BFFF16KWBOOT ROM 3

数据段地址分布:

地址大小用途
0x000000 - 0x007FFF32KWProgram/Data RAM
0x008000 - 0x00BFFF16KWPrimary program/data flash(mapped from 0x00C000 - 0x00FFFF)
0x00C000 - 0x00DFFF8KWCore /system peripherals
0x00E000 - 0x00FFFF8KWslave peripherals
0x020000 - 0x03FFFF128KWPrimary program/data flash(Mapped from 0x000000 - 0x01FFFF)
0x078000 - 0x07BFFF16KWBOOT ROM/DATA ROM
0x07C000 - 0x07C3FF1KWFlash Program Buffer
0xFFFF00 - 0xFFFFFF128WEOnCE register

内存单位

在DSC中内存的最小单位是一个字,一个字是16bit(2 bytes),这个和ARM中采用Byte作为最小单位有一定的差异,同时也为代码的可移植性带来了挑战,比如在DSC的C语言中char类型就是2bytes而不是传统的1个byte,也就没有传统的uint8_t了, 曾经觉得这个没有地方会出现,没想到还真的有。

C语言编译器

因为这个是一个比较古老的core,所以提供的工具链也是一个比较古老的tool,这个core的编译器只能支持一个比较低版本的C语言,对于各种版本的C语言我也没有过多的了解,只是我发现在这个编译器下面,C语言变量的定义只能放到函数的开头,所以这个也是程序可移植的一个会出问题的地方。


  1. DSC内存是以world(16bit, 2Bytes)为单位的。
  2. 这里的两个flash array地址是可以互换的,这样就可以实现在线升级。
  3. DSC里面地址是19位的。

发表新评论