嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% \. ~- B8 |( l* m5 [  {% O4 R$ ]
Void UPP_TASK(Void)7 M5 `' u: ]( r7 D9 P( g1 y
{
3 P2 |6 D) o1 \0 b# A0 q) Y: g
" c9 H0 o& N4 j: ^/ P5 u  N" w8 ^    int i,j,k,target_int_count=2;# P) t) b+ I7 F- J
    char ch[2];
1 _  X: W( a6 l0 b; p0 o' [+ X, \3 J) |7 z% m
  E. u) _* z; u5 G2 ~- U9 |

: w  X8 g" L1 F    upp_interrupt_count  = 0;
0 n8 v1 m+ u$ j5 o. R% b" W    upp_error_count = 0;
% c/ ?. M! s3 ^9 T
. R4 j  S8 v. @( |* v    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: T; E' O6 Y  P! G& R    // Initialize data buffers, }; R7 y: U, a* U9 V1 I! A7 m/ k
    for (i = 0; i < upp_frame_size; i++)
/ O- b( E: A# S" u5 T' D    {
  w" _+ G/ l- p# _0 m5 @       upp_buffer_b =i;
& `; w4 p, h/ q% _9 u       upp_buffer_a = 0xDEAD;& z/ C0 C7 U9 b
    }7 n5 f; j6 `' l' c+ S, Y

7 Q0 T& g- }+ o) n$ Q    //for(i=0;i<1024;i++)
: }3 X, W* Y% f& X6 f, H1 P* p8 @    //    temp=0;
: X! g0 s* v' j4 U, ~3 r+ O% J' J8 N3 O# N! q7 ~* r9 `
    //UPPReset();
0 Y/ z3 ~# S8 y: m6 i    /*启动UPP DMA传输*/  I: m% l# H6 a, X9 s3 Y3 P
    UARTPuts("upp_prog_dma_i\n",-2);
0 c6 X, b9 ~3 I6 e; G& V, s  ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' W! v: t# G, e- A- M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! M2 \8 }% k0 y( T* c; g    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 J" V- l  ^- Z

) Z4 l" K4 K) @% a4 ~    UARTPuts("upp_prog_dma_i\n",-2);
' ?- L% z9 \1 z, |    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* D' m( ~2 R- Z" x6 K
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ H9 X5 ^& _* K- @% \- A& k$ E- g    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. v+ o$ K; f: c2 D6 [
6 J; `( Z2 {; E% \" o( G
    /*等待UPP传输完毕*/
: e; V/ g: n; t$ k7 f% M& v8 F    //i=0;
  ~& U" M. w3 i; E    //j=0;: Y1 f, d0 z5 L$ f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 _; m) n2 G0 P2 G
    {( {: O9 o( `, D) t( {0 g
        /*  测试UPP传输的同时操作普通DDR数据
5 q  W+ Q. i: j6 y( h4 l, u        temp=i;
2 x  o9 o4 J4 C& \        i++;
1 j4 v5 i' }7 f/ E$ H( h, F        if(i==1024)& w' {3 g; Y* n! L
        {
( _) R! Z+ W  Z) L# q, \1 ]            i=0;0 I# r4 C/ m  [& U8 T
            j++;
7 i2 u; S: ~0 a0 ?        }
& z8 z+ \$ _9 t2 R& P        */
+ |! A# Z3 d+ V3 C* e
: g: T( R9 V# g5 a       asm(" nop");
# X/ c' f2 K5 Z- i( B, w9 m: Y* S9 p" h/ |* Q4 Q, M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ y- w, B2 T" N# d9 _+ g5 s    }# A! n$ V8 @) D7 c4 k- ]- M

. i! q6 r5 o# c# Z& Q. B+ v* L    /*检查UPP传输的数据是否正确 (loopback modes only)*/" s5 ^( R8 [: E" O7 [! u
    //UARTprintf( "i=%d\n",i);6 G% s% L& t$ k) c7 y
    //UARTprintf( "j=%d\n",j);4 x+ c* J! T9 [$ ]
    UARTPuts("Data mismatch in buffers.\n",-2);3 [) d* A3 X* |& n; ^$ b
    if (upp_interrupt_count == 2 && upp_error_count == 0)5 T* O0 ?9 U2 a
    {
/ `- E6 p; i7 B- }" V. ]8 f) E8 `        for (i = 0; i<upp_frame_size; i++)
1 o8 {. w* A4 I% }# R2 l        {& V$ X7 g! H+ v) D6 N  s- U; a
            if (upp_buffer_a != upp_buffer_b)$ {: `# M5 g6 t. J  Z
            {
: Q5 Q- A& s, G                upp_error_count++;' |; u; x! ?- q% I1 W7 t& i
            }
3 {$ ^3 h- ~$ j- g' S: |        }5 }- q4 s9 ?8 P* ]7 ?
    }. Y7 V1 {% s2 C

8 B8 u: w5 a% b% S; e    /* 报告通信结果*/* X( J" P2 k# q& e; s  [( X
    if(upp_error_count != 0)9 A# V6 l7 `: l$ E
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 j7 h: S/ x; i1 |
    else$ k' p: ~" k& L: f( m! f1 f8 y$ N# p
        UARTPuts("uPP transfers complete!\n",-2);
& f0 A9 w6 ]7 O" n7 E  B8 v8 W5 L8 B: B7 Y! g1 |
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ B. D7 D' v/ y7 x
    UARTGets(ch,2);
& k: |; U2 _+ T5 S- X/ z    UARTPuts("\n", -2);( i, b! H" k  h- _

9 F% j1 U' K) ~& }  b6 Y' K: E    if(ch[0] == 'y')
" z9 C! i$ r2 R3 X    {, B" h3 ]0 v. Y. j! M1 o
        /*打印全部读到的数据*/( w: i2 [& ]. ^
        for(i=0; i<upp_frame_size; )4 r6 T- L( P* h- ^2 W- l& U
        {
- q5 v+ n+ M/ X) B% i, p" v& b' C            for(j=0; j<5; j++)
0 ?* j- o# |9 V1 [% H            {
( p$ I3 x6 y: E* Z) n8 a  d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
0 c+ z! j# h4 G" r% z. |                i++;6 S" _% l" ^( u1 I
                //if(i >= 4096)/ {& n) L* j  [" `
                //    break;
' I0 ~. w5 ?3 z# l/ [1 L. w6 _' t1 l/ q$ s& C* B% Y8 U. g$ w
            }
. f3 T4 D8 h  J3 _            UARTPuts("\n",-2);$ b% i6 S+ \, `+ h% y4 ?
        }' c! E* s) N# K1 T) o
    }! x/ }% a* h+ Y

6 y' k* w$ C( U  L}

8 b! L( d! {6 f$ W' Z; Z( \: k- l

& M  i) o( {7 H
2 p) U1 p1 O3 ]( @2 M; M8 s
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 o* P2 }1 D2 @% \

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. @, Z, t& j. N1 c9 E+ e





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