嵌入式开发者社区

标题: 双核工作下,UPP不工作 [打印本页]

作者: tulipyyf    时间: 2015-1-29 09:38
标题: 双核工作下,UPP不工作
创龙工程师:& K7 h% F  ~  B1 X  n4 U
     你好,我是保定炜达电力的
( R! a! }7 P, ]     咨询问一个问题,我OMAPL138的DSP核部分已经用DSP仿真器调试通过了,使用SYSBIOS系统,UPP采集FPGA的数据,只使用UPP的A口,在初始化UPP时,修改了贵司的初始化文件(XDATA数据线因与LCD公用,所以修改): n" j5 G' @+ I/ p2 w& W+ y

. J" g% [2 [6 a1 f1 svoid UPPPinMuxSetup(void)
2 j- W. T1 A+ ^4 @0 u{$ G" b* [8 x# {+ n
unsigned int savePinmux13 = 0;
2 H6 R" r* h+ T# Q. y4 N8 ? unsigned int savePinmux14 = 0;, P' k: c0 f  h* W# K! E* A
unsigned int savePinmux15 = 0;; L6 [  F. G8 }6 y0 c0 \
unsigned int savePinmux16 = 0;6 o9 d- {. A3 a
unsigned int savePinmux17 = 0;
; F$ d3 v! p$ I4 u" G8 m  u  ^ unsigned int savePinmux18 = 0;
5 `9 M- B0 c: A6 J% ?/ d /* all pins (channel A, channel B, DATA, and XDATA)*/
2 i, U( b; x% k( i savePinmux13 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) & 0x0000FFFF);    //不要的输入F
) K1 A$ B- L# l8 b savePinmux14 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(14)) & 0x000000FF);
* W0 _  \& `! Y  I! t2 G savePinmux15 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(15)) & 0x00000000);( t8 `6 |+ H$ ~- }4 ]
savePinmux16 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(16)) & 0xFFFFFF00);
- J4 V5 Q/ y* R- a4 j* b9 L //savePinmux16 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(16)) & 0x00000000);
8 O6 n4 q, u6 [4 i0 L3 J //savePinmux17 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(17)) & 0x00000000);
/ f" |' b) F% w2 B, U //savePinmux18 = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(18)) & 0xFF000000);! W, W7 X  F3 }
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) = (0x44440000 | savePinmux13);
/ M, ^/ {' d! m- a0 m6 u  ?7 K) p HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(14)) = (0x44444400 | savePinmux14);
; k; `; U) D1 N HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(15)) = (0x44444444 | savePinmux15);* G% Y! W! Z* ?! \3 v) ?6 N3 Q. W
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(16)) = (0x00000044 | savePinmux16);9 |/ s; t- ?, M/ E$ L
//HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(16)) = (0x44444444 | savePinmux16);& \8 I' ]$ N: E3 Z2 Y6 a. }
//HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(17)) = (0x44444444 | savePinmux17);
) R: i1 M7 l- c& q% x //HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(18)) = (0x00444444 | savePinmux18);
+ D0 N# \4 S* V  S}% L- @# H, @3 U' x  X8 y3 B! S
: I( ^4 I4 w$ p
     现在我的问题是,我DSP核心独立仿真调试没有问题了,但是现在OMAPL138 linux系统启动后,再加载DSP核应用程序,居然UPP中断不工作了,不知道是为什么,是不是LINUX系统与DSP有冲突,麻烦指导看一下。 # P3 }5 \3 v2 W: i7 C* l+ O0 N
" A. C+ X, @" V5 V9 f; D. w

, g' [3 _5 J. x5 b/ G. S- G9 o
$ X" i7 V+ s7 G& J% S( w. O
作者: tulipyyf    时间: 2015-1-29 09:57
补充说明一下:按照贵司说明独立调试的方法是:6 b* g) |' f8 o$ C4 _% O( X
1)CCS连接ARM核心5 R3 K) I* Q9 r  `4 R; H" x0 D# y' Z
2)加载omapl138.gel后,初始化相关操作后,唤醒DSP核心
; V" K% D- d8 `. h8 H3)连接DSP核,然后调试仿真  
( q4 e% y/ X. x1 s5 t$ o7 k/ C. z  b0 M+ x9 E! g7 }
初步联合调试,按照贵司方法如下:+ |3 M" |6 r8 }% P
1)启动OMAPL138  linux系统
& _! z" v. Z, y! n, X2)进入系统后
3 ~; L' v8 B" D. Y& winsmod /lib/modules/3.3.0/kernel/drivers/dsp/syslink.ko TRACE=1 TRACEFAILURE=1
) W. S, d: h+ [2 `0 W' K3)然后再次连接CCS ,连接DSP核心
" X* [& r" j, G7 }* U9 m; ~$ d再次在线仿真,就发现UPP不工作了,其他功能仿真正常。
4 s) k8 b6 i, c$ J
) Y$ u- J% X5 ^$ a2 b* y' X
. g+ o4 i4 y0 f3 k$ G* Q0 V7 V  U
作者: tulipyyf    时间: 2015-1-29 09:58
再次补充说明 LINUX启动时已经如下设置,DDR不应该有冲突
+ v0 K' D# _+ ]; E2 I4 d3 \: p: Bsetenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3 mem=32M@0xc0000000 mem=64M@0xc4000000
7 Z# N* |% k0 F: n# J
作者: tulipyyf    时间: 2015-1-29 17:14
问题解决了,原来内核文件要用旧的+ R" ~. U( t$ c" ]

作者: 8225621    时间: 2015-7-31 12:13
tulipyyf 发表于 2015-1-29 17:14
4 R  o% F, n8 ^% l问题解决了,原来内核文件要用旧的

" ?9 H2 p- J: f6 I4 t. {2 `不好意思,打扰了,我现在所遇到的问题和你一模一样,看了你的回复说;内核文件要用旧的,不知道什么意思。麻烦告知下,谢谢
作者: tulipyyf    时间: 2015-8-4 08:27
当时应该最后是因为内存使用一致性问题导致的~~~你可以查看一下内存使用一致性文档~~~& h% I$ h. ?# p9 N* r; C2 I
“TI C64x+ DSP CACHE一致性分析与维护”那篇文献写的很清楚
作者: 8225621    时间: 2015-8-7 14:42
tulipyyf 发表于 2015-8-4 08:27: \) p& Y4 z  }7 y. e2 s
当时应该最后是因为内存使用一致性问题导致的~~~你可以查看一下内存使用一致性文档~~~! v! M4 S7 K$ m3 E3 L5 @8 G
“TI C64x+ DSP CACH ...

