嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 U; s+ J8 [3 K5 z
Void UPP_TASK(Void)
0 Z1 s" i4 P9 L+ ~% r{9 i. e, c2 |: |9 ?2 s" c4 L) E" f: L* C
* k& z. a* p: D6 p
    int i,j,k,target_int_count=2;
% t' @# u6 V6 n# E( F3 w7 @$ s    char ch[2];) L' f  z: l8 r/ I( n; P7 h
& }4 x9 y' a- u
& J( X1 L, ?9 f2 p# o
! O! b# S( _+ V/ t: U, M
    upp_interrupt_count  = 0;) ~8 L( d% V/ v3 \  n' y+ p
    upp_error_count = 0;7 m5 n' T* r( y4 j. M- @2 e
' K1 @8 v: f$ t5 X; X! U, p
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; n/ N# T( o6 x    // Initialize data buffers
. n5 f3 ~& u% Y    for (i = 0; i < upp_frame_size; i++)
# v3 {3 K' `7 z9 P, L! }$ _$ Z    {
% _% G' r4 H1 m" I% c       upp_buffer_b =i;5 s/ i" K- j( U
       upp_buffer_a = 0xDEAD;
; y; ]/ p; Y8 j, x    }2 P9 }( @* d8 R

2 x5 U: ?5 ?9 h  B0 r* {$ J# f    //for(i=0;i<1024;i++)6 G% V- g1 u8 q9 Q: [+ n
    //    temp=0;8 u5 G* i: w- L. N

$ w( t$ D' e- o( R/ p    //UPPReset();' F+ }( e4 x2 i1 B! n& ~) `( Z
    /*启动UPP DMA传输*// f2 D# [: j. W& K
    UARTPuts("upp_prog_dma_i\n",-2);: Y+ b& D* N: C* l
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ P3 w% N9 U0 B! M, }
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 a+ U" ^) T7 A7 o- o    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);7 ]- n% Y; Y# i1 d, p& E

0 G& E4 \" T- k9 D    UARTPuts("upp_prog_dma_i\n",-2);
8 P, q$ {5 @& ~; b6 S+ X- |/ Y0 [    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* o# |: t% j- o0 \0 ~3 {. }
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% B/ k& @9 C8 j4 g2 _6 g
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ {& o) G! J( t/ `3 L8 @# a! d0 }% a8 p
    /*等待UPP传输完毕*/% @7 @. @0 J9 O2 I4 o0 b/ w; ~
    //i=0;  Q! c% @$ H) m: Q; w  f
    //j=0;+ D% `) {5 A. `8 c1 I& r
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: S6 ?2 P7 t, }" }) L! F    {& m9 E& l7 T$ c' \
        /*  测试UPP传输的同时操作普通DDR数据
3 U# Q: `) I' y- {# Q        temp=i;
: g2 x4 U& \6 S. g        i++;' I; G' P! a0 G/ Q$ z
        if(i==1024)& k) F% R$ v. g+ z+ E# A6 {5 B5 g
        {
- x! l0 J( g6 a3 t            i=0;
% d& _( ~! E, b% U& e  r/ Z            j++;; C& i& A8 s+ r) L& @/ O4 q
        }% C/ H9 t: m$ D! v+ ?. _
        */
+ m$ Y$ d* L& X5 z+ r
  P8 a0 w& d; D8 ^9 }- l       asm(" nop");
! q; ]9 U. C) [% h" }& r! ~
- S9 V2 _0 i" x5 u# E/ e       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 B7 t1 P' x: v( w. S2 O" L    }9 j: ^: W- V4 S

2 G# _: k: ?) i( d- w+ z    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 q2 t  B; u; P# I! N' O; z
    //UARTprintf( "i=%d\n",i);3 |6 r6 g; _$ u: a3 D- F
    //UARTprintf( "j=%d\n",j);
  B% ~# }/ o% K' Q# V+ U    UARTPuts("Data mismatch in buffers.\n",-2);! T. W$ ]! g1 C/ \4 A9 M- k  Z% f
    if (upp_interrupt_count == 2 && upp_error_count == 0)
% ]8 p6 F, |, l( d8 P9 W5 ~; |    {! x6 W3 M- Y7 Y) H
        for (i = 0; i<upp_frame_size; i++)3 _, m; i, z7 M% V" k
        {
2 W2 B3 k1 j5 I8 Z2 A8 @5 N            if (upp_buffer_a != upp_buffer_b)6 w7 {# g0 r' n/ ~
            {! P+ o: [" W1 z$ \
                upp_error_count++;! C9 C- q$ m$ h3 ?
            }- ?. x$ F, b" c/ E/ ?! j9 g+ U
        }5 }0 W: ^- R3 v  F/ i1 h
    }
6 K! Z; ]6 O2 K. h+ W% d0 h
, v, k) f8 q3 t* t5 Z6 n4 t8 H- |    /* 报告通信结果*/
% ?) f. B. s8 q8 \    if(upp_error_count != 0)
6 E( m+ q) O& Z+ g# U( L        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 M3 W' X2 X6 C" d4 d  M" V: `) Z/ N
    else
1 m) ^/ k+ d; Y# a% n        UARTPuts("uPP transfers complete!\n",-2);
: i, C0 B+ O9 |/ F) f1 x; j) r7 d4 w4 P: W, r7 U- k9 p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 a9 e; W" \. g' T0 `1 n$ {' x    UARTGets(ch,2);
" s2 [. ?6 E5 s8 h' |  _    UARTPuts("\n", -2);
. q5 K5 g% T" C/ `: R5 k- u* i" _. b& ^5 ?: S5 R3 A
    if(ch[0] == 'y')
, g4 n5 G% |- G  w& q1 a    {
$ k4 P! G+ K; E- V        /*打印全部读到的数据*/2 \6 C& L& C  ~% ^
        for(i=0; i<upp_frame_size; )
6 d9 J: Y+ L- v+ t5 F* _        {
+ J$ _& }' Y# [+ M8 Z            for(j=0; j<5; j++)& K& N0 H6 |( z! f. x
            {$ `9 C# {% S6 W$ ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 C) B5 p) q$ y                i++;
: ?) l1 p: W7 X                //if(i >= 4096)1 C" S9 [. b+ k# f' U! j
                //    break;% z# q; a2 C' G! \

; w3 L4 u  P( {! E6 N            }
8 x7 [, b# n5 B            UARTPuts("\n",-2);, b) Q" z/ L7 b5 p7 @
        }
  ?1 z+ S3 t# h0 g% W# h  J' J  ^9 R    }
5 \& ~/ t6 j8 o# L$ K, e2 {
4 S, x$ i" r1 K. I+ ]+ F}
8 Z. n: x- z* U3 p. ]% G
. V, ?2 w3 y/ V9 L. B

" P. _! m9 `* O( t; w! A$ ^
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 c3 x, k4 l6 K1 c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 Q8 Q( f) @+ r+ {




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