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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 _9 G; H' B3 k' [8 V
Void UPP_TASK(Void)
5 i% p) W+ A0 J8 C7 l{8 a! V+ A& P$ f5 Z( \

7 p' `' q8 M# W2 e    int i,j,k,target_int_count=2;
1 O! b7 Y' O/ D3 C# s    char ch[2];; X$ G# p! E+ ]$ J$ X

6 |, A; `3 Z* b; X# u4 t9 }$ A
; f8 p0 a8 ~% D) T  j' J% U5 \; ^9 e9 T1 ]1 Y& o
    upp_interrupt_count  = 0;
& S- i/ H- T& u2 t, g    upp_error_count = 0;* x9 R: ~4 W3 E! ^3 q
- e: y6 Y( a, V: x
    UARTPuts("\tResetting uPP buffers...\r\n",-2);4 Z2 s, N6 W5 G0 W
    // Initialize data buffers
6 r1 h  [- i+ y; l" w- T    for (i = 0; i < upp_frame_size; i++)
6 ?$ H; y: ~. K4 `" @* B3 h    {, a! \9 T: d. j. @& m( }+ k. e3 I
       upp_buffer_b =i;
5 }8 i$ m& k: V  P  ^( z) ~       upp_buffer_a = 0xDEAD;
* t+ }/ N& I# ^+ ?" l, N: }    }% v9 ^6 G. F+ \0 R# S2 t
; d: b* a$ t* P9 u- e
    //for(i=0;i<1024;i++)
' r+ f# K4 r- H, g- s    //    temp=0;: `; Z" M( h; j: ?5 b# r! ?( G

- W1 C5 Z2 s- Z5 f$ b: L, h    //UPPReset();5 d" f6 w9 B+ j/ ~4 P' m
    /*启动UPP DMA传输*/
( }5 T/ b1 x5 [& u0 D    UARTPuts("upp_prog_dma_i\n",-2);
2 d! }' R  H  h( `6 ]' \5 K    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 M3 A1 ?1 [7 D: N4 J/ R
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. k$ ]& m7 Y& H( F! ~    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 K+ f! q5 ~# s$ r6 y: A7 B4 p! k4 P3 |  n1 a
    UARTPuts("upp_prog_dma_i\n",-2);9 `' s0 v1 ^4 M6 n/ s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 N% a- t7 ?& l# r( ]. j    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 Y6 G3 b; B* N% V8 n2 l    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 V9 ?! z  G: O" v1 z

. t, I+ w3 a+ Q% W    /*等待UPP传输完毕*/+ D9 a; D: p% E3 k# t0 H
    //i=0;
+ I! J+ `+ r" f  o6 k    //j=0;
) A; i: N% p( @    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ B! q: y( |& g& m9 O* g    {  J$ v7 n+ j0 u3 f2 Z
        /*  测试UPP传输的同时操作普通DDR数据; Y- G2 p/ t8 V2 t
        temp=i;8 ?7 U  n- O; l0 i! D1 w( b1 b# |5 C
        i++;
- t: b; ~' s: l7 R        if(i==1024)
5 r) d% }( K9 V5 h" n% P/ p        {( o8 i2 B' L% k# ~
            i=0;
- b4 i& F7 b. m/ x; x+ U' d1 c! j. L            j++;3 i, i. w" `) o$ J& @+ I+ Z& ?# I
        }9 ^5 k3 F8 t6 [- ]9 L
        */  A( I# W1 U& q4 t! T
4 E% [% N: m- B( L9 E( B5 k2 [
       asm(" nop");
+ g# _4 O4 m4 w7 f* n8 p: v4 R
) m! \* M6 x0 h       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) u0 y& A" R  V. q8 l* [1 z- Z
    }
* M9 w4 y7 v  j) M/ f' M7 X, g( n4 H
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 I! b! f9 h8 U  S0 ?1 V    //UARTprintf( "i=%d\n",i);
6 h2 f) V9 f: I/ B1 w4 }; a    //UARTprintf( "j=%d\n",j);
8 T$ Z2 c7 j6 ]  }. a* p    UARTPuts("Data mismatch in buffers.\n",-2);9 e  j$ k; V" E; y! z0 u) U
    if (upp_interrupt_count == 2 && upp_error_count == 0), |# V2 }. W: i% w; d! C9 F
    {
0 I- M: C6 Y( T: e  x( Z        for (i = 0; i<upp_frame_size; i++)) Q8 X# ?3 B. ^3 Q4 [
        {
; I) O( |$ q0 ~" J6 E            if (upp_buffer_a != upp_buffer_b)
9 X6 Y7 u. P( i: m: T            {
& M2 v  d1 x: l  `3 Y                upp_error_count++;5 ]0 a3 X$ K4 W: d; T) V
            }9 y0 t2 v4 p0 Q9 [6 R) ?
        }! B2 F8 x0 r1 k% C9 W# j
    }1 G) q+ o( B4 _; ?( {3 ?
1 C$ J  E- m& [& H0 U& E
    /* 报告通信结果*/8 P! x2 [& Y% m1 X* {( u8 m
    if(upp_error_count != 0)
+ O9 s. N- w  d/ |' ?% Q- w, ^        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( d7 \4 G2 t3 o    else  t; B" N1 F6 T! ^2 u1 e
        UARTPuts("uPP transfers complete!\n",-2);. J5 _" w1 P1 k+ v
4 L7 w8 V9 i; X, z7 z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- I' c  V! t! @  O; B# F    UARTGets(ch,2);
( q% t) f7 S# C. B    UARTPuts("\n", -2);. w4 U$ |! y+ L: c0 e

) f# Q' g3 h! d& r) S    if(ch[0] == 'y')+ s  b. C( Y, i/ o  u4 V, F/ ^; T
    {3 V1 Z2 s) q" T5 y( M
        /*打印全部读到的数据*/
: Z# b$ @8 {; z$ t        for(i=0; i<upp_frame_size; )
; o- W7 ]+ u/ |( X5 O0 e        {# s1 y! H* G3 m$ n
            for(j=0; j<5; j++)
2 r* L6 }% |& r7 q9 F            {
6 Q& _! H+ T% b  U( l1 [                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( L  C* Q3 @; {
                i++;
5 C' O" r: v5 k% W                //if(i >= 4096)9 E, s* v( q2 f& p+ Z& a* w
                //    break;
9 Q! ], W( Q# Q1 l6 E$ t/ n% n" ~* O
            }
. ~. C# P7 k& S6 |; \) M            UARTPuts("\n",-2);
2 _) E; a" q1 {0 ^& z: d        }
* f- K1 _% ~! y; e6 d    }$ C# k  `- W7 d7 \1 a

4 y7 |/ z1 S7 K" q( u+ [- [}
+ ]; F% Y2 b, `# B  R5 p; m5 F( i( f

  J3 e, y; t! |& r- U$ X
9 r  W& i' M  d' g4 s- e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
# q% S1 \& C) F' Y& i
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 w0 j0 G+ T6 k- d0 w
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 05:28 , Processed in 0.041118 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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