您的位置 首页 电子

根据KeyStone 器材树立鲁棒性体系

摘要对于复杂的系统,鲁棒性是非常重要的。为了协助客户建立鲁棒性系统,KeyStone 器件提供了多种硬件保护机制,如内存保护、EDC。本文介绍如何利用这些特性在 KeyStone 器件上建立一个鲁棒

摘要

关于杂乱的体系,鲁棒性是十分重要的。为了帮忙客户树立鲁棒性体系KeyStone 器材供给了多种硬件维护机制,如内存维护、EDC。本文介绍怎么运用这些特性在 KeyStone 器材上树立一个鲁棒的体系。一起供给了与文档配套的例程。

1 简介

如图1 所示,KeyStone 器材供给了多种帮忙客户树立鲁棒性运用的特性。

如图1 所示,在LL2、L1P 及L1D 中集成了内存维护模块;LL2、SL2 及DDR 操控器中集成了过错检查纠正模块;L1P 集成了过错检测模块。

MPAX 和MPU 模块附在总线上,用于监控检测以防止不合法的总线拜访。

每个DSP CorePac 有一个独立的MPAX 用于监控与MSMC 衔接的总线。

关于体系中其他的master,依据权限ID 进行分类。对每个权限ID,在MSMC 中集成了2 个MPAX 用于监督与该权限ID 相关的拜访。其间一个是SES MPAX 用于维护对DDR3 的拜访,另一个是SMS MPAX 用于维护对SL2 的拜访。关于每个master 对应的权限ID,参阅相应的器材手册。

某些外设的装备端口上增加了MPU,用于维护对该外设装备区域的不合法拜访。可是并非一切的外设都受MPU 的维护,详细参阅相应器材手册中受MPU 维护的外设列表。

每个CorePac 有一个看门狗守时器用于监督其活动,假如该核死机,看门狗能够触发不行屏蔽中止或许复位信号。

EMC 能够防止DSP core 拜访没有映射的的装备空间,XMC 则能够防止DSP core 拜访没有映射的数据空间。

一切这些功用都由硬件模块完结,运用这些功用对体系功用根本上没有影响。运用EDC 会对存储器的拜访功用稍有影响,但从整个体系层面上看,它几乎是微乎其微的。

在呈现问题时,一切这些模块能够向DSP core 触发反常,DSP core 的反常监控模块能够记载这些状况并触发反常服务程序履行相应的操作。

本文评论这些特性的运用,并给出相关依据寄存器层CSL 完结的例程。代码运用如下办法界说寄存器指针。

上述各种特性详细描绘散布于各自子体系的文档中,本文终究的参阅章节中列出了一切相关的文档。在看本文之前,假定客户现已阅读了相关特点对应的文档,所以本文旨在供给相关的弥补信息。

本文适用于KeyStone 1 系列DSP,例程在TCI6614 EVM,C6670 EVM,C6678 EVM 进步行了验证。关于其他的KeyStone 器材包扩KeyStone 2 系列,根本功用都是相同的,一些细节上的少许差异请参阅相应器材手册。

2 内存维护

文档“Memory Protection On KeyStone Devices (SPRWIKI9012)”中评论了KeyStone 器材上的内存维护特点,其间包括其它文档中没有的许多有用信息,本节在其基础上做一些总结和弥补。

表1 总结列出不同内存维护模块的差异。

体系中有多个master 和slave,坐落slave 输入端口的维护模块用于阻挠来自其他master 对该slave 的不合法拜访;坐落master 输出端口的维护模块用于阻挠该master 对一切其他slave 的不合法拜访。

每个内存页、分片或规模的维护特点都是可编程的。

2.1 L1 及LL2 内存维护

关于L1 及LL2 内存维护的根本信息参阅“TMS320C66x CorePac User Guide(SPUGW0)”中内存维护章节。

L1 及LL2 内存维护只差异7 个外部恳求ID,可是体系或许有16 个权限ID。默许状况下,体系权限ID 0~5 映射到CorePac AID 0~5,一切其他的权限ID 均映射到AIDx。

CorePac AID 与体系权限ID 之间的映射联系可由EMC 编程装备,详细参阅“TMS320C66x CorePac User Guide(SPUGW0)”中“外部存储操控器(EMC)”章节。

留意,IDMA 的AID 与其所属CorePac 的数值共同,EDMA 传输的权限ID 与装备并建议这个传输的核的编号共同。

