嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) S4 e  D# V( t# w; u
Void UPP_TASK(Void)  ^! s/ y$ H* F" T
{
' \( i3 B. B0 c: V' m
: {7 l# ^& C1 D5 Y5 `( s' b    int i,j,k,target_int_count=2;
' ~! S6 P, B# h1 d    char ch[2];7 J8 w0 w" E0 b$ @* |1 b& d0 v

& c. h: l1 n4 a* {2 G" [4 Q# k3 |, C
4 p; `' M! {- V
5 r' I9 U* }8 b2 u+ t% N    upp_interrupt_count  = 0;
* n+ P* D7 j2 y  u  x$ }5 r4 e; L    upp_error_count = 0;( a- Y. W2 ^# }  O! c1 u
& T3 S+ a/ u3 q% v; x& X. k
    UARTPuts("\tResetting uPP buffers...\r\n",-2);' S9 j8 F: X* u) X
    // Initialize data buffers: O' x: a( d" H% ~, S- ]* S/ Q, @( ]
    for (i = 0; i < upp_frame_size; i++)' b8 X3 Y, c6 `) C! W% |
    {  B' K3 k) F( Q% v
       upp_buffer_b =i;" L9 s4 m. B* z8 k
       upp_buffer_a = 0xDEAD;
1 v! o: g6 y8 s0 n9 B" `! X    }+ F; K+ n$ V7 N" \4 g

* j7 |; A8 ]! g    //for(i=0;i<1024;i++)* k  `) p/ O" g" q: v  r, E
    //    temp=0;
3 a+ G$ L8 o! G  M& K9 |) E
/ P* `% W$ J! t& w' J- X  p    //UPPReset();  `5 x; \' w9 W
    /*启动UPP DMA传输*/: B* x/ W  x. U& K
    UARTPuts("upp_prog_dma_i\n",-2);
. N0 ~- Y1 x$ E. d1 G1 \    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' o1 ]8 a# j% J. j6 }    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, p- p9 ?6 n) s% X! g
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 x2 S1 c+ N; c) y. {' K

% g2 I6 Y0 o% Q/ i5 e0 Z    UARTPuts("upp_prog_dma_i\n",-2);
; }$ @  W+ f8 [2 [! r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; n2 x7 n7 s% x, W# F- ]3 z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. r' L! w( R4 E0 D    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) d( ~+ e3 X* h. u

, s' X5 M$ D4 T/ \, Y0 P    /*等待UPP传输完毕*/: a7 {  A* N2 X6 E) O' Y; H
    //i=0;/ f& y. o- ^& \4 `
    //j=0;( ?6 u, |# {- I
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: N* D" ~. a1 _    {
; ^  U6 J) f) q: c/ Y& b% t        /*  测试UPP传输的同时操作普通DDR数据
, S1 z4 U! E/ [+ |* @# r% b        temp=i;
8 N9 ]3 i5 E. O9 H        i++;
( V6 K2 h1 y. ]! N5 O- m7 z        if(i==1024)# `5 I8 v1 {9 X+ V" Y5 ^
        {& r4 {3 o' W% [0 z( M7 K3 |: q7 g
            i=0;! A# ]1 B  J$ a( E1 m
            j++;4 ^; z* z2 t6 q$ {( d
        }
! N& ]+ e+ [' s$ T8 B4 t        */5 X, R( e* {, V2 x* U
' D4 N! v7 T( a7 `+ Y
       asm(" nop");
; T5 H4 R; f  L; C2 e" s2 R
. y- z; w) c8 W2 b6 H       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 \1 Z# Y5 E+ j( r$ {0 f
    }
' x! D3 {/ L" n( e5 ]( p% M
! S+ c5 {  {9 c, z$ m  G* a    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ x2 t' Q& b/ }, k6 F. P2 z    //UARTprintf( "i=%d\n",i);4 _' S) G- q$ H; q- t! I
    //UARTprintf( "j=%d\n",j);# a+ V: Z. I$ n
    UARTPuts("Data mismatch in buffers.\n",-2);
. l5 O' t% P. c; X  N- }    if (upp_interrupt_count == 2 && upp_error_count == 0)- d( a6 x5 i' X# W
    {
+ b7 _" [7 z: f- U8 u/ a        for (i = 0; i<upp_frame_size; i++)4 e% L, R4 _3 G* O2 H1 K
        {
( I! D3 S9 A) \! r1 K7 y            if (upp_buffer_a != upp_buffer_b)
/ [( B1 y8 H; l9 f  I            {
0 J/ m/ J. V* L/ ]8 v                upp_error_count++;
3 T9 W. _+ j( {. {9 d8 W+ F7 p            }
* a4 F! e3 Z' z9 W! O' Y3 y        }
( P! s& S' ?( S) {, R) s4 G# K, ^  J$ J8 U    }1 v2 V6 d- |  x  a) r! w0 w  O

( s- G  y' H4 }$ x4 F; r    /* 报告通信结果*/
5 T- q/ H$ e; s: G    if(upp_error_count != 0)
* N' C  R, R0 |! z        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ c  j2 D: F) w# N
    else+ S' _1 ^4 ^  n# L: ^. L; d) R1 ~
        UARTPuts("uPP transfers complete!\n",-2);, j$ l- ~: b" B( l

1 }4 h* Z& z* ?5 j. K4 _    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* t0 ]) T: P( G- F( P; D
    UARTGets(ch,2);% D( Q- P1 B0 q  @) M$ z& e7 w
    UARTPuts("\n", -2);2 Q$ ?* g3 z4 ?; _4 Z6 i. ]. d. }

, W* ~# p( }& O8 p8 p) n  v3 A    if(ch[0] == 'y')
) k8 [1 X) d5 r  M  `  e    {
0 l9 _8 ?8 K% E: S5 X1 ~        /*打印全部读到的数据*/" @. y6 }5 H  ~+ t, J1 f' F7 A
        for(i=0; i<upp_frame_size; )
' ]# {  O5 L9 G( U; ^/ O% {5 X        {
5 ^) T0 D  n( w4 d! t/ h            for(j=0; j<5; j++)- M: |; q* ?* H: R
            {
! g& ~9 q7 }0 H# g# m( e+ y& M                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 Y2 r* @9 L$ Z0 m5 [
                i++;) h1 n; g8 [" v  J" s
                //if(i >= 4096)  J4 U0 L' B3 Z" q# W2 Y/ e5 y5 O0 ?
                //    break;" A& P5 a# S/ C$ L- H7 u+ B

% q6 n8 @% k/ a* x0 B7 W6 X            }% t2 |! O& i% |9 I
            UARTPuts("\n",-2);* f" k* V# i0 [1 Y, f, l" a1 e8 Q
        }" Q7 Q3 D4 I4 E- Q% e0 e
    }  J' t# Y7 k5 R; k
* w1 h% S7 e0 D# _7 \
}
3 u: ^  A% n% d! U7 d

% X9 O* X! l/ F; [. N3 `
- N; b: A" ^# |
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, }5 _! O1 Y' b% {: d7 o2 ?7 g( a
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 Z! L0 e9 {" F2 g




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