- K6 X+ d3 N/ D5 S我看了下,好像没有使用缓存,应该跟一致性 没有关系吧。
作者: tulipyyf    时间: 2015-8-7 16:38
我当时是upp定时从FPGA中读取数据,upp存储的数据直接放到DDR上,所以DDR上是存在一致性问题的~~
作者: tulipyyf    时间: 2015-8-7 16:38
DDR存储使用的是缓存~~~
作者: 8225621    时间: 2015-8-9 16:54
tulipyyf 发表于 2015-8-7 16:38
2 W% s4 j/ a+ x, P8 ODDR存储使用的是缓存~~~
" h1 x6 x* \& k9 a1 l" j
哦,但我还是想知道你是具体怎么解决的。对于内核文件要用旧的一直不理解。
作者: tulipyyf    时间: 2015-8-11 10:13
本帖最后由 tulipyyf 于 2015-8-11 10:15 编辑 ; B; V# f. |0 W6 r
0 W; @+ z+ _1 _  {" S
内核文件不用后来证明不用旧的~~~
% }2 f& _9 H) q0 q  E" X* P实际上我就是在创龙的样板上进行了修改" `9 Y7 t( f$ \, Z4 k, y
主要改动 1 移植到SYSBIOS中运行
3 ~* a5 ~( X- `5 l" @/ _               2 因需要时刻储存,所以FPGA发送一次下降沿脉冲,DSP核心中断收到后,执行一次完整的UPP重载,只是重载时,需要把DDR存储接收地址更新,然后开始接收UPP数据
% o$ T& r; U/ D               3 重载之前,需要 CacheWBInvAll();                        //更新cache! C% H7 |# b1 k2 n* D* y% k

+ J# Z: {+ R# s: Y  v希望能帮助你  




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