|
地板
楼主 |
发表于 2014-11-27 14:10:17
|
只看该作者
3 c* S1 k3 S4 w# O
多谢您的解答,还有些问题没搞明白& \% X( [% l8 d% T& v- ?
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是哪一个频率?
; x; T. N! T! A; M( G aemif_clk = clk_get(NULL, "aemif");
4 M& s& ~8 j) Q5 ^5 h! ? if (IS_ERR(aemif_clk))
* |% r* `8 N. T* i9 q return PTR_ERR(aemif_clk);
, R3 |7 r2 a! B
. G. p! p0 T% p6 f! k5 m; ^1 n clkrate = clk_get_rate(aemif_clk);. ~' I% O* O8 c7 a# v. M* M1 u
3 f+ j7 J* \# q2 ?
clkrate /= 1000; /* turn clock into kHz for ease of use */
9 B0 w) c+ o# S( }+ @( J3 E1 c
9 P4 D/ S6 z; G# V ta = aemif_calc_rate(t->ta, clkrate, TA_MAX);1 v a! l- r @2 u/ P+ J
rhold = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
, f! y& M/ O5 x+ I# E rstrobe = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);/ ?# G6 s' ?3 @! J
rsetup = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);+ v+ c$ `0 Y7 [' C9 z
whold = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);% Y' i. A4 ~$ ?# w- Q/ i
wstrobe = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
0 p5 r/ J1 s- \& r- o! {: }, x$ Q wsetup = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);- f+ L2 _1 b3 U! e' h
2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?0 q! F( h% }3 K: G
/ _9 ]+ |' k1 H+ j- ^6 g E' M期待您的解答。8 I* b/ K0 ~9 \" D% }4 J, [: j
|
|