嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 ^* m( C* c: f2 H' h9 |5 ]
Void UPP_TASK(Void)
4 _& j# ]+ w  c  [* \{
* c! b* _) g' e# k, B0 X9 P5 i# Z9 B) O  `7 M7 g8 T3 y$ y" f) q# n) A
    int i,j,k,target_int_count=2;/ \/ @% n# Z$ N' a+ p7 [" ]
    char ch[2];, J3 I9 h5 N  V
9 V  a8 Q/ Q; q# b1 a0 y
+ Q' Y* H6 ~8 U$ {" g# X
: I$ g% ~! j& A; ?) J3 t
    upp_interrupt_count  = 0;
4 l, Z6 N. b- J5 e    upp_error_count = 0;2 ?+ W  C8 N! c7 W" k; ]' ]* u5 }
0 K' |4 o0 P  {9 f$ N2 w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 Q0 X! s7 A$ U& k7 s3 P    // Initialize data buffers1 @, _; n" J! u0 `. [3 [4 B* m& d
    for (i = 0; i < upp_frame_size; i++)
( E% L, f* x1 e( }" @! C# ?# M) F    {5 K+ P& c3 z/ P* Q+ ^: A' T( Q" a
       upp_buffer_b =i;
0 f5 g* t" ]1 ?$ d8 q6 [       upp_buffer_a = 0xDEAD;6 d# q1 S" u& _/ b+ O6 J4 y2 v
    }
7 ]/ P9 f- G  R- A/ h. y8 S& @3 E0 C8 x8 I6 \; ]- q& L
    //for(i=0;i<1024;i++)% f8 Q) ~0 p1 z% s) K, A
    //    temp=0;
- j4 ~9 d: k/ k8 ~, Z: b6 L6 E2 T2 N5 Y
    //UPPReset();; o2 {/ i) {$ B
    /*启动UPP DMA传输*/
, s# {( u/ `; U    UARTPuts("upp_prog_dma_i\n",-2);2 Q7 X5 j) w# v
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 j7 \6 N% x; D# `2 ]( f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, W; N5 K- l, D) M) V    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* Q' J+ n: ?4 U6 ]% j# H2 b1 w4 s6 b) E" P0 \2 Z
    UARTPuts("upp_prog_dma_i\n",-2);5 |0 a8 J, E/ d! \
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 R: q( f4 T' L$ k- T    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& C/ ]# S7 F8 u' q+ l0 D    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! b) b0 c2 a( a# ^

6 p1 B" M; p% T    /*等待UPP传输完毕*/7 M% f( p/ N4 o4 }+ g
    //i=0;# C, V. o; x+ F  t8 R
    //j=0;$ N, c5 B' t% M' h8 T9 P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! @0 Q' {7 h9 T1 B* i
    {
$ a6 E# N& t( N2 l        /*  测试UPP传输的同时操作普通DDR数据
! ?9 D& `4 L6 N( \        temp=i;
1 Z0 j/ N0 V4 q( @. n        i++;
# s5 }0 N& S0 n) u+ o/ o        if(i==1024)* Z) J# q# I( j! M& h
        {
2 _& d! l% r% Y& `; C: R2 M            i=0;+ x9 `1 H, H/ ^: G' w& {
            j++;
' R5 W7 _9 l1 Y% ?$ _* l/ r        }8 p+ A0 Z: ?/ r( Q' \9 A" q
        */" D/ M5 m* j! Z: V2 u9 o0 v
; [3 o+ d: |6 m
       asm(" nop");7 {; A2 d$ |! z% n& a
2 u5 k" K! D: V: M! I
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" N- m& x  v  L; t1 R! i    }
% `  r3 U; e: h( M7 D4 [7 u$ p- d1 ~
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% Z( [' L: j9 p  `) j8 X    //UARTprintf( "i=%d\n",i);6 \* ?6 b5 C$ X( R5 ^1 t& e1 z
    //UARTprintf( "j=%d\n",j);7 |" e/ g7 l8 R8 R7 _
    UARTPuts("Data mismatch in buffers.\n",-2);0 m$ B0 |* z+ [6 V% g
    if (upp_interrupt_count == 2 && upp_error_count == 0)8 b( K/ J& K( L' t3 K# Z
    {: i3 Q7 ^/ S" u! u
        for (i = 0; i<upp_frame_size; i++). r( K- R7 w9 r
        {; U2 W6 S5 b; c4 P4 H- @5 V
            if (upp_buffer_a != upp_buffer_b). \( `( ^$ n- [- n3 N" C
            {' n0 s' p. T% ]5 K
                upp_error_count++;0 z$ U- Z$ `8 M# [- D
            }
; [$ N% u% u- S- E* t        }: f5 f* T/ r9 }# {9 y  s- @
    }1 I0 u0 Z- f' B8 G+ d

4 ]/ ^, O$ N/ [% f" S8 }    /* 报告通信结果*/
" P7 i- T* a! j. h3 |3 @9 O6 Y    if(upp_error_count != 0)
5 ^' W+ K; X' G) I# o        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 e0 p9 j' u" J    else
- V' T& E5 n  B! P/ u        UARTPuts("uPP transfers complete!\n",-2);6 G" v" k  ^. ]2 {9 y+ \9 X
. Y% o, @, d4 u3 Z. w" T4 _
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 e$ P  p/ G- c* c
    UARTGets(ch,2);
2 n. O6 |1 \2 a4 O% M    UARTPuts("\n", -2);
7 @) T) M! l) ]: ~, A% `
1 v$ e) }5 {) R+ i    if(ch[0] == 'y')
: ]  R6 {9 _* V' G) X6 A: E" Y    {4 \! K$ W) U4 B1 Y! A' d, r2 _1 k# Q
        /*打印全部读到的数据*/0 j- Y* e$ M8 S; K6 F* O
        for(i=0; i<upp_frame_size; )5 _! t3 g9 O( T( |! G7 M
        {+ T3 E3 U- t; a, w
            for(j=0; j<5; j++)
8 _+ _+ g. B, J. q2 q            {2 c! g% `. n  _/ w5 v3 P" b* H9 ^9 U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 t1 r/ C8 j* N1 n! {: A- {
                i++;7 M7 x  R! H: o" _. `4 X/ P+ ~) P2 E
                //if(i >= 4096): i3 [" r) K6 s# b; o3 \0 U
                //    break;
) h4 j" J' R6 q. ?* V7 B( L6 j6 v$ m" c3 k
            }
. d! r5 v$ E7 d) c8 C* I$ x2 r. U            UARTPuts("\n",-2);' t8 m! D& u3 x. C0 y* Y
        }
" `6 l  H4 Q% l+ ?- ]0 G    }
# K; \7 ]' l# R8 u" C- l* O: g
* r& \  W% G8 h& J* F, j}

3 {3 f6 C5 v6 u4 g6 A  x

+ p4 U" Y3 h' W3 W! [. A% c
2 K; U% c4 e1 ]5 H
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( \) V  b4 }# Z" x' o2 a# c

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, K1 t; L7 \0 H, g' {( h5 a




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