|
地板

楼主 |
发表于 2014-11-27 14:10:17
|
只看该作者
P, M9 q8 L# C/ S3 Y
多谢您的解答,还有些问题没搞明白
4 Y# p6 D% K" i1 L, Q2 P1.目前我在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是哪一个频率?
! s" Y8 ?. |, l6 `6 e; p% B aemif_clk = clk_get(NULL, "aemif");( e1 U* X% I6 t. L0 S( n+ Z5 e
if (IS_ERR(aemif_clk))
9 _9 L7 U( T3 D9 ~7 V( c return PTR_ERR(aemif_clk);# w; t) R" M2 N! S. C" G& U
4 u5 \4 g# `5 P8 W* `$ a4 |( U7 [2 M
clkrate = clk_get_rate(aemif_clk);
% u' S( T( Y$ b5 G9 P8 |8 D
, T' H2 \2 t7 {. A7 x5 b" i clkrate /= 1000; /* turn clock into kHz for ease of use */
& f0 ]# j b6 |1 |/ l* C. g" _( G
" b. H, [8 ^; _& t5 ^ ta = aemif_calc_rate(t->ta, clkrate, TA_MAX);
- o, K8 q: l8 I/ ` rhold = aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
1 H# e# w& d+ |& Z! P5 o rstrobe = aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);( |+ |; A6 I5 l3 @1 z; M: T: Q
rsetup = aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);
, p4 J$ @/ Y8 i v1 B+ |9 ] whold = aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);. D! E, d7 E0 D4 i) b; N
wstrobe = aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
1 I: i) ~2 j( b b4 E wsetup = aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);8 @ x9 g5 M3 A0 t
2.我的板子上接的16c554只连接了8根数据线,所以设置成8bit数据位宽,地址线接了A15---A10结合片选CS5做译码,A4---A2接到16C554的A2--A0, 在这种情况下不停的用内核定时器访问0x6600E000物理地址进行 io_remap后的虚拟地址,板子上cs5没有动作,地址线上只有A2-A0有动作,我们这样的硬件设计和软件配置有没有问题,是不是应该配置成16位数据位宽,计算CS5的物理地址是不是应该做一下地址移位和映射?
7 }8 s; y Q( j6 S3 G- N5 I: J+ {0 ?. ]$ }5 r3 z2 y7 ^
期待您的解答。* o* W; E2 t3 E( I& S2 |8 B# E I
|
|