一般L1 被装备为cache,此刻一切L1 相关的内存维护特点寄存器应该清零然后阻挠其他master的对L1 的拜访。

CorePac 内部内存维护模块(维护L1,LL2 及XMC/MPAX)的寄存器被一个锁维护起来。默许状况下,这些寄存器没有被锁住,用户软件能够运用自界说的密钥锁住这些寄存器,然后,只要用该密钥进行解锁后才能够拜访这些寄存器。

2.2 同享内存维护 – MPAX

关于CorePac 同享内存维护的根本信息参阅“TMS320C66x CorePac User Guide(SPRUGW0)”中“扩展存储操控器(XMC)”章节;关于体系中其他master 的同享内存维护根本信息参阅“KeyStone Architecture Multicore Shared Memory Controller User Guide (SPRUGW7)”中“内存维护及地址扩展 (MPAX)”章节。

如下是例程中关于XMC/MPAX 的装备样例,每一行代表MPAX 中的一个分片装备。

逻辑地址低于0x0C00_0000 的地址拜访不会进入XMC。对地址空间0x0000_0000~0x07FF_FFFF 进行拜访时,在C66x CorePac 内部进行地址解析。这块地址规模包括内部及外部装备总线,及L1D、L1P、L2 存储空间。

对坐落0x0C00_0000~0x0FFF_FFFF 区间的逻辑地址拜访时,会经过L1 cache,而且在读操作时会经过预取缓存,与该地址规模对应的内存特点装备寄存器MAR 是硬件拉死的,不行修正。也就是说对该逻辑地址空间的拜访在进入XMC MPAX 之前不会经过L2 cache,所以这块逻辑地址空间称为“快速SL2 RAM 途径”。

对大于等于0x1000_0000 的逻辑地址拜访会首要经过L2 cache 操控器,然后经过XMC MPAX,这种惯例途径会增加一个cycle 的时延。

依据上述装备比如,在拜访SL2 时,选用逻辑地址0x0C00_0000 的拜访速率高于运用重映射后的逻辑地址0x1800_0000。可是0x1800_0000 对应的内存特点寄存器MAR 是可编程的,因而能够装备经过0x1800_0000 拜访的SL2 为non-cacheable 及non-prefetchable。

留意DDR3 开端物理地址为0x8:0000_0000,而0x9:0000_0000 相对开端地址有4GB 的偏移,在大多数体系中这是一个不合法的地址。

在实在体系中,应该充分运用好MPAX 的一切片段更好地将存储空间划分红尽或许多的小片,并细心设定各个分片的拜访限制特点。

不必的地址不应该映射,MPAX 会拒肯定未映射的地址拜访并上报反常事情,然后有助于捕获软件过错。

当两个master 经过同享memory 交流数据时,应该确保两个master 运用的逻辑地址映射到相同的物理地址。

留意EDMA 的权限ID 是承继于对其装备的CorePac。

正告:

在修正一条 MPAX 表项时,需求确保此刻没有对该表项所掩盖地址的拜访。在修正之前,需求先将该表项掩盖地址对应的cache 及预取缓存中的数据进行回写及失效操作。

关于MPAX 的装备,推荐在程序开端之初且没有运用任何同享存储空间之前完结。用于CorePac MPAX 装备的代码和数据应该放在LL2。

假如要运转时动态修正一个MPAX 表项,安全的办法是先将新的装备写到一个未运用的编号高度表项,然后清掉旧的表项。这是因为编号高度表项的优先级高于编号低端表项。

在修正MPAX 表项之前需求先履行如下操作:

1. 将MPAX 表项对应的存储空间内容从cache 中除掉出去。即便关于特点为不行写的存储空间,应该运用CACHE_wbInvL2()而非CACHE_inv L2()。

2. 假如对受影响的存储器空间使能了预取功用,则需求对预取缓存履行失效操作。

3. 履行“MFENCE”确保回写及失效操作完结。

CorePac 的MPAX 寄存器受CorePac 的内存维护寄存器锁维护。SES 及SMS 的MPAX 内存维护特点寄存器被MSMC 内部别离用于SES 及SMS 的锁维护。MSMC 内部其他寄存器被MSMC内部用于非MPAX 的锁维护。

2.3 外设装备端口维护 – MPU

