嵌入式开发者社区

标题: OMAPL138 DMA 触摸屏 内存分配问题 [打印本页]

作者: newdsp    时间: 2017-7-10 10:38
标题: OMAPL138 DMA 触摸屏 内存分配问题
我们在用OMAP138的过程中,遇到以下几个问题,请协助解决:
1 o& j# {$ n0 G2 s* ]% J         1. DMA 与触摸屏冲突,这个问题体现在几个方面:
' q% U4 s' U/ N              其一:当我将EMIFA的BA1/BA0设置为EMIFA总线时,触摸屏会失效; : R: ^& `5 `# l9 L" p6 c% h
              其二:当我将EMIFA的BA1/BA0设置为GPIO,并用此GPIO产生DMA事件,可以触发DMA,2 z+ S2 C9 b  [* ]! {% S; L
                        但触发一段时间后,触摸屏会失效,同时DMA也不再继续触发。
) y4 ~$ f# g) g              触摸屏失效时,调试终端会输出 如下信息:
; j  o3 F' I8 u5 R" U( C' F, W1 m3 V                 [   74.358471] spi_davinci spi_davinci.1: SPI data transfer error- K- A# T- h; }. Q/ e$ q1 V8 u" ^
                 [   74.364443] ads7846 spi1.1: spi_async --> -5
& Z: c+ n6 f( _0 g) W( C, I         
7 A1 }3 {0 v& h2 v% W9 z         2. 内存分配问题& ~- k' _* ]! u: b6 D. I* K7 |( u
            我们用的主板是OMAPL138和X45的FPGA,DDR的大小使256M。, V3 T6 o7 H% U( \+ w
             我们有大量的(100M左右)实时数据需要在DSP端存储,单DSP端只分配了32M,完全放不下我们的数据,造成我们的程序无法正常工作。
1 `7 V4 F/ a! S* D; R            请给出修改内存分配的方法,将DSP端内存扩大。
作者: human    时间: 2017-7-12 09:18
1.EMIFA的BA1/BA0和触摸屏管脚连接是没有冲突的,可能是软件配置问题或信号干扰。
; ~+ A1 Q& X' K# `1 T2.可以, 修改方法:修改u-boot的环境变量,mem参数,可以参考u-boot的环境变量说明文档;修改syslink双核工程的config.bld文件,详细请参考syslink文档介绍。
作者: newdsp    时间: 2017-7-12 09:57
本帖最后由 newdsp 于 2017-7-12 10:00 编辑
5 T! S: @( r8 t. V) P
human 发表于 2017-7-12 09:18
7 b( C! D+ Y$ K! a. [1.EMIFA的BA1/BA0和触摸屏管脚连接是没有冲突的,可能是软件配置问题或信号干扰。% t$ g1 `. C0 {9 G# P
2.可以, 修改方法:修改 ...

! `* z* |1 `+ t7 r6 O1.对ARM端的内存分配,我们按照文档《6-2-U-Boot启动参数详解.pdf》中的说明,调整了Uboot中ARM的内存分配;
1 {8 X) q1 V0 L) M    将启动参数mem_args由原来的:mem=32M@0xc0000000 mem=192M@0xc4000000,调整为  t* [+ D1 a  p' S0 K. M5 G# A5 |
   mem=32M@0xc0000000 mem=64M@0xcc000000;
. {# A! M6 ?% F4 {4 b   这样做的目的,是给DSP预留足够的数据空间。
( V- \" `# M4 F4 e" F% G" d   这样改完后,Uboot无法引导LINUX。
" ?( _/ Z1 x- J( h1 z, G9 ?   然后再次断电重启后,启动参数mem_args又恢复为原来的mem=32M@0xc0000000 mem=192M@0xc4000000,我们做的修改丢失了。但这时可以UBOOT引导LINUX;) l  g7 _7 x$ W2 U
, v$ ?+ C" z- l4 Y9 U
2. 对DSP端的内存分配,由于我们没有用仿真器,而是用makefile进行程序编译,因此对我们而言内存分配是一个叫config.bld的文件,我们的内存分配方式如下:
& g) F5 t7 M' \    *  C000_0000 - CFFF_FFFF   1000_0000  ( 256 MB) External Memory
+ Y5 @3 ^8 m% K& ]6 Y. U   *  ------------------------------------------------------------------------
1 z( W, ~3 b$ b   *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB)         Linux
4 Z) C; v0 S# Y% w   *  C200_0000 - C200_FFFF     2_0000  ( 128 KB)         SR_0 (ipc)
$ G. b% O& M9 d8 q   *  C201_0000 - C202_FFFF    FE_0000  (15.875MB)         SR_1 (data buffers)& Q! X' k' s2 b/ @0 \1 m
   *  C300_0000 - CBFF_FFFF   900_0000  ( 160 MB)         DSP_PROG (code, data)
8 B8 j( N' S, G; o+ I   *  CC00_0000 - CFFF_FFFF   400_0000  (  64 MB)         Linux
7 q+ |& S- L3 w. K) J/ n  按照上述内存分配,DSP可以正常编译。1 g6 Z+ o  y) l% G0 h
  但由于ARM段在修改内存后不能启动(此时 mem=32M@0xc0000000 mem=64M@0xcc000000)$ Y! ~7 @3 L; Y: {
  而能启动时(此时mem=32M@0xc0000000 mem=192M@0xc4000000),ARM与DSP在0xc4000000~0xCBFF_FFFF之间有冲突,因此无法加载DSP。
8 b* E2 y- s6 A# m: j8 k6 W  因此DSP最终也无法运行。
7 C3 k# e" ?& t7 U% K8 h& U$ N+ A
  k8 n6 p3 p( d# @8 Q: V6 K
9 i! _1 ^* W. d# k2 F" u另:对于触摸屏失效的解答,没有指导意义。因为冲突就在哪里摆着。且电路都是原来开发板采用的电路。
% Q7 w8 H# Q1 u' ?. S




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4