嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# \& G9 V5 T  f3 }" G
Void UPP_TASK(Void)
7 V! B+ u6 @: l: t, s{, L2 ^. n" N+ V8 Q; f1 K
( M8 e- T* p, Q1 M! u3 r  b; M# N
    int i,j,k,target_int_count=2;3 R  g  [& z6 k' p  r: w
    char ch[2];4 E  F9 f1 r2 u7 l2 e2 u
* A! d* D2 q7 R
' V0 r' s9 ^- H; I
. {# \1 o# \* ~
    upp_interrupt_count  = 0;0 N# }9 m- x" p0 B3 w! p  W1 [
    upp_error_count = 0;
; S3 Y, T8 l* e6 \" y8 U9 D' ?' j6 R; f$ x" F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ r& Q1 x, H" _
    // Initialize data buffers3 R( y% L7 W$ x$ n* \7 {# @
    for (i = 0; i < upp_frame_size; i++)% E1 p5 Z3 J  E2 A% l
    {  ^* j' m! L; A9 G
       upp_buffer_b =i;! \) X5 @& X" U
       upp_buffer_a = 0xDEAD;
) z) P5 Q7 T) i$ ^' G! `; [    }
9 t! ]' ~) v) Z; p1 m8 `1 ^5 W8 \" {) J# X4 r  X
    //for(i=0;i<1024;i++)
/ W8 l  b2 o5 ^1 m) d    //    temp=0;+ N; L; P* b1 E  N
0 P, K0 Q* I! P* J0 `" T% ?: k
    //UPPReset();: L: ^+ y" W3 X1 f3 Y
    /*启动UPP DMA传输*/
4 J/ N& ?" M. A/ \8 |! w/ h: r- J5 b2 W    UARTPuts("upp_prog_dma_i\n",-2);* H0 I& j1 I: L7 E1 _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( G) C# ]5 Y/ R) m* N+ Y. W
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" \0 `- @" g+ [. Z/ t6 p1 m9 Y
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, R2 O5 m5 S9 |  a0 O

7 V" b' A6 l8 L, @! K    UARTPuts("upp_prog_dma_i\n",-2);  x* i- E# j- V1 w' S2 L
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( ~% ~' _; ]& {    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" g- u* Z- Z9 k9 Q1 a/ a
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 m) U+ |+ d0 Y$ O
/ G3 `5 e+ m" B8 Q4 N# |    /*等待UPP传输完毕*/
& b' Z, u* Y8 O) b- H    //i=0;
: l) X* U7 [5 X1 P    //j=0;; E5 `3 t. o+ ^* X$ X2 _2 }  o: S
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% z# ]; L9 x+ R. Y) z* U$ U    {
/ d+ e4 |/ S/ K2 G7 H        /*  测试UPP传输的同时操作普通DDR数据5 N0 V8 J  b5 B" [
        temp=i;
: r/ v8 h5 t1 w4 M, B# k        i++;
3 i+ E1 P7 o* C& u" ]        if(i==1024)8 D* B+ ]3 A  {; h) u. r
        {5 t1 s( J# ^0 o; N  C; n% M
            i=0;, D) h, T/ F. `
            j++;/ O7 |- S0 X3 U4 n; g, ?
        }3 r" S" M# S1 l! b0 v
        */; S" Q, S% W& \, t: k* V
2 k# I1 x% w( u5 j2 A( f5 K
       asm(" nop");- p8 ?+ O6 m# y; R2 f+ d4 i5 e
% ?2 V0 [& m6 G) o
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 p, C9 v. q# x  T% Y
    }
9 A: W9 t! [  v$ E7 B. z
+ Z* d8 P, L' N3 @    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 U! n( j* [. f9 N" l. z& r
    //UARTprintf( "i=%d\n",i);: C& f# X8 Y# }/ B2 @) A4 `
    //UARTprintf( "j=%d\n",j);
& p$ C% i2 m; B9 p$ y, E    UARTPuts("Data mismatch in buffers.\n",-2);( v5 ^- F' E) g: o! s) o$ ~$ U
    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 b3 w$ c8 `; `    {% g6 i. V% ]  p+ J- e1 D1 C
        for (i = 0; i<upp_frame_size; i++)
* x2 R: v$ |- J! @        {
/ D0 D6 g- _: u9 I            if (upp_buffer_a != upp_buffer_b)
! p: T. [% P( u: J+ `8 f/ J$ B            {+ ?1 S! Z6 O0 h" u8 b1 D
                upp_error_count++;5 S- x" q# ^2 H
            }
& R( f* D5 r7 W' G6 U, ^- F        }/ H5 X, P/ k+ K" z* R. T
    }
' E2 g! s, V( I( v2 T! z
- z2 l, _$ P: Q    /* 报告通信结果*/
: _4 X% U1 t/ q' n; F+ }2 i    if(upp_error_count != 0)
0 A7 k+ _' h# J) f% g; Q" J# }9 v: B        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 [' t6 m  K3 ^8 |) J
    else0 c; Q4 {8 C4 [( r" D
        UARTPuts("uPP transfers complete!\n",-2);
; ^; u6 t6 p: W# [9 V9 m% `! X$ s! M) r. u: k2 x0 S/ F* z1 b- X1 E! D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
, A* J# i0 _5 o. w    UARTGets(ch,2);
) c+ N: ?/ E1 W$ _7 C3 f  F1 g; ]    UARTPuts("\n", -2);
/ H7 \  ?8 d0 \1 H) L! K+ f- [, N- M5 a6 D4 S
    if(ch[0] == 'y')" Q  `3 Y# J; n; Q
    {: f% _  k4 s1 g( Q4 J) ~
        /*打印全部读到的数据*/8 A9 w: o0 I, c6 c: P: B
        for(i=0; i<upp_frame_size; )7 t# d3 E& A# F" \
        {3 y% k. }0 U% D& ?; n) s
            for(j=0; j<5; j++)
+ ^/ e" p( A) [            {
3 O8 y/ {8 g/ O- ^& ^8 M4 B7 f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 ^* |9 x" t. t' C  R) u; n
                i++;2 r* ^6 ?5 n4 R5 g0 c  ?
                //if(i >= 4096)$ w" Y: p8 ?# i" c' ?  J
                //    break;7 x2 i+ C. E% b  c6 Y- Z% r

$ y' P9 R4 D  j" `            }# \' Q9 o9 O3 A) y
            UARTPuts("\n",-2);
) W) H9 g+ |* I; Y- \* a  g0 i' _        }  G" z, M( _4 `0 R) A8 D
    }
$ w# f) x5 K# w& c
5 L5 w) y& C5 ^$ x& _! f9 Q}

0 n$ v- _7 E: @5 k6 E0 ]' g8 Q

% e! G& `* I  h! Q2 k
# L- Z3 ^8 f- |; @, F1 V
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。, b8 M) P6 W8 l

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% ^  C9 `7 ]' e: @# }8 P: l+ K% r! p




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