嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 e) b% O6 [2 i2 |8 c& d, t1 w0 B
Void UPP_TASK(Void)
$ s) K! V( }2 Y/ ~{# g" [0 [$ g/ i( U; D2 k: V
3 j0 W6 [* ?8 q- \+ e( Y
    int i,j,k,target_int_count=2;
) U2 O4 \3 @; v( O& A- W7 h    char ch[2];
6 e, M: ]/ O3 w2 }  ^. p: `* S8 ~3 p/ U$ ~: k6 F0 r7 s* L
; I( s/ I* H2 \) x; I; x* Y2 M8 R
: m. o$ C0 t3 _5 D
    upp_interrupt_count  = 0;6 l: \9 m2 z$ J8 q4 |
    upp_error_count = 0;8 L4 h" x. [$ |0 E
7 h1 d" z% z! l1 x. E
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; q4 M: I: s# l* R( B% C  b! C2 Y    // Initialize data buffers
, V7 k9 F, n% F4 R7 V0 D4 U" M. b8 x    for (i = 0; i < upp_frame_size; i++)4 L# k. c3 \9 ]0 d
    {! F0 C- a. K! f( k* `& l9 Y
       upp_buffer_b =i;
& X/ s8 A) D6 S6 Q. a' |  r8 g       upp_buffer_a = 0xDEAD;
: w8 n; y4 z3 q    }
% a, J8 @9 x" o, M% S+ D0 \3 r9 H
    //for(i=0;i<1024;i++)) h+ v1 _; {9 K
    //    temp=0;$ u8 n1 X8 b; K. f/ V
& V# }9 `8 {/ T% X
    //UPPReset();. b5 U5 _9 p) R2 u
    /*启动UPP DMA传输*/
/ J- J3 u5 U; Z; Q' h' o0 N    UARTPuts("upp_prog_dma_i\n",-2);
8 [, z3 z7 L, s9 U7 ^    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 M. }' L# ]0 s& C0 \  f, B% v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' ]6 ?5 [* M% s( {: I
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. C* ~  o% K6 R1 t7 s8 d
( j# L, d! V5 q6 U. p' H% `0 i    UARTPuts("upp_prog_dma_i\n",-2);) @$ ~1 M' E1 B7 d/ d# _& u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 ?8 c& S; B8 n, c- \% d    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 P& L6 l8 G  p& G9 d: X
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( y! h+ A3 K* s! G  w! ?$ }

) {7 }( O# V1 x* |    /*等待UPP传输完毕*/! N1 l1 y* |, E8 \$ ^& v: j
    //i=0;) b3 f: |$ ^5 Z& D  n8 J. r
    //j=0;
0 g% M' E1 m  g" I8 |1 T    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 ^' p; W" E! l' W. e    {0 N; @) C2 b1 `8 o# |7 n
        /*  测试UPP传输的同时操作普通DDR数据
6 K; n% G: ~' C9 U; t; C        temp=i;
$ q% u2 D- H, }6 b* e        i++;
8 i! R9 u8 |7 r- K& X5 j$ H; d9 h        if(i==1024)
3 b8 X1 D/ R' q. O3 }        {
5 {1 ^8 }' ~* W9 G7 S" X) j            i=0;# x, @! v7 H/ m1 I% j# ~
            j++;
, U" m2 S1 z) W8 @3 W8 S; _        }5 r" T7 A/ O. h+ C. x0 X
        */
5 ^; u: R/ _! {% v* U4 D8 |
7 @) M6 J, C% j       asm(" nop");
! {$ c) E( }) @0 Z) Y1 E1 @+ k" V" }) A6 R
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; O9 u" y" r% k( {7 z) X2 I
    }% b* U+ e+ k0 ?. g5 t& ?# @3 l( ?

4 ~+ z7 V) t) o- _3 Z/ o/ P. @! ~    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 Z8 G7 P5 c1 a/ W" M( b' B    //UARTprintf( "i=%d\n",i);- W$ Q, P1 N& ~2 s" w2 X
    //UARTprintf( "j=%d\n",j);: ?2 k) Y! N- v
    UARTPuts("Data mismatch in buffers.\n",-2);  m" e( |8 |6 ]* f6 L: S
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' z3 X6 P, s- V, C8 [& t    {
6 `  T+ z! M; k% [        for (i = 0; i<upp_frame_size; i++)! t! A9 x" u2 k( o+ Y2 p
        {
. Y' r+ {; r  ^5 B            if (upp_buffer_a != upp_buffer_b)+ D! K! x+ [8 N" x% q
            {" k6 b6 m, a" W/ B: A5 x
                upp_error_count++;2 c) G, S; y! @
            }0 Q& F! m  f; m
        }
0 x6 A2 w, T) F! z- K$ _& G    }
8 l( j* c0 @* R' ~7 r
3 j5 I5 I/ X: F3 g( F2 t& w    /* 报告通信结果*/
( F4 s1 L* C* E2 _( c7 e    if(upp_error_count != 0)% x4 i% D: j5 p& s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);" ?+ R# t/ l; b
    else
6 _2 `: D: _& g0 R+ X! v/ }        UARTPuts("uPP transfers complete!\n",-2);7 A5 ^/ L! o# k( \

* _2 I2 j# {6 Y) T& q9 J    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* ^  `  d2 f7 p& J9 n; B; b: f
    UARTGets(ch,2);
# {9 V5 J0 R" ^. Z) X9 U    UARTPuts("\n", -2);
  F! o4 K8 P9 t) k+ c8 p: ~9 r4 m4 U1 x. u9 t. y$ @9 y
    if(ch[0] == 'y')- v* }2 E7 ^' P" l* y/ B
    {+ {, b7 a* f" i, ~( l# {* \8 Z
        /*打印全部读到的数据*/
. |+ ?) [" W6 u* y9 H  S3 |( g* t        for(i=0; i<upp_frame_size; )
  N2 _% Z- S  z9 Q! E) F        {# y+ \- v( w- u8 {, D9 |7 v$ v
            for(j=0; j<5; j++)" |4 o8 X9 Y; G
            {
' I& r" X# c, W8 O2 ~4 [# m                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' e% v  i- ^+ g
                i++;0 e+ }6 G, [; ~- ^) o* O* W- G
                //if(i >= 4096)$ [* Z7 K' P8 q  V( G0 [8 e
                //    break;
+ y5 [7 Z) N5 ]; u/ n" k- f( z  I4 F! c, D+ p
            }
6 `9 p5 D  H6 k6 f" O            UARTPuts("\n",-2);* n. a9 `. ]8 G( V* [0 h/ S
        }$ N. f! x$ P0 I5 Z8 O+ G2 @
    }
) x& {/ H; W4 [6 L! r
7 S  v" P, O0 i/ Q0 L}
  }$ ?, ]. u) o/ {  ?5 K) J
& e( O8 `" y6 O7 x

& S' e- d; V3 D" c3 G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 Z  ?0 T) g, d+ K9 b7 k

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( ]' s# n3 o+ C





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