云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于S3C44B0VxWorksBSP移植方法

基于S3C44B0VxWorksBSP移植方法

  • 62 次阅读
  • 3 次下载
  • 2025/6/24 0:44:25

思创黄金开发板 S3C44B0X VxWorks BSP 移植笔记 版本: 1.0 日期: 2004.07.18 #endif /* (SBCARM7_CACHE_SIZE == SBCARM7_CACHE_8K) */ }

void sngks32cCacheDisable ( void ) {

UINT32 result;

SBCARM7_CTRL_REG_READ(S3C44B0X_SYSCFG, result);

/* Amine: SBCARM7_CACHE_ENABLE->SBCARM7_CACHE_MODE */ SBCARM7_CTRL_REG_WRITE(S3C44B0X_SYSCFG,

(result & ~(SBCARM7_CACHE_MODE))); }

/* Amine: 修改较多,如循环次数,地址进位,重新使能等 */ void sngks32cCacheFlush(void) {

int i, num;

UINT32 *tagram; UINT32 addr;

addr = SBCARM7_TAGRAM_BEG;

num = (SBCARM7_TAGRAM_END - SBCARM7_TAGRAM_BEG)/16; sngks32cCacheDisable(); for(i=0; i < num; i++) {

tagram = (UINT32 *)addr; *tagram = 0x00000000; addr += 16; }

SBCARM7_CTRL_REG_WRITE (S3C44B0X_SYSCFG, (SBCARM7_WRITE_BUFF | SBCARM7_CACHE_8K)); }

注意:对直接硬件操作避免使用Cache,最好只对程序和数据空间使用Cache。例如: Cache对TFFS的有影响,flash指令序列缓存在Cache中会导致某些操作失败(参看sngks32cCacheEnable函数中代码)。 4.6.2 测试

下面的代码可以粗略地测试系统的运行效率,比较Cache使用前后的结果。代码有由d3000编写。或者使用Dhrystone Benchmark 2.1测试程序(安装SDT后,在\\ARM251\\Examples\\dhry下有)。

UINT32 u32Array[2048];