关于MPU 的根本信息参阅“KeyStone Architecture Memory Protection Unit User Guide (SPRUGW5)”。

MPU0、MPU1、MPU2 及MPU3 对一切KeyStone 1 器材是相同的。可是关于不同的器材,其附加MPU 的个数,每个MPU 支撑的地址规模表项数,MPU 的默许装备均有所差异。详细可参阅相关器材手册的“内存维护单元(MPU)”章节。

MPU 与MPAX 的差异在于,假如拜访地址不在MPU 任何一个地址规模内,则该地址拜访是答应的;而当该地址与MPAX 中恣意表项地址规模不匹配时,则该地址拜访被回绝。

留意,假如没有被MPPA 的设置所回绝,MPU 单元默许一切的拜访都是答应的。关于一个地址拜访,MPU 首要将拜访的权限ID 与MPPA 寄存器的AID bit 装备进行核对,假如与权限ID 对应的AID bit 为0,则不需求核对地址规模,该拜访被答应。如MPPA=0 则答应一切的对该空间的拜访,假如要回绝恣意对该空间的拜访则需求将MPPA 装备为0x03FFFC00。L1 及LL2 内存维护的MPPA 设置则有所不同,当MPPA 中AID bit 为0 是回绝相应的拜访。

当传输与MPU 中多个地址规模匹配时,一切堆叠的规模有必要答应其拜访,不然该拜访会被回绝。终究赋予的拜访权限与一切匹配表项中最低的权限等级共同。如某传输与2 个表项匹配,其间一个是RW,另一个是RX,则终究的权限是R。这与MPAX 也是不相同的。假如一个地址落入多个MPAX 表项,编号高的表项优先于编号低的表项。MPAX 只会用编号最高的表项决议权限,并疏忽其他匹配的表项。

如下与本文对应例程中一个对MPU1 的装备比如。每行代表MPU 中一个装备规模。

如上装备知,行列维护如下:

· 行列0~2047 只可由AID0~7 进行写(PUSH)操作;

· 行列2048~6143 可由AID11 以外一切的AID 进行写(PUSH)操作;

· 行列6144~8191 只可由AID8~15(AID11 在外)进行写(PUSH)操作。

TCI6614 上的MPU6 用于防止ARM 对DDR3 的不合法操作。留意,MPU6 是用于低32-bit DDR 物理地址规模的维护。

留意,为了铲除MPU 反常/中止事情,有必要在服务程序的终究向EOI 寄存器写0.

TCI6614 的MPU 事情与其他KeyStone 器材有所不同。TCI6614 中一切的MPU0~7 事情被合并为一个事情并作为一个体系事情衔接到CIC0。因为TCI6614 MPU 事情是电平中止而非脉冲中止事情,一切有必要首要铲除MPU 事情标志,然后才能够清CIC 标志。关于脉冲中止事情,有必要首选清CIC 标志,然后清源标志。

别的,只要在经过PSC 使能BCP 后,才能够拜访TCI6614 中用于BCP 的MPU5。即在拜访TCI6614 中MPU5 寄存器时,假如此刻BCP 没有被使能,则该拜访将触发拜访过错。

2.4 预留区域维护

预留区域(不合法地址)被主动维护。对不合法地址进行读操作时将回来废物数据,写操作则会被阻挠。对预留区域的拜访能够产生反常,这有益于捕获软件bug。

因为DSP core 的拜访会经过L1D 操控器,所以DSP core 对不合法地址的拜访会触发L1D 内存维护反常。

DSP core 从不合法地址履行时将触发指令获取反常。

关于不合法写操作,触发的反常取决于相应的意图地址。

DMA 对不合法地址拜访时,DMA 模块会上报总线过错。DMA 过错事情能够作为反常路由到DSP core。

3 EDC

EDC(Error Detection and Correction)用于存储器软过错 (Soft Error) 。软过错是一个过错的信号或数据,可是并不意味着硬件被损坏。在观测到一个软过错后,并不意味着体系可靠性会下降。在宇宙飞船中这品种型的过错称为单一事情打乱。在内存体系中,一个软过错会改动程序中的一条指令或许一个数据值。软过错一般能够经过器材的重启进行纠正,而硬件过错一般不能经过重启来康复。软过错不会对体系硬件形成损坏;只是会对处理的代码或数据形成过错。产生软过错的原因有:

