![]() |
|
||||||||||||||
| | 首页 | 新闻 | 文库 | 方案 | 技术 | 独家 | 座谈 | 下载 | 图库 | 开发板 | 仿真器 | 邮购 | VIP会员 | 芯片代购 | 客户评价 | | ||
|
||
|
||||||||||||||
| vdsp4.5(bf561)中的CPLB | ||||||||||||||
作者:快乐虾 文章来源:Internet 点击数: 更新时间:2008-3-3 ![]() |
||||||||||||||
|
1 ldf配置
如果没有使用CPLB,那么生成的LDF文件将把这些空间分配为指令存储器或者数据存储器,在使用了CPLB之后,LDF文件就变成了:
MEMORY
{
…
MEM_A_L1_CODE_CACHE { TYPE(RAM) START(0xFFA10000) END(0xFFA13FFF) WIDTH(8) }
MEM_A_L1_DATA_B_CACHE { TYPE(RAM) START(0xFF904000) END(0xFF907FFF) WIDTH(8) }
MEM_A_L1_DATA_A_CACHE { TYPE(RAM) START(0xFF804000) END(0xFF807FFF) WIDTH(8) }
…
} /* MEMORY */
…
L1_code_cache
{
INPUT_SECTION_ALIGN(4)
___l1_code_cache = 1;
} > MEM_A_L1_CODE_CACHE
…
L1_data_a_cache
{
INPUT_SECTION_ALIGN(4)
___l1_data_cache_a = 1;
} > MEM_A_L1_DATA_A_CACHE
…
L1_data_b_cache
{
INPUT_SECTION_ALIGN(4)
___l1_data_cache_b = 1;
} > MEM_A_L1_DATA_B_CACHE
…
这样就保留了Cache的存储空间。
2 要缓存的空间定义
vdsp向导生成了两个新的文件(*_cplbtab561a.c和*_cplbtab561b.c)来存放要缓存的空间定义:
#pragma section("cplb_data")
#pragma file_attr("DualCoreMem=CoreA")
cplb_entry dcplbs_table[] = {
…
};
#pragma section("cplb_data")
#pragma file_attr("DualCoreMem=CoreA")
cplb_entry icplbs_table[] = {
…
};
这两个数组就定义了要缓存的空间,它们的名称不可改变,但是内容可以根据需要进行修改。它们实际是供cplb_init这个函数使用的。
3 *_basiccrt.s
在*_basiccrt.s中多了如下代码:
…
/////////////////////////////////////////////////////////////////
// cplb-handler
#include "cplb.h"
P1.H = _cplb_hdr;
P1.L = _cplb_hdr;
[P0-48] = P1; // write exception handler
.extern _cplb_hdr;
…
/////////////////////////////////////////////////////////////////
// cplb-init
// initialise the CPLBs if they're needed. couldn't do
// this before we set up the stacks.
R0 = 127; // cplb_ctrl = 127
CALL.X _cplb_init;
.extern _cplb_init;
.type _cplb_init,STT_FUNC;
.section/DOUBLEANY data1;
___cplb_ctrl:
.align 4;
.byte4=127;
.global ___cplb_ctrl;
.type ___cplb_ctrl,STT_OBJECT;
.section/DOUBLEANY program;
.align 2;
在这里,调用了cplb_init函数,同时定义了一个全局变量__cplb_ctrl,这个值实际控制了要使用哪些缓存,它的值定义位于cplb.h中,可以取以下几个值的或:
当然,__cplb_ctrl这个值也可以在c文件中定义。注意如果在c文件中定义其变量名要少一个下划线!
4 错误处理
当发生缼页等CPLB错误时,vdsp默认的处理函数是cplb_hdr,此函数在*_basiccrt.s中被设置。根据错误类型的不同,它将调用不同的子函数:
|
||||||||||||||
| 文章录入:admin 责任编辑:admin | ||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||||||||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 前置放大器在移动医疗服务系 便携式多通道大容量生理信号 防腐监测仪的设计与应用 基于AD1674的酶标仪的设计 基于C/S模式的JRTPLIB库的测 ffmpeg与jrtplib相结合应用 blackfin模拟摄像头驱动中的 可编程逻辑在数字信号处理系 发现VDSP4.5一个BUG:单步调 VDSP5.0双核工程下sml3中的变 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 本站介绍 | 合作联络 | 欢迎投稿 | 广告业务 | 网站地图 | 设为首页 | 加入收藏 | 友情链接 | 网站公告 | 联系我们 | | |||
|