嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( C2 f* O2 V% x4 ~+ l5 L' S" _
Void UPP_TASK(Void)9 F$ @4 ?! @! }6 k, H
{. y/ N# r' ~0 w7 j* U" \5 F) A$ [8 }
: o' O& H2 R8 V$ Y1 i
    int i,j,k,target_int_count=2;$ `8 k( K  {+ g; j
    char ch[2];, P; }$ n) h0 J+ @) u4 Q" y

: v) \3 r" ^4 x) |: t4 @- n! e; ~4 l2 z) G7 b8 H

; H* y7 d- u  \    upp_interrupt_count  = 0;2 J9 X  `" @1 J" Z! n8 o" \
    upp_error_count = 0;
+ D) I2 b8 F; `7 u
  l4 j# }- Z: V( i    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 [: ~9 [$ _4 A7 X
    // Initialize data buffers, O/ d! S* h7 M. K
    for (i = 0; i < upp_frame_size; i++)
$ w. y, ^+ v; ]: \* X$ q  {% N! r    {1 Y& W% ?8 U% o
       upp_buffer_b =i;* P& a$ @: c4 n+ [( l
       upp_buffer_a = 0xDEAD;
# a. Q- N, z) V, h    }
1 Y& E0 U6 u: ]& O
) j2 C% P$ V: {3 V' G# e    //for(i=0;i<1024;i++)
( p) K  V" @9 T$ e3 p$ E9 |5 E4 ?    //    temp=0;
  e$ n! m4 K* v$ m1 k1 o2 i) ^/ M; v: B# J6 ]3 h- J$ @' t/ x1 [
    //UPPReset();# N. [- V* Y6 O) D6 `' L
    /*启动UPP DMA传输*/& F# a5 i& O1 X8 @: S
    UARTPuts("upp_prog_dma_i\n",-2);
/ `' F3 K9 E; [    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, a, S3 T1 e3 U# p- w! L' Q7 v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 }4 }$ z* E# a  _! U
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; w$ ?" g- A1 p

0 s: W  F5 R3 ?1 |    UARTPuts("upp_prog_dma_i\n",-2);% G; D  d4 ?/ O0 `) b9 D( W# o6 ^
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- P. V5 u1 ?0 e" z! i/ k
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 l0 h( E, r3 I# }+ x; |% C
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 r' q$ z5 A' \/ o, S9 s0 o

: T, A  n4 g; d1 b( ?' R& Q    /*等待UPP传输完毕*/* k& |  t0 |' v; @; W: N! \1 i
    //i=0;
9 I4 \8 d$ q: E/ Q: `    //j=0;
4 b* `0 Q2 ]! U3 |7 X7 k/ i! V. g    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( n  y0 K) [7 _1 x    {) H+ X# j! ?: L% {6 h
        /*  测试UPP传输的同时操作普通DDR数据# `; ^. X" ~" c, W* @
        temp=i;
2 X0 g0 D: l& M6 ?        i++;
8 J% O- W' ~4 w" q        if(i==1024): `2 R5 n0 k' i- ~) ]" k: ]* j% L
        {0 {3 i) y, p* z  x7 V9 p" e
            i=0;
1 T8 J( ]' I9 }6 d7 \0 o5 }* K            j++;
2 x4 R9 p6 @! I" G% [9 w: h% Y        }
. N) A7 {- @8 f7 k. }7 c" A' p        */% Q2 I0 {' d5 u) E0 ^* U3 K
0 ^" S( q' s- l
       asm(" nop");
5 a% W8 c" w0 j! N! H0 M, b. p& M' P0 i, j" n7 N% s! |
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 Y3 g$ i) Z( i; B    }
* q3 ?2 I3 n' I3 `$ f$ O# {6 y0 s/ w
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- S9 f) W7 z3 k% q$ V    //UARTprintf( "i=%d\n",i);
  g& _. O! X# R: [- T  u$ Z    //UARTprintf( "j=%d\n",j);( p, T  g: i% n
    UARTPuts("Data mismatch in buffers.\n",-2);8 p" j2 q' G- a
    if (upp_interrupt_count == 2 && upp_error_count == 0): E( I: M0 O  ]& N6 {
    {
" o' ~1 w: W# [$ l+ w( U        for (i = 0; i<upp_frame_size; i++)0 r9 Q% p8 C* N8 G+ w+ }, C8 E* `
        {
: F8 n; F; u; `, n            if (upp_buffer_a != upp_buffer_b)* ^: k% F+ r- ?. O
            {0 N- d" y: a; ~2 j- m6 N
                upp_error_count++;7 v& p! ?2 ]$ O7 e$ u
            }# B/ Z- Q& I/ Q
        }' G% z9 u) a- T
    }
% K7 V3 A1 U6 J" Y# b# ?6 t6 c1 B" W2 g8 J5 U3 Z0 K$ p
    /* 报告通信结果*/9 c) ^, x, |; y0 h. ~( s
    if(upp_error_count != 0)
2 o/ {% ~4 X) ~8 Y* Z( n' x        UARTprintf( "upp_error_count=%d\n",upp_error_count);) Y- }/ y- y# @% C
    else6 Z* o! ~3 f4 k: T& D) I9 F' O
        UARTPuts("uPP transfers complete!\n",-2);+ e  n. \* c9 p" f

. D. i% _1 C0 U5 Y- x& ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ W2 _9 e$ A5 _& d    UARTGets(ch,2);3 d( G( J0 y/ w* g7 x7 Z$ u
    UARTPuts("\n", -2);
1 z4 x" f$ D+ D2 O! e6 {: P7 Q7 `+ _; m. ^6 c1 P3 r
    if(ch[0] == 'y')/ b) H+ ?" T! E% i! g
    {
: z# |! l) U7 b; R% i; M        /*打印全部读到的数据*/
6 L" ~1 v' A' C; o; X1 N9 g# p        for(i=0; i<upp_frame_size; )
& I6 q6 l+ E; e# K        {
. Z& p. [/ y; d" q5 \            for(j=0; j<5; j++)/ j- f$ _$ P/ V  s$ T) \$ B
            {8 _0 h6 b1 R; i  [
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 l! }8 T5 k0 d# y
                i++;
2 R; n% n: Q* V8 f, p                //if(i >= 4096)
# W! _/ e! z, H8 y                //    break;
/ W# V: o1 m7 A4 d7 z! ], I6 @" D4 x3 z
            }+ D! o) @! q. {% |
            UARTPuts("\n",-2);% d8 P( y, n0 Z7 ?8 L6 [9 q
        }- q- e1 R$ c: r  {& g$ R
    }7 S( t' @: H9 R$ t/ P  t

' E$ ~: m  h* C9 k4 c/ @}
3 {* f( g  l( q5 J

1 Y% ?/ Q7 Q7 ~3 p' k' L- W0 p
# x4 \2 d0 a5 A6 R4 E& L9 K. x# s
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% B1 x0 _5 @* i' b

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: b- N3 |$ D( |( ?* m/ m: H. w" k8 ?0 U




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