1. 阿尔法粒子辐射及宇宙射线产生能量中子及质子。产生的概率取决于器材的地理方位及周围环境。一般,一个器材在几年中才会呈现几回。

2. 软过错也可由随机噪声、搅扰或信号完整性过错引发,如板载电感应或%&&&&&%串扰。假如软过错发送概率高于上述条目1 中的理论值,则应该检查硬件规划找出其他原因。一个常见的原因是供电电源电压低于预期,导致器材对噪声或搅扰的影响更灵敏。

KeyStone 器材各级memory 中都完结了EDC 机制,下表对不同memory 模块的完结机制进行了比较。

3.1 L1P 过错检测

关于L1P 及LL2 EDC 根本信息参阅“TMS320C66x DSP CorePac User Guide(SPRUGW0)”。

校验比特生成与核对:校验比特在进行64-bit 对齐的DMA 写或L1P cache 缓存时生成。非64-bit对齐的DMA 拜访将使校验信息失效。在256-bit 对齐的程序读取或64-bit 对齐的DMA 读操作时,L1P EDC 逻辑会核对校验信息。

过错检查设置:器材复位后默许状况下L1P 过错检查特性是封闭的。一旦L1PEDCMD 寄存器中的“EN”bit 被置位,一切L1P memory 中的ED 逻辑被使能。下面是从运用代码中摘抄的L1P ED 功用使能比如。

留意:要使L1P ED 功用作业正常,有必要一起使能L2 EDC。

对L1P cache 拜访时的过错处理: 对从L1P cache 中获取程序产生的校验过错,没有专用的体系事情,可是,过错检测逻辑会发送一个直接的反常事情给DSP(IERR.IFX 事情),然后用户能够运用内部反常事情获取这个过错。L1PEDSTAT 寄存器的PERR bit 会被置位。L1PEDARRD寄存器会记载包括过错bit 的的地址信息。在L1P 过错对应的反常处理服务函数中,需求对包括过错地址的cache line 进行失效操作。

对DMA 拜访的过错处理:对DMA/IDMA 拜访产生的校验过错,对应#113 号体系事情。用户能够运用这个事情获取过错。L1PEDSTAT 寄存器的DERR 比特位会被置位,而且L1PEDARRD 寄存器会记载包括过错bit 的地址信息。

L1P EDC 功用验证:经过置位LPEDCMD 寄存器中的SUSP 比特能够暂停L1P EDC 逻辑。运用该特性,能够软件仿照EDC 过错并验证EDC 功用。与本文对应的例程中供给了验证L1P EDC功用的代码,对应函数L1P_ED_test()。

3.2 LL2 过错检查与纠正

校验比特生成与核对:在对L2 以128 bits 为单元进行内存写操作时会产生相应的校验信息。非128-bit 对齐或许小于128 bits 的写操作会使校验信息失效。对128-bit 对齐的memory 读操作时,LL2 EDC 逻辑会核对校验信息。更多信息参阅“TMS320C66x DSP CorePac User Guide(SPRUGW0)”。

过错检查及纠正装备:器材复位后默许状况下LL2 EDC 特性是被封闭的。与某些C64+ DSP 不同的是,KeyStone DSP 不能对内存分块使能EDC。一旦EDC 使能,EDC 逻辑对整个CorePac L2 内存收效。可是,能够对不同的内存拜访恳求者别离使能,如L1D 操控器、L1P 操控器或DMA 操控器。例如,假如用户只需求对代码段运用EDC,需求使能下面三个域:

1. 设置L2EDCMD 寄存器中的EN bit 以使能LL2 EDC 逻辑;

2. 设置L2EDCEN 寄存器中的PL2SEN 比特以使能L1 SRAM 的EDC 逻辑对L1P 拜访的检查;

3. 设置L2EDCEN 寄存器中的PL2CEN 比特以使能L2 cache 的EDC 逻辑对L1P 拜访的检查。

从封闭到使能状况改动时,LL2 EDC 逻辑不会初始化校验RAM。因而,在进入使能状况后,校验RAM 中的值是随机值,需求用户软件对其进行初始化,。对L2 EDC 的装备有必要遵从“TMS320C66x DSP CorePac User Guide(SPRUGW0)”中论述的EDC 装备次序。下面是从例程中摘抄的L2 EDC 使能函数参阅代码:

