Embedded 版 (精华区)

发信人: wanily (醉了酒的老鼠), 信区: Embedded_system
标  题: VxWorks FAQ(3)--BSP
发信站: 哈工大紫丁香 (2003年03月28日20:51:17 星期五), 站内信件

3.1 不同BSP
3.2 处理器
3.2.1 Power PC
3.2.1.1 问题关于MPC860BSP(新手上路):在读前辈程序的时候遇到这样一些语句: 
lis r3, 0x0090 
ori r3, r3, 0x0000 #plp=9, 50M clk 
stw r3, PLPRCR(r4) #PLPRCR 
不知道LIS、ORI、STW是什么语言?望指教!谢谢 
A:是PowerPC汇编, 
lis r3, 0x0090 ;放数据0x0090到r3 
Rejoicer:应该将立即数附给r3,然后左移位,注意,低位就为0 
ori r3, r3, 0x0000 #plp=9, 50M clk ;后两数之间取"或"放入前面r3 
Rejoicer:r3低位或0x00(立即数) 
stw r3, PLPRCR(r4) #PLPRCR ;PLPRCR(r4)按位右移#PLPRCR,放入r3 
Rejoicer: 将r3的内容写到 地址 r4 + PLPRCR 指向的寄存器(PLPRCR寄存器)中,(估计r
4放的IMMR值)

3.2.1.2 如果要在mpc860上加一个硬盘,用什么方法呢? 谢谢! 
A:你加一个网络文件系统,然后通过网络文件系统可以访问你机器的硬盘

3.2.1.3 mpc860在下载中遇到的问题,我用veisionice仿真器下载程序的时候,发现程序老
是下不下去。
在检查中,我发现CLKOUT只有1。25M。我用的是外围5M晶体振荡器,MODCK [1-2] 设置为1
0。[MF+1]为8。
我的主频是40M。应当说在没有程序运行的情况下,CLKOUT应该为5M。这是怎么回事?请大
家指教。 
A:clkout的输出(输入CLK的分频系数)也是通过860的一个寄存器配置来得到的,你可以
查一下860的相关
的寄存器看一下。

3.2.1.4 860中的程序调用,在860的BSP文件 romInit.s中,在程序末尾有条指令是跳转到 
romStart(),
在这之前有个计算 romstart() 入口地址的公式. 
romstart入口地址= romstart - romInit + ROM_TEXT_ADRS 
我对这个公式的理解不是很明白,谁能解释一下,在汇编里调用某个C函数,那该怎么来实现
或\ 
计算跳转地址.单独在一个汇编程序里,我可以理解,但一个汇编调用一个C程序我糊涂了 
who can help me ? thanks 
A:可以这样理解ROM_TEXT_ADRS=romInit,这样则romstart=romstart,上述些方式为了防止
ROM_TEXT_ADRS
不等于romInit情况下,还能得到正确的romstart地址. 这里不涉及C程序还是汇编程序.只
是传了一个
地址.romstart已在前面声明为一个外部函数. 原标号只是相对地址,不信你自己跟一下,
或查看一下生成
的bootrom.bin文件,分析一下机器码你所提到的三个地址:romInit,romStart,ROM_TEXT_
ADRS,其实只有
第三个是绝对地址,前两个都只是标号,也即相对地址.在romIinit.s中由于取指令还得从
NVRAM中取,
所以必须用绝对地址,那么romStart的绝对地址在哪里呢?只有算一算了,我们只知道romI
nit肯定是在
ROM_TEXT_ADRS所标识的地址,而且肯定是bootRom目标程序中的最低地址,所以romStart的
绝对地址是
(romStart - romInit) + ROM_TEXT_ADRS

3.2.1.5 vxworks下,是否有api可以获取网卡mac地址呢?
A1:如果是MPC860,可以试一下这个函数 
char macBuffer[8]; // MAC地址 
sysCpmEnetAddrGet(0, macBuffer); 
或直接读网卡MAC地址的寄存器. 
A2:为什么一定要用api呢, 
不管是860 scc 口,还是8260 Fcc口,都可以读参数区的PADDR1_H,-M -L得到嘛, 
如果你是做BSP的,一般都会从利用这个变量unsigned char sysFccEnetAddr [6] 
syslib.c 
A3:vxworks操作系统是通过BSP来了解自己的网口地址的,具体说是通过系统函数sysCpmEn
etAddrGet(),
这个函数属于BSP的范畴,它的函数实现是可以修改的。


3.2.2 I960
3.2.3 MIPS
3.2.4 ARM
3.2.5 x86
3.2.4.1 请问在Vxworks for x86下怎么读取BIOS的信息,请教各位大侠,
在Vxworks for x86下怎么读取目标机BIOS的信息?我现在想得到目标机的工作状态,
如目标机CPU的温度,以及风扇的转速,看门狗等。我采用的目标机是ADLINK公司的NuPP0-
760,
在系统启动时,加入BIOS可以看到这些信息,但是请问我如何在我自己编写的程序中动态
得到这些参数值?
多谢各位大侠了!! 
A:似乎比较困难。
关键是BIOS运行在实模式下,而VxWorks运行在保护模式下;并且VxWorks起来后,BIOS就
不存在了。
另外我们买主板的时候,似乎都不带什么主板编程手册之类的东西,否则直接读写主板上
的寄存器应该就
可以了。(by vxfree)
我曾经用sysinbyte()和sysoutbyte()读BIOS中的内容,用0X70和0X71,相关的地址你可以参
考硬件手册.
(by dongdd)

3.3 Bootstrap
3.4 配置你的VxWorks
3.5 VME
3.6 VxWorks环境 environment
3.6.1 usrSerial.c
3.6.2 prj_vxworks.tcl
3.7 PCI
3.7.1 关于PCIPCI总线上的设备怎么查找?是用pciFindDevice()函数吗?如何映射PCI
内存?如何读
PCI设备内存中的内容?谢谢
A:使用pciFindDevice查找设备;使用pciConfigInByte/Word/Long, 
pciConfigOutByte/Word/Long读写配置
空间;修改sysLib.c::sysPhysMemDesc[]映射地址空间;使用pciIntConnect连接PCI中断
(也可以使
用intConnect)。  
--
醉了酒的老鼠想吃猫

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.226.4]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.527毫秒