嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ u9 K4 i7 w( m2 r0 z
Void UPP_TASK(Void)( `" x% J& _1 B
{
! [. o4 U( ]1 [0 r* [# J$ @$ n
/ {1 {# t: J) i( s' u; C    int i,j,k,target_int_count=2;
, B; R) t5 |0 _" A. B    char ch[2];
- K) w$ E) {; f
) w6 c# f; l' w" \/ _  j3 r4 B5 t$ Z# |- }- h

$ T8 }* x" T8 W% M    upp_interrupt_count  = 0;, t- G) P3 k: _/ k
    upp_error_count = 0;
: l2 H$ o4 U$ W
- g2 G$ t/ t) t- ]4 p2 [7 x  X    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. A9 {& n/ T  J- x  p$ \6 s  I3 x    // Initialize data buffers
: b& a& V3 X5 y/ h    for (i = 0; i < upp_frame_size; i++). {- B; B3 t! R+ d% [
    {0 f8 D- T8 X0 h
       upp_buffer_b =i;
+ y3 K# N$ n( i9 w3 ^6 S       upp_buffer_a = 0xDEAD;; r6 p$ C1 ]/ L; L/ [5 K
    }
3 U  J% v; M2 N" K1 n% z) q8 e+ y6 T" x+ h/ `  f1 N/ ?
    //for(i=0;i<1024;i++)
) ]% C& p. {# p/ U! Y# A    //    temp=0;
) G8 t0 V& b/ K! h; v% i
4 D) u: B3 k" k9 K7 m    //UPPReset();
# P. ^4 e2 [& ~. O: N4 z& i    /*启动UPP DMA传输*/8 p3 r  v  _5 s3 V2 `
    UARTPuts("upp_prog_dma_i\n",-2);$ k, s- d1 s% x0 Q" L1 r
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, d* F: k/ X2 E' ~& y    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 w, P4 A% \, m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 {8 }5 D! }! T6 m
. M# Q, V3 G) |  U" X3 u/ |
    UARTPuts("upp_prog_dma_i\n",-2);  `' B. Q: ^+ q% T2 p& Z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& h+ o+ P& R( H8 L: k, P
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# o5 Z; J8 |9 F
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( L# B6 Y4 {9 l7 x- B* Y" n

! j, R& L" t$ n% I* c    /*等待UPP传输完毕*/
; B2 d( D) v% `$ L9 m4 J    //i=0;
' w- ^8 e3 ^1 ]4 C, s    //j=0;
: V# H7 _9 A, ^2 [- R. }6 p    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% O" H; h3 b" A/ b6 O    {+ C- c0 \6 r+ [
        /*  测试UPP传输的同时操作普通DDR数据7 m, X$ c4 y8 b$ t$ S
        temp=i;; e/ ^0 Y* n$ N
        i++;
  p2 ?) P# z& }4 c! U        if(i==1024)9 b# S* x- u2 E3 q7 O0 ?
        {( T# Y4 J; ~0 x3 c, {% c& {& j- u8 t
            i=0;$ T3 X7 h( i2 N3 h& e! L& T
            j++;4 M$ U; `9 r* J% T
        }8 T! q( w1 [2 W5 O5 l% W8 h& I( t
        */
% c. c. }; T8 l
7 a6 w# q4 J7 x       asm(" nop");
" Z2 u5 p( r& e' r3 v# x$ @: G8 E! V/ M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ ^. z$ F  \; m& @
    }( q; u. I1 P& R
) a+ K& a+ W8 k3 S; T
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. t5 w5 }5 C9 n    //UARTprintf( "i=%d\n",i);/ ?/ x( Z8 ^" {8 b$ I. @. Q- M0 }
    //UARTprintf( "j=%d\n",j);1 z5 M% i' Z+ n; Q/ s  e
    UARTPuts("Data mismatch in buffers.\n",-2);* ~8 o. s6 `& e: J
    if (upp_interrupt_count == 2 && upp_error_count == 0)( V+ G* e. w  T( i1 X
    {& Y8 g, s% H' w) g1 R' @' z' [
        for (i = 0; i<upp_frame_size; i++)6 p1 k( v  Q9 z
        {+ G5 }; e+ S" F- F6 q
            if (upp_buffer_a != upp_buffer_b)
; P; ?2 e1 w; L& e, J" ~" g            {  N% L4 u2 j- ]
                upp_error_count++;, z+ L& z4 S2 _
            }+ Y' _2 y" v! K+ E# l' F
        }
# Z+ E& |; m. ^) e  K% v    }) G, I6 r( w, \" U
: [" J' O! m; o8 C. V/ Y
    /* 报告通信结果*/' K! |0 W5 s1 Y
    if(upp_error_count != 0)2 K/ a, A3 o( O; J8 S8 z9 a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 G' \2 y) L  U' r% |1 H    else+ [7 g2 L. @+ \& N, u- s/ d
        UARTPuts("uPP transfers complete!\n",-2);4 j; R; u. W3 m4 B, M6 O
2 B9 z5 u9 o9 _/ X8 R+ K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 t/ P6 r( h6 x2 F8 V7 O& D    UARTGets(ch,2);$ w3 \) h8 c; m# K$ N
    UARTPuts("\n", -2);
. K4 i8 |8 A8 z% ^' R- i2 S) W! ^9 o+ n* e1 l# u1 H
    if(ch[0] == 'y')( M* f  M6 j( A* D& q4 g
    {
+ e8 u' q' z! c. _* z3 H        /*打印全部读到的数据*/
) y2 ?' O& R9 y7 z        for(i=0; i<upp_frame_size; )7 v$ g# I% }5 S, ^3 `
        {
+ o, @: b( A/ X" A: E- |3 d+ u8 R4 G            for(j=0; j<5; j++)4 J8 r+ L8 W  s! w( u
            {/ D& V( \9 b$ d' H* {( `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 C3 L+ W' ^" \' i$ n' e                i++;1 A1 u5 U3 F8 q. q( {
                //if(i >= 4096)
+ \- R) t: m+ W4 O. O* X6 f/ \                //    break;/ A% M2 Q" ?# m* ?( C

; Z' Y! ?+ M  X& y% z# y5 u            }  j3 e3 J5 ]0 ^+ ]' G- J
            UARTPuts("\n",-2);
9 t2 B1 U: `+ I        }
& Q9 y7 e; B& J2 j    }
& b6 \0 W% X9 I8 [1 x: e# S, w- S+ j+ w. @) o
}

7 U* n; O+ R. h+ T: W7 O
' t  c6 A7 U, p; Q$ P7 l7 q

4 \+ b. W' l/ y* P* G  `- h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 U9 W) A, U' N9 c7 o( \4 t
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% B- ^7 N% I1 g




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