int bench(void) { UINT32 *pInt; UINT32 i;

int tick1,tick2;

pInt = malloc(2048*sizeof(UINT32)); for(i=0;i<2048;i++) u32Array[i]=i;

tick1=tickGet();

for (i=0; i< 10000;i++)

bcopyLongs((char*)u32Array, (char*)pInt,2048); tick2=tickGet();

共享

?Amine, 2014 页 17 of 36

思创黄金开发板 S3C44B0X VxWorks BSP 移植笔记 版本: 1.0 日期: 2004.07.18 printf(\

return 0; }

4.7 网络驱动

网卡芯片兼容NE2000,使用ne2000End驱动,主要修改寄存器地址,初始化参数,实现代码几乎没有修改。 4.7.1 修改

ne2000End.c修改很少:修改头文件包含目录;sysIntConnect修改为intConnect;sysLanIntEnable改为intEnable,并修改返回类型void为STATUS。

ne2000End.h修改也很简单。因为网络芯片的A0地址线接在CPU的A5上,需修改奇地址寄存器的地址,欧地址寄存器保持不变, 例如:

#define ENE_CMD #define ENE_TRINCRL 0x01 #define ENE_TRINCRH 0x02 #define ENE_BOUND 0x03

0x00 /* command */ /* TRDMA incrementer */ /* TRDMA incrementer */ /* boundary page */ 0x00 /* command */ /* TRDMA incrementer */ /* TRDMA incrementer */ /* boundary page */

需要修改为:

#define ENE_CMD #define ENE_TRINCRL 0x20 #define ENE_TRINCRH 0x02 #define ENE_BOUND 0x22

config.h增加网络驱动宏定义。

#ifdef INCLUDE_END

/* Amine: INCLUDE_SNGKS32C_END->INCLUDE_NE2000_END */

#define INCLUDE_NE2000_END /* Include Ethernet driver */ #endif /* INCLUDE_END */

configNet.h向endDevTbl[]表中添加新驱动条目,填写初始化串。注意,初始化串中不能使用宏定义,数值都采用16进制表示。

END_TBL_ENTRY endDevTbl [] = {

/*Amine: added*/

/*: :::::*/ /*\

/*Note: 由muxDevLoad添加,数值都采用16进制表示,宏定义使用有问题*/ #ifdef INCLUDE_NE2000_END

{ 0, ne2000EndLoad, \#endif /* INCLUDE_NE2000_END */

sysLib.c中完成CPU端口初始化,注意网卡使用EXTINT1,上升沿触发。并完成网卡芯片复位初始化。添加ne2000EnetAddr 定义,并实现sysInByte、sysOutByte、sysInWordString和sysOutWordString函数。注意,sysInWordString和sysOutWordString的端口地址不用累加,并需按8位操作.

/* Amine: sysSngks32cMacAddr->ne2000EnetAddr */ unsigned char ne2000EnetAddr[] = ETHERNET_MAC_ADRS;

void {

sysInWordString (unsigned long port, unsigned short *pData, int count)

共享

?Amine, 2014 页 18 of 36

思创黄金开发板 S3C44B0X VxWorks BSP 移植笔记 版本: 1.0 日期: 2004.07.18 int i, byte_count; char *pbyte;

pbyte = (char *)pData; byte_count = count*2;

for(i=0; i

int i, byte_count; char *pbyte;

pbyte = (char *)pData; byte_count = count*2;

for(i=0; i

4.7.2 寄存器测试

网络驱动调试出现问题时,可以用下面的函数测试网卡芯片的寄存器,检测是否设置正常。

void NetTest(void) {

unsigned char c[]={0x21,0x41,0xa1,0xe1}; int i,j;

volatile unsigned char *p =(volatile unsigned char *)(NETBASE);

printf(\

printf(\ for (i=0; i<4; i++) {

*(volatile unsigned char *)(p) = c[i]; printf(\ for (j=0;j<16;j++) { if (j&1) {

printf(\ } else {

printf(\ } } }

printf(\ *(NETBASE+0x00) = 0x22; }

4.7.3

网络初始化分离

需从bootLoad()分离出网络初始化,为了让系统总是启动网络,而不管bootLine的配置。在

bootConfig.c添加int netInit(char * bootString)函数,将bootLoad中相关变量定义和网络初始化移入netInit()中,保留网络加载代码。代码不用作修改, 只需在起始处加入定义,并加入bootline解析代码,netInit中会使用bootline中的网络设备名和号。 共享

?Amine, 2014

页 19 of 36

思创黄金开发板 S3C44B0X VxWorks BSP 移植笔记 BOOT_PARAMS params;

/* interpret boot command */

if (usrBootLineCrack (bootString, ¶ms) != OK) return (ERROR);

版本: 1.0 日期: 2004.07.18 在bootconfig.c的bootCmdLoop()开始处添加netInit调用以加入网络初始化,放在bootLine初始化和TFFS加载之后。

if( netInit(BOOT_LINE_ADRS) == ERROR ) printf (\

4.8 TFFS驱动

为了在Flash存储器上使用文件系统,需要添加TFFS驱动,作为文件系统和存储器的中间层。TFFS

驱动分为3层,开发者面向Socket和MTD两层。 4.8.1

Socket

复制mv177-sysTffs.c到BSP目录,并更名为为sysTffs.c。sysTffs.c包含了tffsConfig.c,还需要复制tffsConfig.c到BSP目录。

sysTffs.c和tffsConfig.c修改都比较,很容易完成。

sysTffs.c中主要添加自己的MTD宏定义,设置Flash存储器基址和大小,屏蔽无关的写保护操作。 tffsConfig.c中向mtdTable[]表注册自己的MTD。 4.8.2

MTD

TFFS驱动的工作主要集中MTD上,MTD和具体的Flash存储器相关,实现写,擦除等基本操作。参照其他Flash存储器型号的MTD实现文件,在BSP目录下添加自己的MTD代码文件,名称任意,如sst39vf160.c。

sst39vf160.c几乎都是由自己编写,这里不能列出所有细节,只是提醒几个注意问题。 ? Flash存储器基址和大小需要和sysTffs.c中的设置一致。 ? 需要参考自己的Flash芯片的手册,修改操作指令序列。

? Flash芯片的手册中描述的地址是按字而言,也就是芯片的A0接在CPU的A1上,所以手册给出的指

令地址不能直接使用,需要左移一位。

? VxWorks提供的地址映射函数使用有问题,需要编写自己的地址映射函数。

? Cache不要覆盖Flash存储器空间,因为Flash的操作指令序列是连续的,Cache可能会导致中断而使操

作失败。

? 需要在擦除和写操作中屏蔽中断,因为Flash在擦除、写和读ID状态时,不能正常读取Flash中数

据。而VxWorks的异常入口位于Flash存储器的开始处,异常发生时不能得到正常的入口指令,会导致系统跑飞。解决这个问题的最好方法是添加第2片Flash存储器,专门用于文件系统。 ? 建议在每个函数入口添加调试信息,打印出入口参数等,以方便定位错误。 ? 最好在VxWorks中调试TFFS,而不是在bootRom中。 4.8.3

格式化

在实际加载使用TFFS前,先需要格式化。格式化是否成功,可以判断你是MTD代码是否成功,所以格式化操作失败是移植最常遇到的障碍。格式化操作如下代码所示。我在bootShell添加了一个命令“z”,用于启动格式化操作。

case 'z': /* Amine: tffs format */ if( tffsDevFormat(0,0) != OK ) printErr (\

共享

?Amine, 2014 页 20 of 36

搜索更多关于: 基于S3C44B0VxWorksBSP移植方法 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

思创黄金开发板 S3C44B0X VxWorks BSP 移植笔记 版本: 1.0 日期: 2004.07.18 #endif /* (SBCARM7_CACHE_SIZE == SBCARM7_CACHE_8K) */ } void sngks32cCacheDisable ( void ) { UINT32 result; SBCARM7_CTRL_REG_READ(S3C44B0X_SYSCFG, result); /* Amine: SBCARM7_CACHE_ENABLE->SBCARM7_CACHE_MODE */ SBCARM7_CTRL_REG_WRITE(S3C44B0X_SYSCFG,

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com