在lib_blackfin/board.c中有一个函数:
void init_cplbtables(void)
{
volatile uint32_t *ICPLB_ADDR, *ICPLB_DATA;
volatile uint32_t *DCPLB_ADDR, *DCPLB_DATA;
uint32_t extern_memory;
size_t i;
void icplb_add(uint32_t addr, uint32_t data)
{
*(ICPLB_ADDR + i) = addr;
*(ICPLB_DATA + i) = data;
}
void dcplb_add(uint32_t addr, uint32_t data)
{
*(DCPLB_ADDR + i) = addr;
*(DCPLB_DATA + i) = data;
}
…
}
在这里它将icplb_add和dcpld_add这两个函数放到了init_cplbtables函数里面,而这在VDSP中是不允许的,因此将其提取到外面来。
static volatile uint32_t *ICPLB_ADDR, *ICPLB_DATA;
static volatile uint32_t *DCPLB_ADDR, *DCPLB_DATA;
static size_t g_iIndex;
static void icplb_add(uint32_t addr, uint32_t data)
{
*(ICPLB_ADDR + g_iIndex) = addr;
*(ICPLB_DATA + g_iIndex) = data;
}
static void dcplb_add(uint32_t addr, uint32_t data)
{
*(DCPLB_ADDR + g_iIndex) = addr;
*(DCPLB_DATA + g_iIndex) = data;
}
void init_cplbtables(void)
{
uint32_t extern_memory;
/* populate a few common entries ... we'll let
* the memory map and cplb exception handler do
* the rest of the work.
*/
g_iIndex = 0;
ICPLB_ADDR = (uint32_t *)ICPLB_ADDR0;
ICPLB_DATA = (uint32_t *)ICPLB_DATA0;
DCPLB_ADDR = (uint32_t *)DCPLB_ADDR0;
DCPLB_DATA = (uint32_t *)DCPLB_DATA0;
icplb_add(0xFFA00000, L1_IMEMORY);
dcplb_add(0xFF800000, L1_DMEMORY);
++g_iIndex;
icplb_add(CFG_MONITOR_BASE & CPLB_PAGE_MASK, SDRAM_IKERNEL);
dcplb_add(CFG_MONITOR_BASE & CPLB_PAGE_MASK, SDRAM_DKERNEL);
++g_iIndex;
/* If the monitor crosses a 4 meg boundary, we'll need
* to lock two entries for it.
*/
if ((CFG_MONITOR_BASE & CPLB_PAGE_MASK) != ((CFG_MONITOR_BASE + CFG_MONITOR_LEN) & CPLB_PAGE_MASK)) {
icplb_add((CFG_MONITOR_BASE + CFG_MONITOR_LEN) & CPLB_PAGE_MASK, SDRAM_IKERNEL);
dcplb_add((CFG_MONITOR_BASE + CFG_MONITOR_LEN) & CPLB_PAGE_MASK, SDRAM_DKERNEL);
++g_iIndex;
}
icplb_add(0x20000000, SDRAM_INON_CHBL);
dcplb_add(0x20000000, SDRAM_EBIU);
++g_iIndex;
/* Add entries for the rest of external RAM up to the bootrom */
extern_memory = 0;
#ifdef CONFIG_DEBUG_NULL_PTR
icplb_add(extern_memory, (SDRAM_IKERNEL & ~PAGE_SIZE_MASK) | PAGE_SIZE_1KB);
dcplb_add(extern_memory, (SDRAM_DKERNEL & ~PAGE_SIZE_MASK) | PAGE_SIZE_1KB);
++g_iIndex;
icplb_add(extern_memory, SDRAM_IKERNEL);
dcplb_add(extern_memory, SDRAM_DKERNEL);
extern_memory += CPLB_PAGE_SIZE;
++g_iIndex;
#endif
while (g_iIndex < 16 && extern_memory < (CFG_MONITOR_BASE & CPLB_PAGE_MASK)) {
icplb_add(extern_memory, SDRAM_IGENERIC);
dcplb_add(extern_memory, SDRAM_DGENERIC);
extern_memory += CPLB_PAGE_SIZE;
++g_iIndex;
}
while (g_iIndex < 16) {
icplb_add(0, 0);
dcplb_add(0, 0);
++g_iIndex;
}
}
U-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录(16):*cplb_add相关推荐
- U-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录(18):const
在u-boot-1.1.6-2008R1/cpu/blackfin/traps.c中定义了一个数组: /* The purpose of this map is to provide a map ...
- 瑞萨单片机iap串口升级boot程序与app程序合并的工程构建-学习记录
MCU型号: R7F0C004 编辑软件:CS+ for CC boot区程序地址分配:0x0000-0x1ffff app区程序地址分配: 0x2000-0xfffff 复制一份常规的app程序,然 ...
- Spring Boot AOP 扫盲,实现接口访问的统一日志记录
AOP 是 Spring 体系中非常重要的两个概念之一(另外一个是 IoC),今天这篇文章就来带大家通过实战的方式,在编程猫 SpringBoot 项目中使用 AOP 技术为 controller 层 ...
- 初学SNMP,在spring boot 下使用snmp4j 做本地测试调通的记录
一.SNMP概念学习参考这篇 Snmp学习总结(七)--SNMP4J介绍 - 孤傲苍狼 - 博客园 (cnblogs.com) 二.SNMP协议深入学习(不想了解的可跳过) 聊聊SNMP协议 - C ...
- Spring Boot 2.4.5、2.3.10 发布
前几天刚给大家介绍过Spring Framework 5.3.6的最新发布内容(Spring Framework 5.3.6.5.2.14 发布) 今天就给大家介绍Spring Boot 2.4.5 ...
- Spring Boot-Spring Tool Suit + Gradle 构建第一个Spring Boot 项目01
文章目录 概述 使用Spring Tool Suite构建Spring Boot项目 下载STS 插件安装 搭建第一个Spring Boot项目 启动项目 概述 通常,构建一个Spring Boot项 ...
- 基于Spring Boot配置文件的日志记录示例样本
我们希望在Spring Boot中为不同的配置文件使用不同的日志记录配置,例如在本地运行中,我们只希望控制台日志记录和用于生产,我们希望文件记录日志支持每天滚动日志文件. 我想出了一个示例logbac ...
- 基于Spring Boot Profile的日志记录示例样本
我们希望在Spring Boot中为不同的配置文件使用不同的日志记录配置,例如在本地运行中,我们只希望控制台日志记录和用于生产,我们希望文件记录日志支持每天滚动日志文件. 我提出了一个示例logbac ...
- OpenShift DIY:使用Gradle构建Spring Boot / Undertow应用程序
由于此bug, Gradle 1.6是在OpenShift上运行的最后一个受支持的Gradle版本. 但是从Gradle 2.2开始,这不再是问题,因此使用自己动手做墨盒在OpenShift上运行最新 ...
最新文章
- MIT提出Liquid机器学习系统,可像液体一样适应动态变化
- JVM 调优 —— 新生代 Survivor 空间不足
- mysql输入select now()_mysql 中select now(); 是怎么执行的?没有指定FROM tablename?
- 自动生成requirements.txt
- app配置智能硬件的解决方案
- tsql是mysql中的吗_Mysql中的sql是如何执行的
- Filezilla软件
- iOS 14.5 目前已經發布了8 個測試版更新
- python输出一棵树_如何用Python画一棵树
- Python实现太极图案
- 拯救者笔记本 除尘后 开机蓝屏
- JavaScript多线程编程
- 计算机内存错误 要降频,win7系统出现内存自动降频的解决方法
- 使用Java写文件不覆盖原有内容
- 湖南中医药大学成考2022年下学期网络课程学习与考试工作安排
- L1-040. 最佳情侣身高差
- 基于JAVA某日杂商店进销存管理系统设计计算机毕业设计源码+数据库+lw文档+系统+部署
- 0-1整数规划的LINGO求解
- 项目Ⅱ-注册页面的完成
- 四大Hybrid App移动开发平台对比
热门文章
- Ubuntu 安装 亿图
- lol盒子皮肤工具 v1.33 免费版
- 股指期权最新消息 股指期权怎么交易?
- 财经职业技能测试的软件,财经商贸类(定)单独招生职业技能测试大纲.doc
- netsuite与首信易支付(v4.3)接口
- 为何SAP适合纺织行业解决方案
- 从环境工具到海量存储基础(微博新兵训练营课程)
- 广告联盟 网站/频道排名
- c语言测试题chart *p=quot;abcdefghquot;,c语言练习试题库
- vue cms模板 支持主题风格切换、换肤