对来自L1D 操控器的拜访过错处理:在经过L1D cache 从LL2 中获取数据时,对一切这些数据会进行过错检查,可是不会有任何的纠正。不管是1-bit 或许是多bit 过错,将会经过#117 号体系事情(L2_ED2:不行纠正比特过错检测)上报给DSP core。

对来自L1P 及DMA 操控器的拜访过错处理:1-bit 过错能够被纠正并经过#116 号体系事情(L2_ED1:可被纠正的比特过错)上报 。2-bit 过错能够被检测,并经过#117 号体系事情上报该过错。

下表列出关于不同存储器拜访恳求者,相应的1-bit 过错处理细节。

过错计数器(L2EDCPEC, L2EDNPEC)十分有用,可用于在长期运转的体系中评价校验比特过错产生的品种与概率。

下表列出对不同存储器拜访恳求者,相应的2-bit 过错处理细节。

关于大于2 bits 的过错,EDC 逻辑或许会检测并陈述为1-bit 或2-bit 过错,或许EDC 底子检测不到该过错。所以说,KeyStone 系列EDC 硬件逻辑只能确保检测2-bit 过错或纠正1-bit 过错。

一般软过错呈现的概率很低,首要呈现1-bit 过错,在相对长期后,第二个过错bit 或许会产生。因为1-bit 过错能够被纠正,而2-bit 过错不能被纠正,所以咱们应该尽或许在第二个比特过错呈现前纠正好第一个比特过错。

纠正1-bit 过错的操作一般称为“改写”。 为了改写一块存储器,能够运用IDMA,把IDMA 的源地址与意图地址设为相同的地址;字节长度设置为希望掩盖的内存块。地址拜访有必要是128-bit 对齐,而且整块的内存规模长度有必要是128 bits 的整数倍。在IDMA 从LL2 读取数据时,关于存在有用校验信息的128-bit 字,EDC 硬件会纠正或许存在于其间的1-bit 过错。当IDMA 把数据回写到相同的地址时,EDC 会对数据产生校验信息并标识其为有用。

改写操作一般是在1-bit 过错中止服务函数中进行。可是在1-bit 过错产生之后2-bit 过错产生之前,某些数据或许不会被拜访,在没有拜访时1-bit 过错是不会被主动上报的。为了防止这种状况,应该周期性地改写整块存储器区间来纠正潜在的1-bit 过错。下面是一段LL2 EDC 改写的代码比如。

一般,这个函数能够在一个守时中止中调用。如在一个600 秒周期的守时中止中调用该函数。

这样, 1MB 的存储区间会每7 天被改写一遍。

因为改写操作会与正常的内存操作相竞赛,因而会影响正常内存操作的功用。所以改写操作不能太频频,可是有必要在2-bit 过错产生前完结。在规划时有必要权衡考虑。

LL2 EDC 功用验证:经过设置L2EDCMD 寄存器中的SUSP 比特能够暂停LL2 EDC 逻辑。运用该特性,能够软件仿照EDC 过错并验证EDC 功用。与本文对应的例程中供给了验证LL2 EDC 功用的代码,对应函数LL2_ED_test()。

3.3 SL2 过错检测与纠正

对同享存储器SL2 的根本信息,参阅“KeyStone Architecture Multicore Shared Memory Controller User Guide(SPRUGW7)”。

校验比特产生与核对:有两种机制用于MSMC 校验信息的产生与检测:

1. 对恣意master 建议的256-bit 内存段的写操作时,校验信息会被更新并设置为有用。小于256 bits 的写操作会使校验信息失效。当DSP master 建议256-bit 内存段的的读操作时,校验信息会被检查。

2. MSMC 包括一个后台过错纠正硬件称作改写引擎,用于周期改写存储器的内容。改写的周期数能够经过SMEDCC 寄存器中的REFDEL 比特域来装备,每次改写会读取并回写巨细是4 个32字节的块。在检测并纠正1-bit 或许检查到2-bit 过错时,改写引擎还会上报EDC 过错。在MSMC用户手册中有详细的机制细节描绘。

DSP 复位后,MSMC 硬件会使校验信息失效,并从头初始化校验信息。在第一次读MSMC 存储器时,软件有必要先检查SMEDCC 中的PRR 比特(校验RAM 是否预备好的状况信息)。

