嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  c& ]8 n! k- W: e. |, A
Void UPP_TASK(Void)
" f. t# d4 O4 V6 l, c6 I{" j3 Q/ W& y; B& U. `8 F, b

7 @4 G2 U. O+ _$ a5 `& Q    int i,j,k,target_int_count=2;
+ r  r3 V& `1 u* M3 `    char ch[2];
* l% H' `1 H8 u( k$ I, m. y, \, C& _9 [
# q. V& r$ a  m8 g0 X

' Y! ?6 O% i! }. V    upp_interrupt_count  = 0;
# E  W4 r# O* L' X5 i    upp_error_count = 0;
7 F1 l( u; _/ x
3 l5 g$ q" x; x" c3 L5 p    UARTPuts("\tResetting uPP buffers...\r\n",-2);& a4 p; l: I  u/ y
    // Initialize data buffers7 O9 N& \5 T5 ]
    for (i = 0; i < upp_frame_size; i++)' Z8 _' z: a! M' A2 g
    {
& q9 J; R5 O; ]! y" _% r* x5 N       upp_buffer_b =i;
3 c6 N% ^9 L+ N  R3 \! V       upp_buffer_a = 0xDEAD;6 ~6 U' c- y5 [& L' i$ u9 B2 Y
    }
% X4 l8 m- y1 x3 r4 N# `2 D8 j3 l/ A' y1 M! D* l* E
    //for(i=0;i<1024;i++), ]- U3 n( z. P2 S+ a" h
    //    temp=0;
3 s, Q: T/ f) n( H9 j' w7 x5 i/ C
    //UPPReset();
' \/ m" s# _3 D* R" \+ ^    /*启动UPP DMA传输*/
9 c1 \; ]7 O$ q" ?/ ]    UARTPuts("upp_prog_dma_i\n",-2);. m+ \. H# y+ e( j, Z+ W. u4 N
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- z( ?/ f" I! N2 P  N; o
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; n/ P" e" o% J0 E    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ [; a8 ]7 q8 g! p* c) y7 |. U
: t' n4 {1 G" M; K3 Z
    UARTPuts("upp_prog_dma_i\n",-2);
; u! @. j. ], w7 z# G; T    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* r; j8 Q1 r+ W, y    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* g" w' Y; T, W; j4 b2 U8 i# D    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 c6 j' J% w& Z4 N4 @
4 B% Z( g4 G) ~
    /*等待UPP传输完毕*/# m4 D5 w6 P3 M" G% b
    //i=0;
3 l! u6 B3 @1 ~$ \. S7 z    //j=0;$ P; Q  g4 v& E3 C5 [7 D  d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 t. G3 Y" n- C. ^* |    {
2 @9 j: u2 p3 a$ ~        /*  测试UPP传输的同时操作普通DDR数据
" o1 v4 e- q2 ^3 a        temp=i;7 Z" n* A- V  H' O! n' ?5 f
        i++;: A2 x& H) p6 e, ]9 \
        if(i==1024)
1 \5 S% R8 E& _2 A9 @& \        {, Z# Z8 Y& }" L+ z
            i=0;
! Y$ N' j- \, b" D6 V5 X            j++;
6 N' j! \" D- h9 _* x. u        }
( v" t3 ~) R, M4 B( K1 P* B        *// ]: @3 E! c5 V5 l) x

$ O6 ]* l3 R/ e8 ~0 k4 t, C       asm(" nop");) `9 [# T# I; O3 h& g1 |5 E

# }. O8 M; Y. m, ?, Q0 s! {       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' i; |- s1 g  ^8 g7 B5 t
    }: ]/ f) W2 \7 r0 e1 E, l" V

2 p) R/ Z4 i* z. u0 |( h    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 ]1 c0 G7 F) h" _* O8 ~* y
    //UARTprintf( "i=%d\n",i);
) ?* O1 ]3 H. X* l5 r    //UARTprintf( "j=%d\n",j);
! o! U* V# U% H( Q3 l* F    UARTPuts("Data mismatch in buffers.\n",-2);
4 }- x' u0 \& i; |0 W# U. O    if (upp_interrupt_count == 2 && upp_error_count == 0)* U0 `- D. s" N6 V4 c7 f8 n
    {
' R1 ^1 G8 `1 A& O/ O, c+ |        for (i = 0; i<upp_frame_size; i++)3 Z* f0 g$ z% ^' q3 `4 N
        {
1 y" i: J8 s; _/ @- q/ y  V- B3 W            if (upp_buffer_a != upp_buffer_b)! k/ r4 J3 f) x2 e) k" P
            {
; O: g, ]8 W0 o. _                upp_error_count++;4 U, W0 ~, H( D+ G% q
            }
4 T% {3 Q- v( G" N5 P7 [        }8 M- m, U5 N) @, G+ d" Y# z
    }
3 L- ^  {- V, I! x
. ?0 c( E1 X( X2 B    /* 报告通信结果*/
2 ?$ `, K0 G1 l3 I    if(upp_error_count != 0)" x) s: S3 T9 h1 o- \4 K. I
        UARTprintf( "upp_error_count=%d\n",upp_error_count);) e6 j; ~$ ]# X
    else" K! G9 @2 B+ J% Y$ L
        UARTPuts("uPP transfers complete!\n",-2);/ |; y. O# Q7 x8 T' L

; z7 x. z& k, Q- O0 [    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 H0 Q6 J2 o2 i. B7 l& c; O    UARTGets(ch,2);$ y! a7 P! Q* C& a, V
    UARTPuts("\n", -2);
& a0 `+ y# @% c  i8 F
0 R+ [* y. K; T8 Y5 e  D" `    if(ch[0] == 'y')
" p% A) _4 L/ C& y    {& \) s8 \  Q, Y9 q
        /*打印全部读到的数据*/
; Y  }5 q- p( w        for(i=0; i<upp_frame_size; )
* X3 M9 t. x: W4 ]" b) m/ N        {
5 L$ i( e  Q/ u7 W: ~2 r. K            for(j=0; j<5; j++)
2 ^1 w& |8 D& X1 l5 j/ O            {  C& H3 w& B. E- |3 F1 `+ d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 D& V0 c: T1 T$ S  u: |' K
                i++;& ?0 H. D+ `8 N0 j1 A8 v/ b* s0 m
                //if(i >= 4096)2 R2 M) D! P2 C; N, n, G8 A
                //    break;
9 G+ L' [& J* k1 @! q# d9 Q8 E( a4 ~: t5 P6 U1 F& e
            }4 K3 D0 Z6 C: K3 c) `
            UARTPuts("\n",-2);. z, ]0 s5 K5 ]& B* n% m5 G
        }: I) b) x! `% ]1 N4 ]8 R7 X
    }
+ \: X$ Y0 d0 x9 Z4 q: u- x7 }/ m$ S+ e
}

! k7 M% W, _9 N4 L  Q" `% h7 Z

6 b4 u, H* p! Y0 A: Y' y) E) v5 \% M7 w! d: a

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 Q: I4 o9 {, ?; w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) F) j! ~2 b1 Q2 z- }' c





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