嵌入式开发者社区

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

作者: newdsp    时间: 2017-7-10 10:38
标题: OMAPL138 DMA 触摸屏 内存分配问题
我们在用OMAP138的过程中,遇到以下几个问题,请协助解决:/ F$ P, {$ v: }; g5 O
         1. DMA 与触摸屏冲突,这个问题体现在几个方面:3 J& z  \$ x4 I  z* N
              其一:当我将EMIFA的BA1/BA0设置为EMIFA总线时,触摸屏会失效; ; j  J  K. Y8 M$ {$ |/ R+ C
              其二:当我将EMIFA的BA1/BA0设置为GPIO,并用此GPIO产生DMA事件,可以触发DMA,
+ t; o! B) t; l- D" C8 \$ ~; M! E                        但触发一段时间后,触摸屏会失效,同时DMA也不再继续触发。% m$ w7 d" d/ _4 b  {# `! C
              触摸屏失效时,调试终端会输出 如下信息:. d1 ~3 L2 c8 Z- U. t
                 [   74.358471] spi_davinci spi_davinci.1: SPI data transfer error
- k& U+ [7 x- O7 K( d) U                 [   74.364443] ads7846 spi1.1: spi_async --> -53 j7 ~8 p) n1 ]! `
         
8 z3 {$ _& q/ D* g' {( k         2. 内存分配问题
% H% g* i; r) y            我们用的主板是OMAPL138和X45的FPGA,DDR的大小使256M。
, V$ ]6 D; M6 |2 i2 {) W/ Q             我们有大量的(100M左右)实时数据需要在DSP端存储,单DSP端只分配了32M,完全放不下我们的数据,造成我们的程序无法正常工作。
+ |) Z2 Y& M. n* a4 F6 ^) @. }8 n            请给出修改内存分配的方法,将DSP端内存扩大。
作者: human    时间: 2017-7-12 09:18
1.EMIFA的BA1/BA0和触摸屏管脚连接是没有冲突的,可能是软件配置问题或信号干扰。/ t6 F4 j1 X, ?% S( V1 `0 ?
2.可以, 修改方法:修改u-boot的环境变量,mem参数,可以参考u-boot的环境变量说明文档;修改syslink双核工程的config.bld文件,详细请参考syslink文档介绍。
作者: newdsp    时间: 2017-7-12 09:57
本帖最后由 newdsp 于 2017-7-12 10:00 编辑 . D1 b5 E, m$ f
human 发表于 2017-7-12 09:18
$ I- X( R4 [+ N8 f1.EMIFA的BA1/BA0和触摸屏管脚连接是没有冲突的,可能是软件配置问题或信号干扰。
0 @/ X% ~! Q, Z! K- i% C2.可以, 修改方法:修改 ...
7 O* G* N  r8 b- C8 o! p' Z
1.对ARM端的内存分配,我们按照文档《6-2-U-Boot启动参数详解.pdf》中的说明,调整了Uboot中ARM的内存分配;5 x8 g$ R/ P/ {: n( [* T
    将启动参数mem_args由原来的:mem=32M@0xc0000000 mem=192M@0xc4000000,调整为. I6 Q3 N$ F+ N/ J* `# @
   mem=32M@0xc0000000 mem=64M@0xcc000000;) ~' {7 t2 Y8 q
   这样做的目的,是给DSP预留足够的数据空间。( n4 l/ f% Z* M# R% v0 I
   这样改完后,Uboot无法引导LINUX。9 c" Y$ ?& h& y# P
   然后再次断电重启后,启动参数mem_args又恢复为原来的mem=32M@0xc0000000 mem=192M@0xc4000000,我们做的修改丢失了。但这时可以UBOOT引导LINUX;! R5 K* j4 v, ?% h8 s4 Q
5 m3 {! b) V- t8 J1 s
2. 对DSP端的内存分配,由于我们没有用仿真器,而是用makefile进行程序编译,因此对我们而言内存分配是一个叫config.bld的文件,我们的内存分配方式如下:
$ d# ^5 X! H' M9 [# O8 I0 [7 x    *  C000_0000 - CFFF_FFFF   1000_0000  ( 256 MB) External Memory
! c& B* ?7 x# X# P, L! e   *  ------------------------------------------------------------------------
' d& h& Z; L  ^4 j( j   *  C000_0000 - C1FF_FFFF   200_0000  (  32 MB)         Linux5 ?: A  G; A. O6 Y
   *  C200_0000 - C200_FFFF     2_0000  ( 128 KB)         SR_0 (ipc)
- U  ~: d$ Y$ m$ c0 G9 a  m* u   *  C201_0000 - C202_FFFF    FE_0000  (15.875MB)         SR_1 (data buffers)
6 w% I" W5 u1 d4 T9 {5 ?' W   *  C300_0000 - CBFF_FFFF   900_0000  ( 160 MB)         DSP_PROG (code, data), E3 v: I/ J  m& B
   *  CC00_0000 - CFFF_FFFF   400_0000  (  64 MB)         Linux
( ?' Q4 ~& P4 S  h6 [. P  按照上述内存分配,DSP可以正常编译。
. t) n4 W7 s. Z; q  但由于ARM段在修改内存后不能启动(此时 mem=32M@0xc0000000 mem=64M@0xcc000000)
+ q+ e# r! `& t- p4 m; {+ a  而能启动时(此时mem=32M@0xc0000000 mem=192M@0xc4000000),ARM与DSP在0xc4000000~0xCBFF_FFFF之间有冲突,因此无法加载DSP。3 w% a2 L& |% i  A
  因此DSP最终也无法运行。
) W5 U# B5 F+ E) M2 ]
# S9 ^7 t5 Q  ~, {, C+ |: q7 T& _: F7 f$ E9 q
另:对于触摸屏失效的解答,没有指导意义。因为冲突就在哪里摆着。且电路都是原来开发板采用的电路。5 f9 T/ E" G& n$ m2 y& O4 H





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