过错检测与纠正装备:DSP 复位后SL2 EDC 逻辑的改写引擎被使能,而且会在后台产生校验信息。软件不需求像LL2 EDC 相同运用DMA 进行存储器改写,只需求查询SMEDCC 寄存器中的PRR(校验RAM 预备)比特位来承认校验比特现已产生。为了使能过错纠正,SMEDCC 中的ECM比特相同应该使能。请留意,过错纠正逻辑会对从SL2 的读操作增加1 cycle 的时延(拜访流水线增加了一级),不过拜访吞吐量并不会下降。

下面是使能MSMC EDC 功用的例程:

过错上报机制:MSMC 用户手册中有详细的过错上报机制信息,这儿总结如下表。

请留意,由改写引擎上报的过错地址是从0 开端的地址偏移,而为非改写拜访记载的过错地址是器材中从0x0C000000 开端的SL2 地址。

MSMC EDC 功用验证:能够经过设置SMEDCTST 寄存器中的PFn 比特位(bit0~3)来暂停MSMC EDC 逻辑。SMEDCTST 的地址偏移是0x58。每个SL2 RAM bank 对应PFn 中一个比特(PF0~3 与bank0~3 顺次对应),每个比特能够用于制止对校验RAM 的写操作。这样能够冻住bank 对应的校验RAM,因而能够经过成心注入过错来损坏SL2 存储内容与校验信息的共同性,然后测验检测纠正逻辑。详细的次序如下:

1. 向测验bank 中的某一个方位写一个已知值,这样能够正确地为这个方位初始化一个校验值。

2. 向SMEDCSTST 对应的PF 比特写1 以冻住该校验值。

3. 向上述被写的方位写恣意字节来改动该方位的数值,假如查验纠正功用则写一个1-bit 差异的值,假如查验检测功用则写一个存在2-bit 差异的值。此刻该方位的校验值与其存储的数值没有同步。

4. 读回该方位的值,将会产生所选类型的校验过错。

与本文对应的例程中供给了相应的代码用于验证SL2 EDC 功用,对应的函数为SL2_EDC_test()。

4 其它鲁棒性特性

4.1 看门狗守时器

对应看门狗守时器的根本知识,请参阅“KeyStone Architecture Timer64 User Guide(SPRUGV5)”中“看门狗守时器形式”章节。

守时器0~(N-1)可用于N 个core 的看门狗。在TCI6614 中守时器8 是ARM 的看门狗守时器。

在看门狗形式下,守时器倒计时到0 时产生一个事情。需求由软件在倒计时中止前向守时器写数,然后计数从头开端。假如计数到0,会产生一个守时器事情。看门狗守时器事情能够触发本核复位、器材复位或许NMI 反常,这能够经过装备相应器材手册中描绘的“复位复用寄存器(RSTMUXx)”来挑选。

使看门狗事情触发NMI 反常具有更高的灵活性,在NMI 反常服务函数中,过错的原因及某些要害的状况信息能够被记载下来,或许上报给上位机来进行毛病剖析,然后假如它不能自康复则能够再由软件来复位器材。

4.2 EDMA 过错检测

关于根本的EDMA CC 过错信息能够参阅“KeyStone Architecture Enhanced Direct Memory Access(EDMA3)Controller User Guide(SPRUGS5)”中的“过错中止”章节。

关于根本的EDMA TC 过错信息能够参阅“KeyStone Architecture Enhanced Direct Memory Access(EDMA3) Controller User Guide(SPRUGS5)”中的“过错产生”章节。

一切的EDMA 过错事情可作为反常被路由到 CorePac。

事情丢掉过错是一种最常见的EDMA CC 过错,意味着EDMA 不能按要求及时完结数据的传输,或许过错的事情触发了不应该的EDMA 传输。

总线过错是一种最常见的EDMA TC 过错,一般意味着EDMA 拜访了过错的地址(如预留地址或受维护的地址)。

4.3 中止丢掉检测

中止丢掉或遗失是实时体系中常见也是常被疏忽的问题。中止丢掉检测是一种用于捕捉这种反常的有用办法。对根本的中止丢掉检测信息参阅“TMS320C66x DSP CorePac User Guide(SPRUGW0)”中“中止过错事情”章节。

软件体系应该对路由到DSP core 且有对应软件服务的中止使能中止丢掉检测。在一切中止装备完毕后能够增加如下代码使能中止丢掉检测:

