嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 `! ], z2 j8 H% s; Y" Q. q
Void UPP_TASK(Void)- O* R1 u- ]9 [. O- H- j! t& `' W
{) h% y( f3 D9 V1 y5 t/ ?( x
+ u  K4 |% b1 z# s
    int i,j,k,target_int_count=2;
& e% }' D# a4 J6 b$ V8 q( H% T+ t    char ch[2];
, y8 W7 t6 @8 X: }6 G
& K1 }: |+ J4 K0 B& U0 b2 Z* ~" J" T1 I5 m* z
7 Q3 W: |/ U* s6 R% {6 U
    upp_interrupt_count  = 0;# \3 F3 G7 D0 \, z
    upp_error_count = 0;" p2 _' j% k- T5 m+ R8 H) _2 o/ l0 ]7 o

& _; J2 _, d! V2 {  o  \0 S; M1 s    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 ^7 t( p; g1 t. Y/ d0 @7 j( h
    // Initialize data buffers4 l# p4 ?! G( k
    for (i = 0; i < upp_frame_size; i++)
3 {( L7 W# q; Q) T6 o+ c4 y" y    {, b, H% Y' @( A" ~  i4 i
       upp_buffer_b =i;
2 @6 K2 P5 Y3 a. z. _: ~% z       upp_buffer_a = 0xDEAD;! d1 I1 R: ~1 `# j1 S2 V. C
    }
, A# z8 p  u. @# Y- o
6 D+ Z) ^/ |! t% Z1 p, d    //for(i=0;i<1024;i++)! }1 s5 T0 E: y! y6 S( j
    //    temp=0;
0 Y6 o/ I) T$ J7 k2 e' x
9 q/ C0 w- L+ S$ G0 ^8 X; i    //UPPReset();
$ Q4 [$ ?- s$ @8 D3 k# N) }    /*启动UPP DMA传输*/5 X% F$ q* }  m0 D0 a9 h# r( @/ A
    UARTPuts("upp_prog_dma_i\n",-2);1 u$ F9 b( b' J$ ^$ ?& v
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" F# u, h4 w0 X. J, I) i& u3 C' b    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, j$ n6 v% u+ z" V' B" @
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 F9 U5 Y. f: {& [# j& ~! ?
4 |6 ^# i/ {5 k6 n9 {) [1 |
    UARTPuts("upp_prog_dma_i\n",-2);0 N+ [  q; Y0 c0 f6 L
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- g5 m$ c) ?9 ]* G& @6 s$ t  E    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. B% B- T" s. e" v' a' O1 a. R5 s3 Y8 Y
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ E9 R2 w! f2 J: ]+ M' D9 @
; j6 h2 ^1 h+ Y4 |; h% {' P) V    /*等待UPP传输完毕*/
* y' }' y$ ~7 L7 g5 y9 \, n    //i=0;
) x  y3 k9 Z, h$ x7 _6 d5 z( P    //j=0;- c  @3 U- x9 g/ y: T2 z  I1 [9 p
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" E* R. @( p: \0 d0 O: a
    {; ^+ M% G: X2 j. y% _. `: v8 L
        /*  测试UPP传输的同时操作普通DDR数据
! j8 T  L! {# D! I' R/ F4 c        temp=i;) h! p  b1 w; w' l
        i++;
% X6 P: F1 n+ L) F9 h' `        if(i==1024)
5 `- F$ p* [* z# Y        {
, \+ D2 u# W/ e1 l) ^, q; e            i=0;& E3 Z1 R- N! L
            j++;
* Y; ~: S; @1 x7 f        }
* ]- \- n- r; N# q' C$ n- A! z        */; O1 k, P6 r9 @+ ]/ m# y
* v! A! \( q8 t; a: y
       asm(" nop");8 J: c* @% |3 [' P4 ]5 f) b! ]

' G- L# |; u& E# {. R! o' d% s, D; N       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  r+ }( O* j6 _$ O& p    }! F9 x3 `: I5 P2 c" U
/ |( l& {# L! k& |9 P" x3 L
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  K  M; u# g  |% i9 q6 |    //UARTprintf( "i=%d\n",i);& l2 g( s2 W7 F
    //UARTprintf( "j=%d\n",j);& |) ^) ?2 o! ]$ ^) N  R2 P
    UARTPuts("Data mismatch in buffers.\n",-2);2 \, j4 ^; g; i6 G! c, b
    if (upp_interrupt_count == 2 && upp_error_count == 0)# ^! z  k# i, M* E
    {
1 X, k# k4 B6 }8 {* }3 q        for (i = 0; i<upp_frame_size; i++)
2 ?* _  F6 W& s. c        {# F, [/ z6 S3 N8 j0 b
            if (upp_buffer_a != upp_buffer_b)
: s3 y9 p& m- r4 t; `& V( `  l            {
  M! n# P1 b3 ?                upp_error_count++;
+ K# W* A8 K7 D            }
+ a- w% g$ a+ v3 ~        }' O7 v; y" \# G: f2 B' h# o5 M. j+ l$ Z
    }
# I3 Y& j% ^! k% s  j# X& m* D' G0 D* G* n1 @
    /* 报告通信结果*/
) }" @" B; u/ T- k    if(upp_error_count != 0)7 T; ^+ H0 u0 e! S- G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ J/ O, L$ f# t% M: F# P- [7 t0 v    else8 c4 V8 R/ `$ c/ L1 t
        UARTPuts("uPP transfers complete!\n",-2);8 W  w9 G4 z) ^% m

4 ~. E3 X8 i: s; X    UARTPuts("Do you want to print all the data?(y/n)   ",-2);" O; A" e( s2 |, j! i' E  u
    UARTGets(ch,2);, H5 E$ |1 R' E5 L
    UARTPuts("\n", -2);
, @+ \$ d  f" E6 b
: _9 w; s7 C0 v# ]- p, w    if(ch[0] == 'y')
8 l1 w' S. D: ]; {0 R    {
, F2 v+ Q7 c" a  b6 X7 y1 I* \* H        /*打印全部读到的数据*/) Y$ U' M  |/ q0 N& Q& @
        for(i=0; i<upp_frame_size; )
; N  R4 N- I- r/ n        {' o' \6 M: Y. j& [, t* F5 i# c
            for(j=0; j<5; j++)
1 C1 H* f5 r- N" k            {% A9 I2 `2 t) p
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- |0 s  u! w$ v( Z/ `                i++;
7 n5 R; Y" B6 V3 _, W                //if(i >= 4096)$ [! L$ Z5 j  g' l, T7 N
                //    break;
! g* y/ u% t$ i; [2 y6 ?5 o3 P5 n/ E. n$ `
            }
. S2 T0 N4 T9 S3 x+ g* L            UARTPuts("\n",-2);
3 p' R( D# ]6 Q2 E0 T1 V        }
9 R) ^2 P, h% J& B! I/ V9 b    }) ?& c* g7 n4 [! O

6 j6 I) k0 R4 g  y5 t# m; b9 ?# p}
* ^0 p/ d5 ]) k* Z( @! ?

' N' ^4 h5 i, {  S+ ~
4 r" V# k( T" V2 T
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ u' P% y3 C# u
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 l% @2 R- B8 g7 E7 M





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