嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 W/ ?/ H% C- u! J, ]: ~
Void UPP_TASK(Void), O! E9 F; M" Z. A$ ?( @0 }
{3 A9 y; f3 p( K. @8 o( t5 i

' {  e$ T% d: B; }8 G    int i,j,k,target_int_count=2;
* Z8 K# e- A( F6 [1 u: R4 F    char ch[2];
/ G' v: t& f, m4 U, k( S+ d' [! {2 u! F$ M: ~

; \9 l' P5 v8 Q. d
/ f) q+ V# L! i# H    upp_interrupt_count  = 0;
* ]8 F2 ]/ a. ?6 ~5 P9 L. _    upp_error_count = 0;
, Q3 e- a+ |9 _  H
+ z" O* E5 A& t    UARTPuts("\tResetting uPP buffers...\r\n",-2);% k; f( s7 l" r
    // Initialize data buffers
+ A4 J) ], I  g- `! C' c& F# x    for (i = 0; i < upp_frame_size; i++)
+ {+ \4 a% K- Q0 Y3 }" H" _    {: T! {, G8 @! y3 W
       upp_buffer_b =i;' c2 _7 v3 O5 h( A) I2 ^
       upp_buffer_a = 0xDEAD;
  J6 M8 f+ c2 R' q4 Y0 S    }; V& g. q2 {4 O+ ~& t' k
" V* L; y- X; v& u- j+ N
    //for(i=0;i<1024;i++)
0 M7 W/ u2 `% _    //    temp=0;) ^* H/ O+ v% R" S- r6 q8 A4 n
* B: o8 o6 S! \; x2 S
    //UPPReset();4 ?# u$ `: @* i$ I; u! [
    /*启动UPP DMA传输*/
7 s) j/ z: v" i& P; T5 U1 H' Z8 \    UARTPuts("upp_prog_dma_i\n",-2);
7 H( e! `. n: X9 x    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 Y# h7 Y3 G3 V- `
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ]8 S+ m2 [+ Y* f9 x' y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' S+ x8 _; u. H2 e7 x8 C# f

& T/ f- q% n9 M5 V    UARTPuts("upp_prog_dma_i\n",-2);( h/ s6 Z  o. s5 T
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ d% |- q6 }7 y# _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 U' l5 X% H+ G* ?' m9 a+ ^
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ m' Y% p3 P4 v
2 d- {1 R: }5 E7 Z8 a8 n) A+ R    /*等待UPP传输完毕*/
: _$ o, J/ ]8 q1 n    //i=0;0 J7 N0 _6 C9 l8 V% F
    //j=0;
0 X, w) n! V1 R: @4 D3 a; d# c% x    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 P) ?# _  B; q3 W6 P$ |' D& G    {
7 d# l" x4 i  ]) E. u+ [. ^7 L        /*  测试UPP传输的同时操作普通DDR数据# D* Q# w& Y4 ]1 T* P2 q8 P0 n/ l
        temp=i;
3 o* R+ J; q2 c3 B% W        i++;' F4 r7 W. j+ ^' s6 l0 D+ M: ?
        if(i==1024): w9 e& D4 W" I5 ~2 R
        {+ x& l. ]9 g6 w6 A" G( n, W5 }
            i=0;
* e! e( F9 X# ]9 A            j++;% E, o, z) P; b
        }
2 k. ^9 A" O1 X% ?        */
9 F2 d! [( {6 @! T- N# J4 K: D( {! ~8 O) a1 B
       asm(" nop");+ Q/ U! \8 T; C% @7 e
3 L. @. H5 D# k
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; _2 k6 ~* B0 M4 @0 M
    }3 W& G9 H; Z' Q" ]& S

) A+ j: i/ P& E8 R& o) ~    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 d1 O& v$ }( c. }6 `) N    //UARTprintf( "i=%d\n",i);* p" H2 ?+ h& P' O/ i! H% C
    //UARTprintf( "j=%d\n",j);2 A1 Y* w  @4 y% {+ h  G# {
    UARTPuts("Data mismatch in buffers.\n",-2);$ l& w5 L0 D% b7 k
    if (upp_interrupt_count == 2 && upp_error_count == 0)* S5 B  o* _: j0 T
    {
: k) W" ?' I% G; q" r  P        for (i = 0; i<upp_frame_size; i++), A0 X' _* R( A, j3 |
        {/ F+ Q- I- S% Z
            if (upp_buffer_a != upp_buffer_b)
/ T' }3 b+ V  {9 {& T+ [            {
# n4 `2 I9 Y$ C; x3 l0 K- U                upp_error_count++;7 l: j, Q" ~& N* Q
            }
# h  ?9 l: z: }- g* f        }
$ K. J1 U' \- N4 h% S; K    }
/ I$ [+ d& y0 p
  L& P. b* m9 V+ K, @- _3 `    /* 报告通信结果*/* G# E3 v- s9 B+ y+ M; W$ Y
    if(upp_error_count != 0)
; d0 |+ I: t4 }+ G/ P: j: S; L6 K        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: A& F0 n0 d5 Y7 I    else* H$ ^  a& ^+ U% _
        UARTPuts("uPP transfers complete!\n",-2);
& h; V4 o; Z* V& k2 Q% S5 D& _
; q& @3 f, d0 X5 Q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& l/ [+ H6 I7 {9 u( K4 U
    UARTGets(ch,2);
' @: d0 @. P+ m# r2 H' e9 a8 ~    UARTPuts("\n", -2);
6 W# ]/ \/ h  ]  w4 e  B. w4 d6 P  N# ]- ?. L; o( w! ]
    if(ch[0] == 'y')+ O7 U" H  Z* v  S6 x# h0 ~- K4 p
    {
0 M4 D' n. Z# H/ p        /*打印全部读到的数据*/
# _. ^) z9 K# E1 E# x4 H( M        for(i=0; i<upp_frame_size; )
8 d8 ?. s) x* i, e! M3 A1 G        {8 |  S1 ^. C" Z
            for(j=0; j<5; j++)# Q2 f+ E# ^3 Z9 X8 W+ w' }  S
            {( H$ l+ |% U5 K5 w3 {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 z* _! M3 y0 k, J! t1 ^                i++;; d; O- s4 {. P
                //if(i >= 4096)
6 e) p  u0 e! U& A                //    break;
( `& g3 F4 e6 h" r5 U1 j& b; A" N/ n$ N
            }" ?- l8 s& }/ F) q; L
            UARTPuts("\n",-2);
/ z4 P  {! n( y; }& Y        }
( I9 h) B' B4 o8 L  l( `    }
, E2 U1 T6 {/ }, z* G4 l+ x, w
& p8 K% a/ {$ S4 z5 Y6 n) G}

$ F3 W6 e! _" `
7 S2 A0 V! V* `" f& \! B5 ~. k5 V
: {0 \! O& J. Z% h3 J. l0 k

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ]& e( }7 S  D& x# z
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. k4 Q6 H6 e# C0 K! B3 _





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