留意,当使能中止丢掉检测并在CCS/Emulator 下运用断点或单步进行调测时,因为在仿真中止时中止没有被呼应,一切此刻中止丢掉过错上报的概率很高。假如想疏忽它,能够在调测时暂时对某些或悉数中止封闭中止丢掉检测,可是留意不要忘记在正式发布的程序中从头使能该功用。

5 反常处理

关于反常处理的根本信息参阅“TMS320C66x DSP CPU and Instruction Set Reference Guide(SPRUGH7)”中“CPU 反常”一节。

关于中止或反常事情路由的根本信息参阅“TMS320C66x DSP CorePac User Guide(SPRUGW0)”中“中止操控器”章节。

5.1 反常事情路由

一切源自或由CorePac 触发的过错事情均直接路由到CorePac 的中止操控器。常被当作反常处理的过错如下表所示。

一些其他非丧命的过错事情,如可纠正的LL2 EDC 过错,应该被路由到中止而非反常。

源自或许由器材中同享模块触发的过错事情被路由到CIC。CIC 根本信息参阅“KeyStone Architecture Chip Interrupt Controller(CIC) User Guide(SPRUGW4)”。

CIC 事情中常被当作反常处理的事情如下表所示。

每种这样的反常事情只能路由到一个CorePac。一般一切的这些事情被路由到一个CorePac。 下图描绘DSP core 内部操控反常处理的开关。

一旦软件置位TSR.GEE 及IER.NMIE,不能再由软件铲除,只能在复位后被铲除。

TSR.XEN 能够由软件置位并铲除。XEN 能够在进入反常服务函数中由硬件主动铲除,并在退出反常服务函数时主动康复本来的状况。

因而,默许状况下,在中止服务函数中,TSR.GEE=1,IER.NMIE=1 及TSR.XEN=0.

5.2 反常服务函数

反常函数中应该记载或上报反常原因及相关信息,用于毛病剖析。

要害的记载信息是NRP。NRP 是反常回来指针,一般用于确认反常触发的方位。

实际上,不合法操作与NRP 捕获之间的时延大约在10~100 个DSP Core cycles 之间,详细的时延取决于许多要素,如操作类型,产生反常事情的模块等等。例如关于向一个被MPU 维护的寄存器履行写操作,当时延包括:从DSP core 到寄存器的写指令时延;过错事情从MPU 到CIC 然后 到CorePac 反常模块的路由时延。因而,当咱们取得NRP 后,应从NRP 指向的方位向后查找大约10~100cycles 来找有问题的操作。

不过,某些反常NRP 是没有意义的,例如,关于指令获取反常及不合法操作码反常。这一般产生在当程序跳转到一个不合法的地址时,这时NRP 也指向一个不合法的地址。咱们真实想知道的是在程序跳转到不合法地址前究竟产生了什么,可是这并不能从NRP 推导出来。在这种状况下,寄存器B3,A4,B4,B14 及B15 或许会有所协助。B3 或许还保存着前次函数调用的回来指针;A4 及B4 或许保存着前次函数调用的参数;B15 是栈指针;B14 是指向某些全局变量的数据指针。更多的细节能够参阅“TMS320C6000 Optimizing Compiler User Guide(SPRUG187)” 中“7.4 函数结构及调用约好”章节。依据这些信息,咱们或许能够推导出在程序跳转到不合法地址前产生了什么。留意,B3,A4,B4 或许在反常产生前现已被修正用于保存其它信息,所以它们或许不是有用的。实际上,B3,A4,B4 包括有价值信息的概率仍是很高的,所以这些寄存器是值得记载并剖析的。

通用寄存器的值不能用C 代码记载,而有必要用汇编代码来记载。下面的比如是将B3,A4,B4,B14,B15 寄存器记载在“exception_record”中,然后调用 “Exception_service_routine”。

其它需求记载的根本信息有:EFR,IERR,NTSR,TSCL/TSCH. EFR 用于判定反常类型:内部、外部或是NMI。关于内部反常,内部反常的原因记载在IERR。NTSR 记载反常产生时的DSP core状况。记载的TSCL/TSCH 用于确认反常产生前器材运转的时长。

关于外部反常,经过检查INTC 及CIC 标志寄存器来决议反常原因。对应一个特定的反常,往往有特定的状况寄存器能够检查、记载或上报。例如对应内存维护反常,需求记载的要害信息是毛病地址。参阅各模块的用户攻略了解相关状况或标志的更多细节。

