嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ O; B6 \& G' x+ r* v3 |8 t
Void UPP_TASK(Void)
+ P0 E+ I, O' o{
5 e8 |: ?* f7 G! r( H4 [& J0 ?/ @
( r& y7 ?& y* R1 ?' |    int i,j,k,target_int_count=2;
% j4 B6 _0 @- O4 n& p$ c2 Q    char ch[2];
% o3 }: u7 Q' n8 L
9 z: {5 F  b. i9 I2 m
# ^  ^* F# {7 [- @+ s4 _
& E# d" t2 b# n    upp_interrupt_count  = 0;
: i9 C8 _1 e: a& ^; f1 o6 P1 }$ E    upp_error_count = 0;
3 R  Z, K4 U" R0 L: F
' q% ~9 w) l3 I, b5 B' h    UARTPuts("\tResetting uPP buffers...\r\n",-2);( v, v8 V$ A5 O
    // Initialize data buffers2 g- e# j( a, ]' Z2 y: o
    for (i = 0; i < upp_frame_size; i++)
( Z+ a8 Q# y: o    {
6 T9 ]: b, [6 \8 x9 A) c       upp_buffer_b =i;
! [$ y) R* i$ \1 \" _       upp_buffer_a = 0xDEAD;
# D) K: x: ?5 v    }% [" f' u" w3 k  a
; B9 Q: P- A7 |6 S. ~: o
    //for(i=0;i<1024;i++)
  ?# j1 P! ^- R: s    //    temp=0;
; |% D8 m; O: i8 ]- X7 E1 u8 _9 n4 E$ n3 B( R2 K3 s& J7 e
    //UPPReset();
& i0 f2 ?4 O7 K/ S7 Z# L* G" U    /*启动UPP DMA传输*/" k; a- r: n8 O; a1 w2 _, G2 R
    UARTPuts("upp_prog_dma_i\n",-2);
" `& k$ S- I- o" d% b! D# p    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 H; R5 ]; S& q. ]3 _8 g    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 l# ^7 \, S% p6 a1 N6 z
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 y" @, k) s  i  r6 }6 i) W8 a* p
2 g8 N0 p# {7 _8 K: g+ V2 s    UARTPuts("upp_prog_dma_i\n",-2);1 {) I# s0 v& p
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; {- P/ [- w$ D3 g. f/ D    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! A' B  K5 m$ q) d: b1 y2 H    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; w& e# L" N' @3 ]+ s' y
4 h* S& t- v3 c, d    /*等待UPP传输完毕*/3 x# C4 J6 E0 C. c8 f8 w
    //i=0;) q. @, T7 [; l! Q& C- \
    //j=0;1 i# H8 V8 {( n2 ?% e# {% L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ Y% z7 P  l  Y' H
    {
9 N& N7 p# ~4 H. [" Z        /*  测试UPP传输的同时操作普通DDR数据5 @* J" }; z4 u
        temp=i;
. O  L4 I6 F7 q' |" s        i++;8 p9 _# J1 F- q8 u' p2 j+ Y; }
        if(i==1024), ^4 g5 G; M7 m$ N2 |) ]
        {: ^  @8 C' O: P! N. n, f: R' j/ ?
            i=0;
' a0 t3 Y* A3 A2 ^            j++;
( k% v% w6 F4 d9 r* u7 P- i7 s        }
& g3 Z. [+ ^; j& R) ~: G+ t" x. O        */1 W2 ~! ^' \# }/ h! X$ S

( ^: [2 _! O5 Y! m, l       asm(" nop");
0 x7 d9 c7 {7 @& F' |9 u4 Y: A2 @  I# s7 ~* s9 y! u; n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 q/ T9 M, r: f( ~4 {. ?+ c    }
3 I( a/ ?$ C- E! i+ O- ]6 ~* [, ]2 Y( X
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
6 w2 B" W7 D2 w) M    //UARTprintf( "i=%d\n",i);
0 M* T. X5 v  W) W/ r* ]( @* x; w    //UARTprintf( "j=%d\n",j);: V2 }" V2 c+ D6 I
    UARTPuts("Data mismatch in buffers.\n",-2);
" K4 C8 s  |& t' _$ l; R    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 T- Y* C9 b& H5 t1 f; o    {
% U0 A* M5 Q3 m# j( H. E8 u        for (i = 0; i<upp_frame_size; i++)
% W' h# `2 x: o9 ^        {
4 f6 d; Z$ p8 ]! O6 y0 |( k7 s            if (upp_buffer_a != upp_buffer_b)
1 m9 c+ T  R$ t' t2 T* b            {5 u6 `) z: k# X/ D2 y0 E* ^  P1 ^
                upp_error_count++;4 c$ f( A9 C3 {( [7 F
            }* k8 L6 Z+ `2 _3 |
        }
: f; ^6 [0 u# A2 B& P    }
- }0 u- Z8 i( Y- X% t! P) }: [1 q3 H( r* ^
    /* 报告通信结果*/; N3 x' o" L. k9 }
    if(upp_error_count != 0)+ \7 j0 I, W! B) p! v* S, N
        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 z7 M( Q. X6 ?9 I( _  u
    else
+ Z$ b7 G  c, d8 K# d        UARTPuts("uPP transfers complete!\n",-2);
8 o2 x, `- K8 O& P+ b" F! j
1 F" ?: W' E- T( A* U+ L; z, p    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; A0 b- y8 H- V6 G1 F; b
    UARTGets(ch,2);
: ~* g3 x8 U9 _- ]4 ~$ ?7 w    UARTPuts("\n", -2);
: l& c: ]# o7 h9 x% E5 l1 v8 i; U$ b
    if(ch[0] == 'y')( y9 U; T# C3 C
    {
; J3 O5 m6 ]4 r5 Y* Y$ ?        /*打印全部读到的数据*/
/ B9 s7 U2 g7 I  n2 F        for(i=0; i<upp_frame_size; )) ^: h/ m8 I+ q
        {7 o, X5 g- s8 o5 I2 A* p/ [
            for(j=0; j<5; j++)9 F  e& F: h% k) O- j  ?
            {  c& c: b5 `& f! T0 Q9 X
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ o& E* L! {! k. G: C
                i++;
( W4 w+ q; M& [$ ^2 F9 M9 e; }9 O                //if(i >= 4096)
. U% o+ ~  s# q, |. G# q3 D                //    break;. f: z+ u2 ?; ?9 v

8 R# E0 g0 _$ y6 T0 ^7 [& R3 ~' ~            }' ?1 d$ {3 u0 {& |
            UARTPuts("\n",-2);
6 ~( M2 b! E; F! q% @1 y! Z        }
1 z1 n4 n# x! z( g    }
( _5 k( s! a- H
! C  G* K6 s1 S- A+ |) Q3 `}
9 u; l# J0 x4 a$ Z* v
7 i0 q$ u3 s2 e; m7 i, A

, R9 F, g% ^6 }$ }! Q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 M5 \" s6 o- h9 k, `; e
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ y$ B+ k& g: o6 ]. J; y2 K# @9 z# |





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