|
|
地板

楼主 |
发表于 2014-11-27 14:10:17
|
只看该作者
2 ~' s7 F; j+ K! `/ z
多谢您的解答,还有些问题没搞明白( u3 }# o" l2 J! u* q1 P# l
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是哪一个频率?" _6 C. {4 C0 h6 |. }$ h# r: T: T
aemif_clk = clk_get(NULL, "aemif");
5 ^1 L+ J8 ~8 k8 _4 y if (IS_ERR(aemif_clk))# L+ _0 l& H3 r! b9 e
return PTR_ERR(aemif_clk);
9 T& c6 H3 \7 ?, t x8 Z' W
8 [& ~: a) G/ o clkrate = clk_get_rate(aemif_clk);
& j) H9 G. G, V4 t1 F7 L% l; T! v: ]; K! G% J" H$ _; q/ s$ k
clkrate /= 1000; /* turn clock into kHz for ease of use */) f6 X' E2 a" T) `2 E; X
, d* \: D& t7 K0 U8 J5 X ta = aemif_calc_rate(t->ta, clkrate, TA_MAX);
$ x1 k) \) I3 `/ _ rhold = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
; w* W9 a* E' z- p# B rstrobe = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);
% C5 g+ D3 |. m& X& q rsetup = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);$ ]' z! J3 C% \) D, k8 P% l
whold = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);
+ n3 [5 P" m; Q( u; N4 ^ wstrobe = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
! L& d! U* D' q, M5 {4 a7 O/ I# ^ wsetup = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);
! {9 w$ L6 S. L+ v, _& k3 @2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?+ ^8 g: g5 R. m" ?- i" U" C
* T# t+ J, Y9 |; n+ Y期待您的解答。/ E; Q0 t% m, A# O- @! l
|
|