再上一篇:16.6 闪存地址重载及断点单元(FPB)
上一篇:16.7 AHB 访问端口
主页
下一篇:第17章
再下一篇:17.2 Cortex-M3 修订版0 与修订版 1 的区别
文章列表

16.8 ROM 表

《Cortex-M3 权威指南》,嵌入式处理器开发教程。

CM3的调试系统还包含了ROM表,用于自动检测在某CM3芯片中包含了哪些调试组件。尽管作为 v7-M的第一个践行者,CM3拥有一个预定义的存储器映射并且包含了标准的调试组件,但是新的 Cortex-M器件可以包含不同的调试组件,并且芯片厂商在实现CM3时也可以对调试组件加以修改。 为使调试工具能检测到调试系统中具体包含的组件,就提供了这张ROM表,它记录了NVIC和各个调 试功能块的地址。

ROM表位于0xE00F_F000。通过分析ROM表中的内容,可以计算出系统和调试组件在存储器系统 中的位置。在检测到了调试组件后,调试器可以接下来查看它们的ID寄存器,从而判定系统中哪些 组件是可用的。

在CM3的ROM表中,第一条目的内容应当是:NVIC的入口地址相对于ROM表入口地址的偏移量。 ROM表首条目的缺省值是0xFFF0F003,其中位段[1:0]的作用比较特殊:它指示本条目对应的设备 是存在的,并且在本条目的后面还有后续的条目(也就是说本条目不是最后一个条目)。这样,通 过第一个条目,我们就知道系统中有NVIC,并且还有第2个条目,而且还能计算出NVIC的地址为

0xE00F_F000+0xFFF0_F000=0xE000_E000。 缺省的ROM表如图16.2所示。但是因为芯片厂商可以添加、移除以及把某些可选的组件替换成

其它的CoreSigth调试组件,这时该芯片的ROM表就会与缺省的有所不同,以反映出相应的变化。 表16.2 Cortex-M3缺省的ROM表

地址 数值 名称 功能

0xE00F_F000 0xFFF0_F003 NVIC 指向NVIC的基址:0xE000_E000

0xE00F_F004 0xFFF0_2003 DWT 指向DWT的基址:0xE000_1000

0xE00F_F008 0xFFF0_3003 FPB 指向FPB的基址: 0xE000_2000

0xE00F_F00C 0xFFF0_1003 ITM 指向ITM的基础: 0xE000_0000

0xE00F_F010 0xFFF4_1003/

0xFFF4_1002

0xE00F_F014 0xFFF4_2003

0xFFF4_2002

TPIU 指向TPIU的基址: 0xE004_0000

ETM 指向ETM的基址: 0xE004_1000

0xE00F_F018 0 End End-Of-Table标记

0xE00F_F0CC 1 MEMTYPE 表示在此存储器映射中,可以访问系统存储器

0xE00F_F0D0 0 PID4 外设ID空间,保留

0xE00F_F0D4 0 PID5 外设ID空间,保留

0xE00F_F0D8 0 PID6 外设ID空间,保留

0xE00F_F0DC 0 PID7 外设ID空间,保留

0xE00F_F0E0 0 PID0 外设ID空间,保留

0xE00F_F0E4 0 PID1 外设ID空间,保留

0xE00F_F0E8 0 PID2 外设ID空间,保留

0xE00F_F0EC 0 PID3 外设ID空间,保留

0xE00F_F0F0 0 CID0 组件ID空间,保留

0xE00F_F0F4 0 CID1 组件ID空间,保留

0xE00F_F0F8 0 CID2 组件ID空间,保留

0xE00F_F0FC 0 CID3 组件ID空间,保留


数值的最低两个位用于指示该设备是否存在(bit[1])以及后面还有没有其它的表项(bit[0])。 在正常情况下,NVIC, DWT和FPB总是必须存在的,因此最后两位永远是1。然而,TPIU和ETM则可 以被裁掉,并且可能被CoreSight家庭中其它的调试组件所取代。
数值的高位部分用给出对应组件的入口地址相对于ROM表入口地址的偏移量。例如, NVIC入口地址= 0xE00F_F000 + 0xFFF0_F000 = 0xE000_E000(进位位被忽略) 在开发调试工具时,有必要从ROM表中一一查兑各调试组件,因为难免会有些另类的CM3芯片会
自定义调试组件,并且修改ROM表,而通过计算ROM表得到的地址是可以拿去拍板的。