嵌入式开发者社区

标题: upp问题,在SYSBIOS下的应用问题 [打印本页]

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& N( @6 {6 c9 Z! y( `
Void UPP_TASK(Void)" o4 H  U% ~( a; p2 P+ c* d" b
{) T. ~8 f  b) |- {$ {! L
6 i$ A& {  r2 U" \; u
    int i,j,k,target_int_count=2;3 G* W, S2 i% X1 v' f* y: d; @
    char ch[2];6 O, w7 B) n2 Z1 ]1 u3 r$ k
- u9 r; P" e: h9 Z% [( t4 W- C

2 J2 c- n) \1 h0 q2 L0 p+ S% X$ n
    upp_interrupt_count  = 0;
; T$ U8 G& S# U6 V+ ]    upp_error_count = 0;: s4 y. _1 |0 D4 f+ E5 V( ]
1 x4 u( m" g: V- _: S; z6 @3 M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 A1 I$ N# H* R# N( ^    // Initialize data buffers6 |' O5 Y3 m& j3 x
    for (i = 0; i < upp_frame_size; i++)7 }+ O$ z7 L5 s+ J' W6 i+ o
    {2 F- x. a4 _- F" E
       upp_buffer_b =i;
) k, r% w7 e2 \8 M4 ]       upp_buffer_a = 0xDEAD;
2 B) m9 G; ~# V7 F0 Q$ Y9 @    }: U+ [$ F( D5 f5 T

/ T. u# X8 K4 b3 p7 v3 D    //for(i=0;i<1024;i++)
  w4 ?* g6 L: u) L3 p1 S4 M0 _6 v    //    temp=0;9 z$ s' Y( |. H* _
8 f7 H# Y- x+ W9 k( n' G
    //UPPReset();: n5 O3 ^1 ]& w% l3 ]
    /*启动UPP DMA传输*/
$ B- {, r6 V8 h3 b0 F5 a. x    UARTPuts("upp_prog_dma_i\n",-2);
( M* w4 R0 s  t: n9 H9 {    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 E) E* W! j/ B+ v. O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. C) v3 g! x$ u" i    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% j* n+ [8 F2 Y) o7 A: v
7 L+ \, a( G: B& z3 F/ f    UARTPuts("upp_prog_dma_i\n",-2);
7 d# V' Q" e* {/ ^    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( a: K( S# ^- M# e    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" H/ ^4 h! B- j, j. ^8 a3 ]" I
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 G! x3 `& K% t. J' ~8 M$ W
0 i, D, M+ ^: |" W0 L0 }  h8 H% o, P
    /*等待UPP传输完毕*/
+ n8 w  T  \1 Q' Z5 }    //i=0;
. ?# K" _, ]# e, I/ u/ @    //j=0;
8 _: ~. u# h" d, @' f# a& a2 y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 U* x5 d( R" {- u7 Y5 U- u
    {
8 X  P& P" i& \: k- C, c        /*  测试UPP传输的同时操作普通DDR数据! v7 S2 \& P" {6 p9 ?0 A/ F! p
        temp=i;
) C( \1 {, i* {, O: S        i++;
% Z$ a! H# E, b* {+ C9 Y        if(i==1024)
" z6 o- v4 t4 T6 q: f+ \4 E# E        {
8 c& N4 v5 s$ l8 E( ?% F            i=0;2 z0 \9 m9 M0 {3 I  U6 }; K
            j++;7 i+ Y* m) ~: Y
        }7 h2 c/ M- D+ z2 E- s2 ^
        */
. D7 c2 i% l/ K* x7 b9 `2 f; C  D( ?" ?/ i: ^/ y# N: }9 T
       asm(" nop");
* [) m# g( K6 G' m7 V) G
- T, R8 g* ]. o7 q( s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 w! o3 S3 }' j
    }  x* I# }8 u8 O: q& c# E' S
) k  ^: X4 b# x2 X7 V
    /*检查UPP传输的数据是否正确 (loopback modes only)*/. |" k3 |% c! v
    //UARTprintf( "i=%d\n",i);+ O0 e, ]% x, x2 E& B% u* V
    //UARTprintf( "j=%d\n",j);% m, E8 y" G6 L2 _, n5 `
    UARTPuts("Data mismatch in buffers.\n",-2);
6 S+ I- u7 r. [% E    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 G; {$ g, k0 d+ B. A+ U9 l    {
8 h  e8 D( f7 z% q- i7 ]        for (i = 0; i<upp_frame_size; i++)
" s$ B$ E" B# H" o9 Z        {7 r1 ]3 `( G6 Q+ V  u% E
            if (upp_buffer_a != upp_buffer_b)$ f, J3 K( X6 t
            {
- K0 O: }  P( z! c. _' W                upp_error_count++;
$ Q) d" n% ]! T: A% @6 E% H            }( _, S% ]. b4 L5 {* }) `
        }
* ^1 a9 O' }. E! b    }
+ x( T+ v6 U0 a+ N+ R: L  J* p" E3 a+ l  ^$ l& t5 I& f- y
    /* 报告通信结果*/7 |2 L2 J  S+ f
    if(upp_error_count != 0)2 V9 h0 ]* b  N
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- Z0 U# d/ e) k* K& @* Q. C    else! a; C3 i1 `$ c2 e
        UARTPuts("uPP transfers complete!\n",-2);
, D' \2 I! c) V+ p0 x" C9 i; }5 I% d& p- o% Q/ {( z4 U' r$ K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ f* |+ {0 R4 ]9 j3 j7 i1 @- W    UARTGets(ch,2);: t3 M3 `6 ?6 `* c/ n2 k& U- x& U
    UARTPuts("\n", -2);
% Z' Y1 V- O2 \0 _+ D
5 Q0 ^& l! C! G8 d% r    if(ch[0] == 'y')1 [( ^/ ]( k; f$ L* D3 Y4 X7 _
    {
! k* y' [/ j" v. y4 k6 N        /*打印全部读到的数据*/
9 _7 x, c8 s' i0 ^3 L        for(i=0; i<upp_frame_size; )
: G  V6 N* g" H. ~- x4 v5 t        {
' N* ?8 `. @7 m' T* D            for(j=0; j<5; j++)
  o0 G! o9 ?8 ?6 g  ^            {  M; p: D6 [' O) j" O/ ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% U4 M9 i, j1 T2 b
                i++;
' J# Q3 r* m$ `8 i& o6 ?6 D! p                //if(i >= 4096)$ _- p9 K* S6 ]' U
                //    break;
0 a, a$ K- ~" ^+ [
$ J" u; o' J9 `$ t, h            }/ [* b% M) J. }) [7 Q
            UARTPuts("\n",-2);. ]9 D" t! K( z, f* Q# B4 `* h
        }
$ O* z$ \9 I5 t3 a    }
% D3 i: T/ E4 Y5 ]+ g7 z
; S$ l$ f  e, {7 J9 u; q}
! u- A% {, P# Q+ J+ U9 a

5 K/ H' I( ~3 ]8 n% u! w$ x- F9 m5 ~2 u' X' s2 C; J3 \; z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 f6 i9 c$ Y) K6 ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" B9 L, x" ]! ?, n





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