upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6937|回复: 2
打印 上一主题 下一主题

upp问题,在SYSBIOS下的应用问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?" J1 i8 u5 A* B# g) `
Void UPP_TASK(Void)# M/ x( X0 j9 w( U. ]
{; J8 L7 W0 h! ?$ A# U% I  P
7 p, k) n1 x4 V
    int i,j,k,target_int_count=2;
' y: S$ v) N! x; [    char ch[2];
/ K: w) g: j; n/ ~
8 t3 n3 b0 s. q4 d6 Q2 o' ?! `1 O8 H( r% M

1 y! {; r- V3 j) {    upp_interrupt_count  = 0;
+ J3 Z' Q+ E! h" o    upp_error_count = 0;
1 P- c& G% _' m% k5 Q8 D0 A* R) [+ `  w: p: _& ], K% E. O& X: h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 y' q: J" ~( H! q8 a. I) q    // Initialize data buffers  O0 Z; E! V; r' J
    for (i = 0; i < upp_frame_size; i++)
, ?; B5 h  T$ D/ U4 D9 E    {( ~8 I! m7 i1 M% n+ K: f- }
       upp_buffer_b =i;
0 N# k5 ]. d: p* o; x: e! {+ S       upp_buffer_a = 0xDEAD;
+ n2 p& k' W/ G7 C- }- X1 j    }
5 I4 Q2 P# A' d+ a7 K- `5 _, z
  ?  g5 a; r( a: j2 |3 R: x    //for(i=0;i<1024;i++), t; u: l' l$ b+ P1 `
    //    temp=0;+ c) Z' c% X4 m  W( k: }: y" w$ m

, v! {" Q0 ^0 e0 U    //UPPReset();
' w$ `0 g: l; r0 e1 L) N' V, u    /*启动UPP DMA传输*/
5 _. t2 E3 \/ H5 u# M+ p7 n" _4 Q    UARTPuts("upp_prog_dma_i\n",-2);2 ~% X% g$ c6 }  }: }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 d7 F0 {9 z7 |6 ]! W7 D  `- e% A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' e( C$ {: [$ z+ m" h; w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 X' F% Q- E( H- u% G; f% p3 z0 C+ e( o
    UARTPuts("upp_prog_dma_i\n",-2);
& O6 L9 D( V' W1 e2 `' p; [$ z    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' e/ ~% h0 D0 ?8 u$ t) x
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! K* F+ \, @& J; t5 O" W    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- @: N& L3 S( f* j( G+ c/ t9 m
( @8 P/ n! z' L" b8 F    /*等待UPP传输完毕*/
" T. `( B, w5 _9 o4 C* U: b% ~    //i=0;
$ D, F; ^* ~) ]' U' |    //j=0;
% N1 J5 c5 B3 T& E    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 g5 a4 i! s, I0 w/ @. X7 O
    {
. p, V3 w  e! Q. k        /*  测试UPP传输的同时操作普通DDR数据+ L8 m8 y& ]( F" n, ?
        temp=i;0 k# R0 ^3 @' ?
        i++;4 _3 W* e6 `, [; l, ?) \) ~& |# ~
        if(i==1024)8 w$ W/ k" }5 h1 Y( A0 R' Z/ G
        {
& `2 {+ a, b7 c) a  Q! h" w            i=0;* |# {" g+ a1 `( r
            j++;
6 ]5 Z4 A9 d2 A* Z" d" x" C) }% n# ^        }
8 a! o' d. Z9 b- E( u, E$ q  b        */
9 `5 E2 s* {$ M- p  \6 t/ L* e! C* q( ^9 m# r
       asm(" nop");
9 l2 }* A$ Q, ]% ?+ `4 W/ ~, [- _4 b6 z5 L0 O& f  g
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( M" ?4 A( T" H- s' W    }& H) O! R2 b6 D* d* G$ U
4 H) q  v5 a& K
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ X$ o0 K- v7 V; D" G    //UARTprintf( "i=%d\n",i);+ ^' @5 ?$ t" ?; h
    //UARTprintf( "j=%d\n",j);
" b. T6 H, d. r& i0 ~% K+ s( S    UARTPuts("Data mismatch in buffers.\n",-2);' b% Z* @" y2 c/ L
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ b( h, I6 e5 I. |# b9 A1 i6 z5 ?    {- h$ s0 w& [& e
        for (i = 0; i<upp_frame_size; i++)) ]- F2 v, Z# z1 r" d- j
        {7 H7 s3 v" z( Q) F2 F& C8 ]
            if (upp_buffer_a != upp_buffer_b)
1 C2 A# u# J5 g$ ?' g$ I            {9 Z. S( a- J, }* J3 b
                upp_error_count++;) @& D* X7 E" L7 v4 x; w
            }
# R9 j# h/ a0 N1 M0 v) k* n        }0 n& O" Y  @# d, q+ i( t
    }/ b" r7 W/ A8 b9 r0 u9 l* c" D6 ?
3 s7 f# J- g2 E- q$ J
    /* 报告通信结果*/) C, ^" L- U5 \( q5 r
    if(upp_error_count != 0)2 M* B# J' j9 N/ S+ u2 W
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! _8 J7 J7 h/ `4 h3 G, J    else
! v+ m5 y* X/ [3 c/ D8 k        UARTPuts("uPP transfers complete!\n",-2);
- |  K4 b9 S& d
2 g/ F+ a$ s! V5 u4 V2 v    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ F' [* a& z: A4 n
    UARTGets(ch,2);
, l5 k$ Y; {3 x% @' \    UARTPuts("\n", -2);% X3 X- K6 z% I0 W+ [
! Y; C0 i4 N/ J. C' r% V2 a9 \
    if(ch[0] == 'y'), H" L2 U/ E, W5 z" N9 a  T; h) `
    {
3 [! G$ ]8 O- Z1 N2 c9 m% O        /*打印全部读到的数据*/% i" M5 P# H8 |* n' d, T
        for(i=0; i<upp_frame_size; )* [" G8 e& \  ^) T/ u
        {3 k7 A; \4 f$ }9 D$ w
            for(j=0; j<5; j++)* T- ^, ?' N/ w* W9 R
            {
8 Q) e0 T9 o/ U1 \                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* g/ Y+ @' s: |0 @- F                i++;7 M( H6 I' B/ |. @' [6 e
                //if(i >= 4096)
  `6 {8 I  I0 Q                //    break;
7 l& D# Z# P8 ^) w& d0 E) |" g- ?- Y+ L; X  _0 l
            }+ y% C  D; h. S% g8 z9 a
            UARTPuts("\n",-2);
" S7 ]0 C! z/ J% N        }
# e6 |4 |. e' c" f1 I6 z    }3 |. W+ y  ~" J4 j
" |* ~* o" q9 h8 ]: Z) U7 k
}

$ v  R/ J! Q6 k  V1 X  w

7 s7 _: f% G) b  X3 l, P* q( c! b* \/ p
  g$ [% J) m8 d: X% u0 @9 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。5 n6 q' z; F, _8 T6 O3 R$ R
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 O+ |. f0 m3 F
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-15 13:41 , Processed in 0.044491 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表