嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* y( a' i8 s" @1 j& e' n0 @! R
Void UPP_TASK(Void). G9 f/ r: D4 h6 P2 m0 J: U7 {2 Y
{/ t( ]1 u  C+ I! N! s" C! O
4 o7 p2 [  n8 }3 O4 Z
    int i,j,k,target_int_count=2;
* `. S! h( l- \    char ch[2];" t( q* C7 ~7 i" N. r2 l
" B/ c6 N! \! M" X) O9 i
* \  L9 W- j7 g& q
8 `5 u1 h2 k9 `) Q$ B0 T& r
    upp_interrupt_count  = 0;8 S  O# k' y% z( ^, U
    upp_error_count = 0;" M0 B6 ?4 d$ M" ~: e

: O$ s2 j2 z5 y# R  w! c    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 z6 W" t, O* k    // Initialize data buffers" W- T# t% `( p0 ~
    for (i = 0; i < upp_frame_size; i++)
. U# i6 E" |5 L( @$ ~    {& {( |5 _% P: V+ @3 }
       upp_buffer_b =i;
# c+ m/ l3 p$ d- t5 p. H2 w0 S       upp_buffer_a = 0xDEAD;' }1 G, p: G8 ^
    }
0 W7 L, b8 N0 i" J% q" y
$ s: g& F+ N2 W/ L; Z& G) {: }    //for(i=0;i<1024;i++)
0 _' v' ~7 I$ Z( m) c    //    temp=0;( k* r, J' a* p

7 f" Q* Z0 G7 A& q8 L2 e& q    //UPPReset();
0 Y+ d2 e, z9 z/ ]# S4 l6 \    /*启动UPP DMA传输*/- R* P3 {9 T, M  X1 s
    UARTPuts("upp_prog_dma_i\n",-2);$ S1 K& _5 |& ]
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- |6 {7 J7 e- B" R4 A9 d% Z5 K    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. X/ V2 b% e( g3 r( j+ N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# }$ j* m+ u  F: I8 F; g8 v; M# ?6 d+ v
    UARTPuts("upp_prog_dma_i\n",-2);+ a/ D5 ]' j. f# A& k2 m) r
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: M' Z$ J! c6 P0 N% s! @  w  ^2 P4 `
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ ~; Q% C0 l5 W$ H    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ |. T8 U$ ~/ [
, E: y: g% q. o9 P
    /*等待UPP传输完毕*/- y5 c7 w8 e/ R" a
    //i=0;
5 z- P: M. A" j$ L+ L    //j=0;
8 ~0 J: ?% i- Q* l7 ?4 f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# ^: V4 j- ~1 N
    {* e1 \( h# _  [$ W" m2 @
        /*  测试UPP传输的同时操作普通DDR数据
: Z; z7 f% k" w6 H' _2 Z        temp=i;
, @) a% P6 V% y        i++;' N  W5 r0 w, c; e. F; ~; @
        if(i==1024)
  ^  ?) y! r/ ^$ I3 X: {        {2 T+ J5 S" ]2 _6 z
            i=0;
" K+ l1 k+ A% h  S0 l            j++;
) L( O+ x7 N. q  Q3 Q: Q        }
+ U. K& k8 d* p        */
5 v6 T8 G3 X3 P( D8 c& R; o9 c! _+ D: @" b4 w. l* ~5 l
       asm(" nop");6 y3 D+ P( Z. x( e# J
2 N; g& Q7 P" Q3 d. O
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 Z5 ^. P1 y( e, N+ L  m    }
  a- P' [# s+ ~9 E1 S% X& [: S
1 \- T% Z5 K6 [0 ^3 G9 v* H9 ]    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. D0 R, P& @6 J* s( B2 [& Q* r    //UARTprintf( "i=%d\n",i);
, T; r7 ^% ^/ X/ t; o, E    //UARTprintf( "j=%d\n",j);
5 Q7 M* C9 s; \    UARTPuts("Data mismatch in buffers.\n",-2);
; A/ L% J/ `' ^    if (upp_interrupt_count == 2 && upp_error_count == 0)6 W/ q9 F$ y3 `! K  n
    {
- z1 |" p! i# X0 Z1 ^        for (i = 0; i<upp_frame_size; i++)
! o) @0 \+ j4 X# `        {
* L1 G! I4 @  R( X            if (upp_buffer_a != upp_buffer_b)" V6 o' X) ?! d9 q3 W
            {0 N" J0 ^9 o' u/ @3 a
                upp_error_count++;% b$ f5 s- j2 l. i
            }
. F7 J8 z7 ?" v) w; g) m+ i        }7 U% p& w' T& e8 P5 }3 g) X, u9 _
    }
( Z) r5 r0 k% `0 {6 f1 }( a+ _: l( B4 X& m9 V: }
    /* 报告通信结果*/: Y  o) l( Z3 u. j
    if(upp_error_count != 0)
1 Y  Z" P' _: l; s        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ s3 A) W3 Y0 M/ u
    else
+ G1 {7 {$ Q) P+ S5 I        UARTPuts("uPP transfers complete!\n",-2);
) _5 A6 q5 J; G- W$ d. h; U$ V; X6 M9 z0 _7 |
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* Z: g4 u' B% Z6 K' r* X: Z2 H    UARTGets(ch,2);. N" A* c" A9 u* Y  I  ?/ X
    UARTPuts("\n", -2);
/ t  g, R9 d; m- r( W! P9 n: C) Z0 `- ?! A0 i
    if(ch[0] == 'y')
9 v4 k; z6 m1 \! L# L5 ]3 g( a    {8 h' r) N" z  j$ f6 S$ |
        /*打印全部读到的数据*/) `5 U% r9 {2 l# j) N2 s: C
        for(i=0; i<upp_frame_size; )
& ?! n5 d# j2 |& d8 Z% W- M        {+ y2 ]5 Q7 [" ?. D9 v# H, L6 C( C
            for(j=0; j<5; j++)0 P6 y' [6 i2 G4 i" {5 e1 Q' A; u1 H
            {5 v& q9 p' ?) P7 Q% N# \8 C# f: O) h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% ]' ~8 p/ x7 r8 ^7 `! p
                i++;
6 e/ X# p/ s& T( s: D                //if(i >= 4096)
8 [) j# o' s% w; P+ G7 a                //    break;
* Z' P: V* p) i4 F0 X) b. e$ k0 v2 Z  ]/ `
            }
8 w3 w) a9 I) [) I- _            UARTPuts("\n",-2);, v. g% ]/ f  d% \0 M7 S
        }5 \5 g& L# F7 A2 @9 H+ t/ |( |2 E
    }
4 N& m5 L- [0 j9 Z9 L1 c- ]8 d) i7 a. u; m7 l
}
; E3 n- w* F  }7 r5 b/ Z1 ^

: t( s) i% E7 g7 ~0 H; h, g4 ^: e- v% R/ |+ D5 Z# t3 g

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 |* V! V$ j% V9 ~- O, T: _
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ E# ~( Q" u% p. f: l2 E/ P; S





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