嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& ~# Z1 n% _8 x, D# |, ~
Void UPP_TASK(Void)
; i3 ~4 X4 @, M+ s( \/ O5 K2 B{4 c& d+ o0 D1 H, I+ \8 }
% v, f9 B& X! O  P9 f
    int i,j,k,target_int_count=2;
2 H8 C# Z4 z2 q6 V    char ch[2];
; r- ~9 R1 G* T; w' ]. F  K1 C9 K' I- ^) \; ]* O% X5 i' b9 J6 y: O+ R
5 _1 c  S  m  D# [
$ r# u) s2 O( V. u+ j9 k
    upp_interrupt_count  = 0;$ Q. v* u+ B8 [& \  d
    upp_error_count = 0;
/ m/ i* m$ ?  [" P" C' N* j: G4 {; ?. K- j' P2 z. p+ n- a
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 a& t( _$ N6 z: r6 `; O6 H
    // Initialize data buffers
* [+ e; S/ }# a; d    for (i = 0; i < upp_frame_size; i++); q8 v/ f: G* d4 ^- F* X0 ^
    {) Y' Q4 g% Z1 L: \  a! a' s
       upp_buffer_b =i;
( F' `) B6 q9 W9 p       upp_buffer_a = 0xDEAD;
. F& {) Q9 |+ p; Q$ h$ m3 N& C    }
& h# p& e: S3 Q9 D+ j( u& M/ ?9 m) h, f3 V1 r! _, a2 K8 t$ r
    //for(i=0;i<1024;i++)
# o% c( {2 P& b8 C% u. O! b* {    //    temp=0;
2 V- r% |4 t& B% P
  X+ @% E7 T# I1 [    //UPPReset();
9 E( C' }9 R3 [1 m' j5 d    /*启动UPP DMA传输*/
: ^; I( p9 R& I3 M# z7 r3 `1 i& K    UARTPuts("upp_prog_dma_i\n",-2);
7 ^7 C$ X1 y8 L3 ?    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% H* z$ K5 S4 @3 ~' j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: n( V  ~$ {4 v
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 ]" ?7 z/ u3 @0 z. P
" M* D+ e& s( T7 H* I    UARTPuts("upp_prog_dma_i\n",-2);
5 Y( M2 N! n+ B    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  T& k; E1 R( d
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, _% F: H/ g# B" {0 F2 Y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' U3 \; J) `$ \2 w: E
( U6 y5 n( B( D    /*等待UPP传输完毕*/
9 N) p' b0 i3 j: d8 _( `    //i=0;
* g7 m! s8 Z- E+ y& q; m( P    //j=0;
7 ?  }- {3 a( p7 J% ~    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ N0 |" L$ D8 \/ i
    {
4 M+ ~9 Y6 F- ~8 |$ v5 ~3 `        /*  测试UPP传输的同时操作普通DDR数据
0 z, b* h4 I* r' l2 u+ ?        temp=i;. _' ~! j3 E7 r, `/ N/ R; O+ H; P- @
        i++;2 B$ t- F# B$ L' g: J' G9 }1 c* K
        if(i==1024). _! H5 Y6 K2 B' }- F- M
        {
1 A+ k3 A1 ~* s) Y) R: |6 M& H            i=0;
- D" v8 ]4 F# r5 ?! t5 v6 ]  L            j++;
: M1 n% \- }) p8 g( i        }$ _0 G# X. B4 p& Z: T/ c& q8 L0 b
        */2 X: ?" }2 r( B( Z

2 `0 K' d1 `' z8 X       asm(" nop");
; K' B2 m3 k: Y* i: \& U6 W0 w! A8 l' j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 U; y0 X* b) J    }6 L; ]6 f8 z4 P. B( e- ]. M

: l# Z8 s. B) \2 o3 H    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. J0 Y/ S; V: Q0 B    //UARTprintf( "i=%d\n",i);; j/ n" ^; Z3 N; j% S. E
    //UARTprintf( "j=%d\n",j);
; j* Y+ W0 n4 d  g: @- y* d4 b7 I0 R) T    UARTPuts("Data mismatch in buffers.\n",-2);
- ]6 a. F) m! U4 l" [    if (upp_interrupt_count == 2 && upp_error_count == 0)+ R# V9 P# j* n. r1 d- e  r- ]
    {
( h0 u) w  V" i6 i* \3 g        for (i = 0; i<upp_frame_size; i++)
1 @) h" b  d) a1 u7 f4 v; Q        {' ^! U) P4 L+ W) Q
            if (upp_buffer_a != upp_buffer_b)6 c" G( o) H& M. X9 K$ I- v+ U" @
            {
" M0 j; s& f" D5 N( }/ f$ O                upp_error_count++;
7 ?0 Z# ?" ?' Y1 a( X; J            }/ r! W! [4 w; X/ }6 e6 A$ b
        }: m; R  @; w* }4 H8 w
    }
, L7 ]3 m3 d# S. d+ j5 S. [$ r5 f9 c" v  X$ q4 ]8 ?- V4 |9 Z
    /* 报告通信结果*/9 B* k# n4 C+ j' H9 l- `
    if(upp_error_count != 0)
+ s8 J; \$ ^( X        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 L: O4 |, a1 D4 ^' q2 _
    else7 F" q% I7 A9 {' N
        UARTPuts("uPP transfers complete!\n",-2);
2 Y. |' k$ Q3 J- D) z/ _/ z
  U! i7 a# K& y3 o8 W$ y6 y3 n    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- N: r2 A6 k1 [; H1 J# u; v' n+ F$ R3 b3 j    UARTGets(ch,2);
" O+ i2 t/ k& T1 i' r    UARTPuts("\n", -2);/ |/ ?  \8 }1 @/ ]7 `. p- z+ s) I, h
, w  }8 O8 |1 R
    if(ch[0] == 'y')3 B! J" g3 o* C
    {
1 ?1 e+ R+ O# B  ?! `        /*打印全部读到的数据*/- A2 A. E: R3 Y$ Y
        for(i=0; i<upp_frame_size; )+ S: G, H( _% a( X  {% D# q+ B
        {
# h) z6 @9 D. W& \# H1 \4 `            for(j=0; j<5; j++)
3 s- @% c9 V5 M+ f4 O            {% X7 j" o! A2 A. j3 v1 D
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( h. m. G- M5 E
                i++;. V. C& p6 X  U: @4 A
                //if(i >= 4096)+ b# `' m, u! i2 u
                //    break;
" r0 U% ]) G; s- l9 N
) ^- Y7 Z, q2 k7 [8 p/ v  h6 u            }% n1 z; ~+ P% s8 N' [
            UARTPuts("\n",-2);  q  r" h7 B& e' ^
        }
0 `3 B7 J6 i! I9 V) L    }/ G% b" Q7 b4 |* W
4 A/ Z" A4 J  l. U  ?9 g$ |" c) ^' Z
}
( A! Z& A' s" B- _% `

% x# j* A3 ]5 H2 f5 y/ ?
  q$ {7 C9 k( q/ e
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 M! u9 \7 D( J) r6 P

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, T0 v. F5 Z+ M1 H" d/ u




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