嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( D4 `* u7 K1 T
Void UPP_TASK(Void)
( K2 h. e2 t) p7 [! B$ }{1 I3 f4 j0 J4 i8 J  y+ `3 d

4 T  T% C7 }5 f! u' m+ [    int i,j,k,target_int_count=2;8 |, O' c+ }) `! O- S8 `3 D- F
    char ch[2];' H- W2 K6 N+ C& b7 f% T- u# O
; N  w" p8 S; H  g# u2 D1 j8 n
( V* T" l5 Q  y( H% K
7 Q- X$ x7 v& p8 ?" z" v5 I
    upp_interrupt_count  = 0;: U2 Q0 w' @2 X# f: T7 c# z
    upp_error_count = 0;. s  _9 n4 _  y/ g+ m

( A3 t1 M; h- `9 c/ g    UARTPuts("\tResetting uPP buffers...\r\n",-2);( Y8 K$ m) V# L0 I
    // Initialize data buffers
1 P. q3 }$ a' \8 c) J    for (i = 0; i < upp_frame_size; i++)
/ e. n9 t( t# X9 S7 j0 b    {1 n- y2 M/ y' ]1 k: j
       upp_buffer_b =i;# S9 ]+ |" e$ ]' q' e
       upp_buffer_a = 0xDEAD;2 _" w" y4 W: I; t2 R# P7 ]* X
    }0 d( ~) s5 U; p4 Z; J" a" Z
/ c9 c. t/ H: u7 H9 }
    //for(i=0;i<1024;i++)
/ U5 t* d: v  G8 O+ L, [5 F& g  x    //    temp=0;
: k! u: Z+ I$ P* y; n
% ^5 I+ M$ _1 V  f    //UPPReset();% _" R. e% |& d9 z* P7 Y+ S
    /*启动UPP DMA传输*/$ R- L7 C' P; e. [
    UARTPuts("upp_prog_dma_i\n",-2);
/ x1 o; u" f  G! d/ z/ E5 ^    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 _* l9 C/ Q: [1 E: t
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; m. ?+ |3 |4 \7 |4 d9 Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 V8 F( h* g6 W5 m
) E# H2 ]2 C9 C# K    UARTPuts("upp_prog_dma_i\n",-2);9 n0 {9 Z9 V4 {5 c" S0 y9 ^
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, f3 f; W% j4 L  _3 r
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, n0 r' @+ J3 g: g1 ^( P  a+ ^    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 C9 n: J3 D; P$ E& d" Y2 J9 E0 h# F9 Z! ?7 l
    /*等待UPP传输完毕*/
: b5 Z7 v0 g$ @' M) E    //i=0;# j- p  ]9 w: \/ W/ k$ Q% Q! X
    //j=0;4 P6 @9 {. m* b- A( o1 {7 I' S
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 _+ A  r8 R) q  }3 ^( S    {7 p$ E, l, H' F, U. r( L
        /*  测试UPP传输的同时操作普通DDR数据; l- r0 M( b1 ^& h# G# D2 V
        temp=i;
9 ~+ p/ D) D! a3 ?" ?  R        i++;$ g# I8 y5 M' K# B! Z) |
        if(i==1024)5 B9 ^) x3 _8 o8 o8 O
        {4 i! Z- Q/ v1 J4 {) a
            i=0;  b$ D  d# S+ A2 m/ C9 x3 c
            j++;
" j2 U1 E: ]4 U- j- N* U        }2 N* P4 D5 |- r
        */; b1 T* K  j% ~" A# X2 p8 t3 c
! W& a3 `' [  d5 l0 U8 {& P- ?1 K8 p8 _. W
       asm(" nop");
8 ?7 G+ V! W& b8 p# k1 V" m# E1 y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! o* p6 d8 X9 I/ N# b1 ~    }
5 X% b* v- _4 E' x6 t
, s' E5 J: \( C5 M$ ~# H+ }3 R    /*检查UPP传输的数据是否正确 (loopback modes only)*/) y1 O0 a1 b+ G9 F
    //UARTprintf( "i=%d\n",i);% y  P. y% G( w/ {- k
    //UARTprintf( "j=%d\n",j);+ ?4 B; ~6 S- I1 @: U
    UARTPuts("Data mismatch in buffers.\n",-2);& Y0 `* `- |; X  W, K
    if (upp_interrupt_count == 2 && upp_error_count == 0)4 h. J3 a9 d; q. i+ g. b* S
    {1 d1 V  i- k* c, J6 ~
        for (i = 0; i<upp_frame_size; i++)$ X4 Y+ A8 G9 |% Y
        {6 s. p! i- B9 D6 |9 Y, g
            if (upp_buffer_a != upp_buffer_b)
1 v# |) r+ S- F8 m3 ?! a0 q            {- E5 i9 F: d2 o4 g$ m: O, K  d1 {
                upp_error_count++;
6 R+ J$ Z+ G/ S4 _; _            }
/ I3 ^5 F0 |2 ~- y; u& e        }
' S* p5 z) v" K2 t! A5 I    }
- ^" W, p7 f6 }
& U1 {  G  a) y' f    /* 报告通信结果*/
& B! Y# R8 j& ]* n; D( I    if(upp_error_count != 0)& {9 u. f3 x  r3 w; r
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) O7 c) V8 X5 q+ S! n" p    else: L" y6 K) i' B% w# \% X
        UARTPuts("uPP transfers complete!\n",-2);
+ z- B  c# D& F. \9 a7 G( i* h% v& k5 d6 p; u
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 x) j) U5 P& W; ]* X9 s1 \    UARTGets(ch,2);
8 X: L7 L1 z1 f8 q( O( r    UARTPuts("\n", -2);
" E: A' ~) K7 z- @/ W' T
1 Q) _* f2 Z: ?* f* y$ ^    if(ch[0] == 'y')
4 Y( n. J* x. H6 |    {" `; d5 r' J* E: Y7 F- o1 A
        /*打印全部读到的数据*/8 a$ C7 [" K' z4 F! A+ R  M2 ^
        for(i=0; i<upp_frame_size; )( e' v  [  S. a
        {/ w  n# E9 s) H+ }
            for(j=0; j<5; j++)( q. Q& b. x8 j  ]8 Z7 K0 q* w
            {
4 K6 h! _2 i4 h: [; C2 v                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 m0 r/ d3 b8 }! z                i++;2 ]3 K9 `3 M8 k7 s; ~% i; C1 O
                //if(i >= 4096)1 C* @. H$ \' e% M
                //    break;
. o0 D, X: [8 p( `1 U- n$ }
" o1 {, ~; b  E5 |1 T# E            }
, B' u4 Y8 B' {! v7 Q1 L            UARTPuts("\n",-2);. ~0 t; ]* c) T: M/ b' Y5 V+ h
        }/ ]3 B* p' W* g! s- `2 Y) a  u  {" y' B
    }
3 Q, N5 A. @; c; f6 {$ G
7 K$ t1 i0 _. u0 A) k% w# q}

1 j6 u8 t/ B, J2 a; r/ m  e& B# A( p
2 E/ {& y% G* N0 _& A, V3 u
: K* v' H, \1 R/ ]

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 U+ H& E% y8 D6 T8 Y) y
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 I* H# @- e- G4 z* f1 n& N





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