嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- n0 ?) Z! V  Y' `( p! ^% |( S
Void UPP_TASK(Void)
& z  k" a. |/ s. C{
% I5 y* i+ N/ |9 R$ A. t. R
! z; {1 ?( }" `8 f% i    int i,j,k,target_int_count=2;
* `  o9 _+ z8 H: Y2 }    char ch[2];
! G9 e! C& `7 O7 e% f7 v; M
. I: T+ W7 y2 e4 Z! P$ o
: n5 L9 Z) |/ m. z4 _: C1 T0 k* {
    upp_interrupt_count  = 0;6 l) y# y4 g4 ^. k
    upp_error_count = 0;! p) t; ^! |9 O- I0 B
7 L' F7 X( f6 e; n
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; `  h. K. s- D+ m* w    // Initialize data buffers, s' v1 V" f0 a# q. {
    for (i = 0; i < upp_frame_size; i++)" C4 b4 ^( w( p' X
    {
( R( o2 y: e: v, P; S       upp_buffer_b =i;
5 u* L. n) e  k7 r0 E' c2 i8 T6 o# L       upp_buffer_a = 0xDEAD;3 t# g+ x5 @6 I  \
    }
- f) `5 ^7 I3 g
; I4 y& T& p+ y) q6 g9 r0 R/ k    //for(i=0;i<1024;i++)8 y" i9 ?; f. G0 g# \7 `) C7 D3 q
    //    temp=0;
, W+ r) p& c" ?* H; }8 }4 P% i2 b. y( `/ l
    //UPPReset();3 ?# Z. d0 J3 A& Q; I2 I
    /*启动UPP DMA传输*/8 N# h, v4 D- K0 w! ]& M
    UARTPuts("upp_prog_dma_i\n",-2);& C9 Z3 M" v. }8 R: R' s! [
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 d( d. X5 w6 T5 Z4 @  p6 p' K
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 y. S: v5 Z4 F( {) s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% m, j3 B: O; |+ O0 F1 o1 i! \. u! O" O- T6 Z& ?
    UARTPuts("upp_prog_dma_i\n",-2);
0 u4 ^) c% x/ G1 T    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# M* X0 p. }, u; _3 F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 k+ V: X  w6 X+ b    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; N' u2 N; `6 |  `5 U  ?$ N
4 E- b3 V& {3 j" D5 e! l0 s' q    /*等待UPP传输完毕*/- ^1 j8 n) {' I" z$ Z1 P! i% g( a
    //i=0;- E3 y- R. b& j7 u- K5 u0 _8 S( E
    //j=0;; z9 T9 d- n. ?+ Y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" y- D! ~, z  s/ r, K$ S    {5 t4 z) c, I5 F& P/ n  T4 n$ x
        /*  测试UPP传输的同时操作普通DDR数据0 ?' D5 S  t) i
        temp=i;
9 f3 }% C/ P+ _2 S8 Y. ?1 q+ F& G        i++;
# u$ w2 S  V! n9 x! U2 }        if(i==1024)
# K0 U# [% F5 {  d        {
, H3 {3 H3 }1 a  ^4 p' J# a' \7 I2 T            i=0;
. L& C" l$ ~, }) n, E            j++;
& _$ L" K" h/ Z* {5 \( z        }) S( u! P9 d6 s! }1 H1 h3 G
        */
  h) ?/ l' r! \8 f9 L8 A4 W' h7 h6 M9 _3 S
       asm(" nop");
( n1 u* K6 M, f: b* R& o
! U3 [' U8 j) B& W# Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: f, b* Z- w( v/ D  j' R
    }
$ X. S2 q& `# s. h: G3 L& S
9 A% g/ t. U% U3 s  P5 z7 g* P6 K    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  V  ]" Z/ @7 y# f1 }    //UARTprintf( "i=%d\n",i);) `# v: A; g3 ^! V8 [" d: w0 f/ E0 K
    //UARTprintf( "j=%d\n",j);4 m! y, c8 ?6 D0 v
    UARTPuts("Data mismatch in buffers.\n",-2);2 y" B- v$ D' N5 N6 q% c
    if (upp_interrupt_count == 2 && upp_error_count == 0)
" i1 q8 E3 I0 q: i    {2 N& T# t3 D; _$ O5 J
        for (i = 0; i<upp_frame_size; i++)2 L6 Y" {+ T# Q9 E
        {
$ {/ L* [% P5 n            if (upp_buffer_a != upp_buffer_b)5 _$ _, {) M& H5 U) N0 b, |
            {
1 a* |# J3 L6 S+ h                upp_error_count++;
7 Y. i% ^5 O0 Q8 ^& c2 Q8 u            }6 r" X# `1 k4 A5 y. {
        }
6 K8 r0 u/ r/ k    }
1 G3 H  x4 ?+ S' H+ G( A8 t3 M; Z! X2 _0 y  X. d- q% @% E
    /* 报告通信结果*/
  Z8 q5 P  g/ ~  O    if(upp_error_count != 0)- \8 s. o9 i: J/ W, ~5 @
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- i  ]- f/ {: W& f* A
    else
' z, F+ ^4 a4 y' O) B- w6 Q2 n  P        UARTPuts("uPP transfers complete!\n",-2);
4 n" h5 l: o! _; K) P% N, e/ E. v# W7 X  L2 N" {4 D5 O
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# O2 n' P' o! y- J$ B* B/ A    UARTGets(ch,2);
6 @* ^8 H6 ?% ^& O" J9 T    UARTPuts("\n", -2);
$ c7 F1 a5 O$ a, J8 }+ l5 e% P5 t# s9 C2 [+ ]. w) t" i- Z
    if(ch[0] == 'y')
; s$ m% W  D% D* m  v    {& G; l: Q$ @" g
        /*打印全部读到的数据*/
; |$ t: y) S7 [/ M* q/ f        for(i=0; i<upp_frame_size; )
1 q. k$ j0 _9 K; ~4 q        {: t0 j0 ]6 `0 F8 R3 Q
            for(j=0; j<5; j++)
: o. k3 ]1 t. `1 m: `* u            {
5 x, T. I) T4 C" t8 K, [) h" z" W                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 M3 e+ m; Q  X# z& D, i* u
                i++;
6 c  j4 g5 b1 O; `: d  K                //if(i >= 4096)
4 B& J9 V2 \* n2 h- P/ ?0 o& C5 w# Z                //    break;) }: q9 t- k8 d! l
1 U8 R4 q4 l2 A
            }7 B; o" W( E" b, X4 |: k- e  q
            UARTPuts("\n",-2);& ]4 [# @8 ~$ [7 Y9 k
        }
# N& t/ A) }" n; z( E    }
( i; J4 M% w; N4 O
- }% D6 g* R. F9 O}
( W- ], X9 G9 ~- e# W2 s; e: O

" |+ W. s) A+ m" B' j4 R5 q4 W% y* R4 q1 @

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& W# a: \" ~5 y2 {7 u2 t2 p

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ S' J+ X8 ?; B  y* b




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