一般,反常服务函数将这些反常信息保存在一个相似如下的数据结构中。

能够在反常服务函数中将这些数据结构中的信息传递给主机,或许将其导出来进行过错剖析。

一般反常服务函数处理的过错是丧命的,用户不应该希望从反常服务函数中回来。别的,软件也不总是能从反常服务函数中安全回来,阻挠从反常中安全回来的条件有:

1. 被反常中止的SPLOOPs 不能正确地从头开端。在回来前应该核实NTSR 中的SPLX 比特数值为0.

2. 中止被阻塞时产生的反常不能正确地从头开端。在回来前应该核实NTSR 中的IB 比特数值为0.

3. 在不能被安全中止的代码处(如一个维护多个赋值的紧凑循环)产生的反常不能正确地回来。编译器一般会在代码中的这些当地封闭中止;检查NTSR 中的GIE 比特值为1 来验证满意这个条件。

4. NRP 不是一个合法的地址。

所以一般反常服务函数以一个while(1)循环作为完毕。

默许状况下在反常服务程序中,TSR.GEE=1,IER.NMIE=1 及TSR.XEN=0.即在反常服务程序中NMI 及内部反常是使能的。

当一个使能的反常产生在第一个反常服务程序中时,复位向量指向的程序会被履行。这时NTSR和NRP 不会产生改动。TSR 复制到ITSR,此刻的PC 复制到IRP。此刻为了防止其他外部反常,硬件将TSR 设置为默许的反常处理值,NMIE 中的IER 比特被清零。

一般中止服务表中的复位向量是跳转到程序开端方位如_c_int00,这样,嵌套反常会重启程序。可是这并非大部分用户所希望的,咱们一般希望的是反常产生时在反常服务程序履行完后完毕程序。为了防止嵌套反常导致程序重启,能够给嵌套反常增加一个额定的反常服务程序,用户能够修正复位向量跳转到嵌套反常服务程序。在KeyStone 器材中,加载程序不依赖于复位向量发动程序,所以修正复位向量不会影响程序的加载。

6 例程

本文相关的例程能够在TCI6614 EVM, C6670 EVM 及C6678 EVM 上跑通。例程能够从以下链接下载:

http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

如下为工程目录结构:

“common“文件夹中包括通用代码如DDR 初始化及DMA、守时器、多核导航器、SRIO 驱动等。内存维护初始化代码、EDC 及反常处理的代码包括在KeyStone_common.c.

“src”文件夹中的每个c 文件包括一个测验用例代码。主函数在 “Robust_System.c”. 在 “Robust_System.c“的最初有一些宏开关,每个开关用于使能或封闭一个测验用例。

假如呈现这种状况,能够封闭这个测验用例然后从头测验其他的用例。

在EVM 上运转例程的过程如下:

1. 解压例程, 将CCS workspace 切换到解压后的文件夹;

2. 在workspace 中导入工程;

3. 假如产生代码修正对工程从头编译,或许需求在编译选项中修正CSL 维护途径;

4. 设置EVM 板上的器材加载形式为No boot 形式;

5. 将代码加载到DSP core0,运转;

6. 检查CCS stdout 窗口阅读测验成果。

如下为TCI6614 上的测验成果。

7 参阅文献

1. Memory Protection On KeyStone Devices (SPRWIKI9012)

2. TMS320C66x DSP CPU and Instruction Set Reference Guide (SPRUGH7)

3. TMS320C66x DSP CorePac User Guide (SPRUGW0)

4. KeyStone Architecture Multicore Shared Memory Controller User Guide (SPRUGW7)

5. KeyStone Architecture Memory Protection Unit (MPU) User Guide (SPRUGW5)

6. KeyStone Architecture Enhanced Direct Memory Access (EDMA3) Controller User Guide (SPRUGS5)

7. KeyStone Architecture Timer64 User Guide (SPRUGV5)

8. KeyStone Architecture Chip Interrupt Controller (C%&&&&&%) User Guide (SPRUGW4)

9. KeyStone Architecture DDR3 Memory Controller’s user guider (SPRUGV8)

10. TMS320C6000 Optimizing Compiler User’s Guide (SPRU187)

11. “Interrupts”, “MPU” and “Memory Map Summary” sections in Device specific Data Manuals

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/281471.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部