嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 i9 L* y' C3 {% u+ g
Void UPP_TASK(Void)( Y" |3 l! b+ i8 [( M
{* z# B. f$ A- W2 D3 U$ P2 O( T' M
" Y  l# ?$ Q( u
    int i,j,k,target_int_count=2;
! [7 C: c) N0 C+ ]    char ch[2];
5 [9 n9 v5 {7 c' H0 }: J; U2 O( v5 }6 ^

/ b- v5 N- d+ A: G7 j( i) X% d
7 t: p0 j0 a6 `& U% c2 E5 i$ n- X    upp_interrupt_count  = 0;
) Z% k- ?/ Y  c8 O+ {5 [6 N    upp_error_count = 0;
1 x  H# d& t2 P$ H! _4 \+ |" x& [2 N% x2 \2 L
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 O- P3 h5 o6 B1 V+ W5 M# ~) X& |" K    // Initialize data buffers8 r9 D1 L9 L6 g
    for (i = 0; i < upp_frame_size; i++)
* Q4 `* j  J. P) P8 k    {& S6 [1 {5 E7 F3 i: k; Y
       upp_buffer_b =i;4 w- b3 ~  L+ H4 O% @
       upp_buffer_a = 0xDEAD;+ C- j2 A  i( g3 J: d- Y2 ~* p
    }/ M, I* U( c: ?$ m  }+ l; K$ r
- {6 v" u5 r. _% |. \* c. _9 N
    //for(i=0;i<1024;i++)
0 }& }4 I( p' d    //    temp=0;
0 o4 N+ L0 Z/ m  \
, g" `3 x- z3 ]/ J6 ^: _% w    //UPPReset();7 L; u( w6 z$ c/ L% v& b
    /*启动UPP DMA传输*/' H- h( i1 h" T. J$ q5 w
    UARTPuts("upp_prog_dma_i\n",-2);" ]) N! I+ d* S: x# D* z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 I8 |, S" l! I5 j( f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ C" d) f, p9 N! A/ W' n
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; ~& f: {$ U9 e& D! {
( A; i# C1 H* P: N; {, }! p    UARTPuts("upp_prog_dma_i\n",-2);  E6 B& i. U$ |+ n# U3 Q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* r; P* L; u# N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; u/ b8 K2 R' a2 H. Z- O    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: ~$ t) W; p! x9 m
& l0 U8 J( h  o- w, {; z
    /*等待UPP传输完毕*/
4 }0 K+ A8 |/ f+ E% x3 E+ ~    //i=0;
3 F; [1 \' R. h& D    //j=0;* C% P% Y$ E) ^+ z
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( B' A1 v  x1 x# G    {
% @  k( t7 y3 G        /*  测试UPP传输的同时操作普通DDR数据
* d  W4 K& ]0 L1 }1 k2 [4 \        temp=i;
1 Y% y" h- ]: ]8 d        i++;
  q- P# v  L, m6 U; V        if(i==1024)
- h9 h7 f& Z- H( K! b0 _# X        {
% Y$ c3 i1 U2 G3 l6 P9 K            i=0;
, ~$ V. q* [/ h            j++;
6 D4 x$ n* `4 e7 E5 ]$ |        }
- r* u* Y, T4 z0 Y$ j' A; }' w: {        */( ~1 E+ Q+ L0 \& F' g
; z6 i& A( u# C7 J0 ^, I" [
       asm(" nop");
2 u- d8 K" x8 M, @
) l: q9 n4 ]# I/ y2 X0 M( j9 @       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' `4 M# K# Z0 G1 ~7 ?$ A& F    }
5 j( C1 W5 g. r' f$ O+ i! B+ y6 q
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% B) G! ]# U' K! B. R    //UARTprintf( "i=%d\n",i);" f; n" Y4 a1 M  O
    //UARTprintf( "j=%d\n",j);
$ p" C" k8 U/ P( v& `+ F    UARTPuts("Data mismatch in buffers.\n",-2);7 ]8 i1 n/ H% l6 C% o
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' `) i: u/ ?6 {8 T- ?* u) f3 W    {
  u- [$ R; W& j( v2 U$ I        for (i = 0; i<upp_frame_size; i++)
6 d$ W$ c1 g- n+ D) ^        {
  W2 f1 K, G+ M/ o6 e+ X            if (upp_buffer_a != upp_buffer_b)" `4 Q0 x9 H/ s/ j: X" f
            {7 y, O' I: ]9 ^) F8 S* ]
                upp_error_count++;
' j' H0 A/ V$ `  u/ X, N            }- t' ?9 X$ N' U" E8 v7 c& {
        }% |. }, ~# q. |5 z+ j5 n5 a
    }+ m4 Y& x) r4 z

1 d. O) p" s3 c/ C5 s4 e    /* 报告通信结果*/7 H, }: c. A5 |+ c1 u9 `7 U
    if(upp_error_count != 0)
2 w3 t7 a, ~3 p) I& @$ [9 W        UARTprintf( "upp_error_count=%d\n",upp_error_count);
" q1 \% `/ G; t% e; ~" P: w% a. S0 o4 M    else
  S+ U7 ?; X5 l        UARTPuts("uPP transfers complete!\n",-2);
$ a% S) T) F( H
, x. _: H6 u& ^' w- @0 Z5 H    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) r# M4 w4 F" B* m  X    UARTGets(ch,2);0 y/ v8 N8 Z& e
    UARTPuts("\n", -2);
. j6 b/ X4 b3 O0 W6 W/ a
# L7 a; {( J4 I( i% ]( |$ s4 N& |    if(ch[0] == 'y')  ?  P3 H" y5 _9 D0 P' M  W' }
    {8 T) M, T8 O0 G* v
        /*打印全部读到的数据*/
* p/ e2 A! b( l. j        for(i=0; i<upp_frame_size; )
( ~6 o  @9 N! v% a6 m2 {        {
; |# g% U3 O: E4 Z+ c            for(j=0; j<5; j++)
" X, I' X" ^1 O) X            {
. K1 ?: u# H/ A% |8 j; B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* e* e: d; I6 @* u$ L
                i++;
3 E6 k& e) f  ^- _                //if(i >= 4096)" r) d  A4 G+ s7 k. `
                //    break;6 @' a' p7 u; w# L3 [) |+ n
  \1 q& J! v3 j: N) k
            }+ S" P6 B+ y1 I& \( a
            UARTPuts("\n",-2);! e- S: L+ @3 e, J3 Y
        }
0 V1 I5 f& Y( n2 |# y7 f    }6 Z9 ?5 J3 i+ z; o+ N* y

: X9 I/ ~0 C: P% ?$ C; z}

! I' r. Z, D$ e8 i; }

8 I' |  ?$ Y) ~6 b  k1 C* C; V6 F

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 g1 A3 p* D/ n3 Q/ J2 g" l( B7 j
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ g2 }& `, k3 j




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