|
地板
楼主 |
发表于 2014-11-27 14:10:17
|
只看该作者
9 @' v; V4 D D0 r, n0 Z% w" }2 P& @多谢您的解答,还有些问题没搞明白; @4 f8 s5 R; E/ y2 w
1.目前我在board_da850_evm.c中的da850_set_emif_clk_rate里打印出来sys0_clk3的寄存器为0x8002 也就是div3 = 76M, 可是在davinci_nand.c中的davinci_aemif_setup_timing初始化nand时序时设置时使用的时钟频率为aemif,而aemif在clk初始化的时候添加打印打印出来的时钟是114000000,这样的话EMIF是哪一个频率?8 W1 C1 H- m& O3 T5 @3 Z' ~
aemif_clk = clk_get(NULL, "aemif");7 o6 X3 Y& q( Z) _) E
if (IS_ERR(aemif_clk))
. P. B! _7 t( c% i' u+ l return PTR_ERR(aemif_clk);- u: h1 q& Z: m7 F1 ?
; ^ E2 ~5 m$ _, M0 \
clkrate = clk_get_rate(aemif_clk);
# b% R: V t4 j; H; D
# @- H3 T8 C( ] ` clkrate /= 1000; /* turn clock into kHz for ease of use */1 x; v8 P5 P8 F2 L( `- T1 o0 F' k
! ]# m( g$ D5 N
ta = aemif_calc_rate(t->ta, clkrate, TA_MAX);% b7 E6 i: Q7 `! H9 d; X
rhold = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);7 b4 V. }; r# _3 z1 n( G; n
rstrobe = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);
: A- ^( S# T, [4 _2 x. \ rsetup = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);% ?$ s. j; u3 m' [
whold = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);
, T# r$ P( ]( y' V7 Y wstrobe = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
! A4 E5 T S m, @( l wsetup = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);
5 F |( S5 G- i+ B2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?
2 {: ]3 K/ g8 U9 B; ]3 T; Q/ \
( M3 o G& s, Z3 q期待您的解答。
( r& L2 y! q. l. f W- W; G |
|