如何制作自己的网站的邮箱,热点事件舆情分析报告,wordpress 修改密码函数,网站制作地点目录
1.数据访问重定向
2.寄存器说明
3.Overlay功能配置
3.1 确认用于重定向的CPU
3.2 配置重定向Block大小
3.3 配置目标地址和重定向地址
4.结果验证
5.小结 今天说要开个专栏讲讲XCP标定#xff0c;但在将标定之前#xff0c;先把英飞凌专门为标定功能设计overlay…目录
1.数据访问重定向
2.寄存器说明
3.Overlay功能配置
3.1 确认用于重定向的CPU
3.2 配置重定向Block大小
3.3 配置目标地址和重定向地址
4.结果验证
5.小结 今天说要开个专栏讲讲XCP标定但在将标定之前先把英飞凌专门为标定功能设计overlay功能讲解清楚。 英飞凌的overlay全称叫做Data Access Overlay其作用是 redirect selected data access to the OVERLAY memory意味着通过overlay memory来访问数据对于Trcicore系列来说通过CPU访问PFlash、Online Data Acquisition space或者EBU可以被重定向OVERLAY memory可以分配到Local memory、Emulation Memory或者DPSR/PSPR。 Overlay功能可以在程序运行时在线实时修改标定参数这些参数通常存放在Flash中。注意overlay仅对数据访问有效且Overlay机制是针对CPU对数据的访问重定向一定要注意这点。
1.数据访问重定向 我们首先来看overlay原理图。 对于一个overlay block有三个非常重要的参数
Target Base Address --需要被重定向的目标起始地址一般为FlashBlock Size -- 需要被重定向的块大小Redirection Base Address -- 重定向块的起始地址一般为RAM
对于这三个参数都有相应的寄存器来配置
Target Base Address -- OTARxBlock Size -- OMASKxRedirection Base Address -- RABRx
根据芯片手册TC3xx有32个block用于overlay功能且size可配置32byte~128KB。
2.寄存器说明
OTARx(i0-31) 该寄存器只有一个参数可配置TBASE 该参数的有效性受OMASK寄存器控制而所谓target base是指的源地址通俗将即flash地址这容易混淆
OMASKi(i0~31) OMASK位域用于设置overlay block size。 需要注意是OMASK 只有当bit设置为0时才会参与block大小的配置例如当OMASK配置为000时也即全部12bit有效因此block size 2^12 * 32 131082byte 128KB那么当我需要配置1024byte时2^n*32 1024 n 5OMASK 1111 1110 0000 0xFE0 当bit为1时OMASK中置1 的位用于地址比较。
RABRi(i 0~31) OVEN--Overlay 使能 OMEM -- 选取overlay memory OBASE -- Overlay memory基地址 看到这里我想大家明白我说TBASE容易搞混淆的原因按正常想法我们都是从源地址overlay到目标地址即访问flash但实际访问到的是ram英飞凌不一样他说目标地址overlay到overlay memory。
OVCENABLE 这个寄存器用于使能核的overlay功能所以大家这里就要搞明白为什么overlay是放在CPU这一章节后面我会做一个验证通过debug口看到的数据和开启overlay的cpu看到的数据其实是不一样的。
OVCCON Overlay control register用于控制某个核的overlay功能 CSELx -- 用于选择某个核使能overlay
OVSTRT -- 如果CPU选择了overlay那么OVCx_OSEL选择的block会被激活
OVSTP -- 对于CSEL选择的CPU所有的overlay block会被失效OVCx_RABRy.OVEN会被清除。
OVCONF -- overlay configured置1overlay block control寄存器已经配置好并且已经为overlay start做好准备。
DCINVAL -- Data Cache Invalidate Data Cache Lines使能。
3.Overlay功能配置 有了上述寄存器认识后下面来看寄存器配置是如何实现重定向功能 假设我们现在想把PFlash0(0x8000 1000)(128byte)重定向到CPU0DSPR那么我们要考虑三个关键因素目标地址、映射block大小、重定向地址 很明显目标地址即要重定向的flash地址0x80001000提问可不可以不指定地址让编译器随意分配地址 Block大小128byte即可 重定向地址CPU0DSPR 0x70011000 那么如何来配置寄存器呢
3.1 确认用于重定向的CPU 根据datasheet通过核访问PFlash等可以被重定向所以这里我们选择CPU0开启overlay功能。 OVCCON.CSEL0 1因为每个CPU都有至少32个可重定向的block因此这里我们选取block0用于定向到CPU0DSPRCPU0_OSEL.SHOVEN01
3.2 配置重定向Block大小 Block大小为128byte那么根据芯片手册配置为0的为有效位因此根据公式计算2^n * 32 128 得出n2也即OMASK 位域 0x 1111 1111 1100 0xFFC
OMASKi.OMASK 0xFFCOMASK.U 0x0FFFFF800
3.3 配置目标地址和重定向地址 目标地址寄存器为OTAR重定向寄存器为RABR该寄存器配置的难点在于RABR.OBASE仅有17bitOTAR.TBASE仅有23bit如何把目标地址和重定向地址放进去就需要参考下图 再来回顾 PF地址0x80001000DSPR 0x70011000OMASK 0x0FFFF800。 首先我们来看Destination有两种来源一种是Original Address一种是redirected那么根据实际情况来看什么时候选择原始地址什么时候选择重定向地址很明显要看左边比较的结果。 根据芯片手册需要A和TBASE所有参与比较的bit都相同才会使用重映射地址参考下图 源地址绿色部分bit27bit7会参与地址比较也即OTAR要装绿色部分一样的数据才会使用重映射地址很明显要比较的位域位置一样因此要填到TBASE的值就为Target 5。 OTAR - 0x00001000 那么RABR寄存器该如何配置 我们知道要定向的ram地址为0x70011000 Base1Base2offset 其中Base1 b1000 0000 00Offset b00000 很明显需要把绿色部分填进OBASE因此也是重定向地址 5 故RABR 0x80011000 配置完成后来看结果
4.结果验证 Overlay是针对CPU的由于debug是走bypass功能因此如果直接去memory看overlay flash值必定还是原flash的值。因此在代码上做如下工作 首先在0x70011000 定义一个数组Test_Map_Cal_Ram值如下 在0x80001000flash定义一个数组Test_Map_Cal_Flash值如下 为了验证overlay功能还需要一个中间变量来承接定为Test_Algo_Update 0
上电时我们首先看Test_Algo_Update此时应该为0 Flash值为 Ram值为 现在开启overlay功能 要达到的效果为通过cpu0读取flash的值但实际上应该读的是ram的值如下 Debug看确实是通过访问flash实际读取的ram的值 从上图就可以看出CPU0把数组Test_Map_Cal_Flash赋给了数组Update如果overlay功能没有奏效那这个时候应该Update {0,1,2,3....} 但实际上我们可以看到Update {20,21,22....}说明CPU0是把Cal_Ram的值赋给了Updateoverlay奏效了。
5.小结 通过上面验证我们就可以用这个功能来做标定啦标定量A存在PFlash地址0x80004000使用overlay时上位机就直接download 该变量的flash地址即可完成标定不用再做flash和ram的映射了特别是当有多块标定数据要做标定时这个功能简直丝滑。