嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 @+ }' n) ]# w" Y$ N
Void UPP_TASK(Void)
5 U! l# L0 m  Z& Y{0 c, w4 B% Q0 P; f6 c  V4 N' o
3 o1 I0 a9 s% R3 @' G
    int i,j,k,target_int_count=2;
4 V' S8 H& z' v- F( f    char ch[2];# ~2 A9 |4 S+ x( b
  ^- v, i4 [. D4 r. n

  w  ]9 `) o1 b2 |" o; R) h8 `1 Z  V2 j1 ~
    upp_interrupt_count  = 0;
9 s0 ~9 S3 K, J    upp_error_count = 0;; w3 s  _$ m8 G( g' `) k8 r+ O" U

7 k; h, d/ C0 q( u( V4 R7 c) B: [    UARTPuts("\tResetting uPP buffers...\r\n",-2);: M" r5 T; O( U
    // Initialize data buffers
4 Y" R- h, q6 L# V    for (i = 0; i < upp_frame_size; i++)
2 k/ q- }7 f5 x$ Q  k    {. h, Y' W4 F7 z' T% H! T9 g
       upp_buffer_b =i;5 X5 @* C( n/ h3 o5 o
       upp_buffer_a = 0xDEAD;
. d+ z4 W2 v0 [+ j, T+ z  `9 y    }
5 C3 p5 d0 u& @" e  s( L( W1 q. t: q* V, T( v" ]
    //for(i=0;i<1024;i++)
0 B( }2 Z: s! y9 L    //    temp=0;
; A: ^0 {1 R, {
) `% V! P& b; S    //UPPReset();
/ y: o9 r2 [+ a. o' `    /*启动UPP DMA传输*/9 N5 {, z7 E1 Z/ I1 s/ W
    UARTPuts("upp_prog_dma_i\n",-2);% C# r4 Z0 n- u1 p
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, h+ T7 s$ h$ l7 b0 q8 k
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 K- `9 y1 L) j0 ~$ L2 Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- X/ Q( b- p, U( |5 j! I/ d0 P1 \4 v, T% S6 `& Q$ z& p$ g/ B3 J
    UARTPuts("upp_prog_dma_i\n",-2);5 }% S$ O: J# R# C& z! r) t. K+ L
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. p" j# i* G+ A# X- i  @; j    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( {* U+ [0 d: k4 {1 h( |8 Y
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  x4 K  T, s" P; p

. e2 U8 a6 s( j' ^+ Q* X    /*等待UPP传输完毕*/& H" `) `: s' d" I, g' A- b
    //i=0;
8 ^5 h* v7 g$ C    //j=0;$ G# m6 K1 a" j/ j* m
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ Q* x0 O2 ^0 x! L0 |$ T! p
    {
2 a- i8 Y. X" Q0 K' o# V        /*  测试UPP传输的同时操作普通DDR数据
, M3 r! c: \: z  m) N* |        temp=i;& @" P; F# y( {/ f1 W( s
        i++;
& K4 C% s# g  N8 n        if(i==1024)
* w, |$ f2 U' ?7 ^( h        {
9 z1 r2 ^, Y+ ~( e" w            i=0;
; j2 d- q  N0 @            j++;
2 R& W* W0 u9 U+ Y        }
& w5 m: p5 W. I2 @" U! q& G        */  H$ U7 w( }. x2 M9 n" |0 u

6 j! F9 V0 v3 {' ^' a. X       asm(" nop");
6 u' a) ^* \* `& l2 y* E2 v- [, ]- D0 S
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ |: y$ S2 V4 K) b+ G    }5 f4 j' i* n) b, p1 ]6 h% s3 A5 \& E
/ @) x9 X& x9 X! R" `5 ~: }4 b1 B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 z: r! o8 X2 u; e& n, e1 ?" k
    //UARTprintf( "i=%d\n",i);8 U* `! L5 W1 b( Q) w; j
    //UARTprintf( "j=%d\n",j);2 ]2 d0 G7 K8 r
    UARTPuts("Data mismatch in buffers.\n",-2);/ a4 X& c) ?$ s( l
    if (upp_interrupt_count == 2 && upp_error_count == 0)) U0 _2 k8 b! k4 K$ K* h
    {
5 A( V* d* z3 z# C6 }        for (i = 0; i<upp_frame_size; i++)
0 d* G! Z! W" F5 A1 V        {
' w7 |5 P" Y1 c! c: Q% a, F            if (upp_buffer_a != upp_buffer_b)
% ]9 U8 u+ Z/ z9 a& w            {
% Z) y' r' I% {. o% i                upp_error_count++;
5 D: Q& S# x3 [3 v  ^  @: d( q            }% s  V* I: m2 x: A. Y
        }, B7 `4 n& _8 |4 a
    }5 I% W# V, V. H, B

- w) L- Q) S6 y, c    /* 报告通信结果*/7 v  W8 K& j6 {* D$ ?$ i! m
    if(upp_error_count != 0)
3 E7 v. u. t3 N4 Y, T% i( V        UARTprintf( "upp_error_count=%d\n",upp_error_count);' {" S* P- J# a& C
    else
$ p0 c+ I8 q3 {' x2 f4 N6 b" K        UARTPuts("uPP transfers complete!\n",-2);7 {1 ]: n  \5 k: s% Z/ G6 V

) `  Q1 ~7 e( Y/ |    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 Y& p3 c6 z& H1 b
    UARTGets(ch,2);- y9 F4 W' i* u8 T( W# v% C5 l$ t
    UARTPuts("\n", -2);) G) @$ [* u* S6 [
+ I3 M1 p9 Z7 n1 [5 f0 J+ s# d4 q9 w
    if(ch[0] == 'y')
/ u5 |3 K, x* t& z  T, `    {% D# g' M& l+ ^  I: n4 f
        /*打印全部读到的数据*/* j6 p' A& [- i) T
        for(i=0; i<upp_frame_size; )
3 K8 B* T  p5 A" a3 \        {' A% g0 f8 c3 z; c: W
            for(j=0; j<5; j++)
: O$ d6 v) Q$ w6 r' O            {  @# f+ |# a, F0 O
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 c6 x, i0 _) H7 P
                i++;4 M. Z  H) ^! W4 z, y3 h4 m
                //if(i >= 4096)
6 A( \6 v! O1 z                //    break;
7 z9 g2 E6 Y5 c2 U8 _/ j, M! ~% J( B  x
            }$ O" x+ [- l4 |
            UARTPuts("\n",-2);% ~2 @5 A: v, s2 h" U; h( X, q4 q- f
        }
- U' A* x7 l# b/ h# n    }" H3 @' t7 Z! x: R
* Z, |6 `1 F4 U% T
}
3 X. V9 R8 [5 G$ q# O  B, k/ D
) x' k. d6 }9 S
1 |4 A3 r2 g1 m: @  z6 C

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 r$ G2 X$ p0 ~& s+ q& V" Y) A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* ~1 d2 ~7 Q+ f: a& h% J




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