嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( j: c& ?0 ?' ~$ `: ]+ D# k( D
Void UPP_TASK(Void)* _; P& ?2 A6 J! k1 G% K- ?, c
{; L- s4 q$ p, F# x% v

. g$ m( b  \! e1 m, W1 W6 L+ d    int i,j,k,target_int_count=2;, ]8 ^( l; v+ f" |' P: N
    char ch[2];
5 [) l" F' D2 ?$ i- |3 ^" d5 F; S/ k6 ]$ X
; `# e; ~4 ?8 S# r* H7 C

, p8 g- n2 C- x9 V8 k* b! a7 `: x    upp_interrupt_count  = 0;
& `" a: {# Y' b! |! y    upp_error_count = 0;
. Q. P  D' x) g* [+ P: `3 D6 n  v2 g. g5 x9 k2 ?
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 s! F: o2 n" |3 v: J& y" U    // Initialize data buffers
% i/ I# C9 l2 y( h    for (i = 0; i < upp_frame_size; i++)5 f* C: d  z9 T7 Y% \* r
    {
; p; Y7 f$ B) l5 s       upp_buffer_b =i;( `% O: a* P6 A) v" v' ~5 E3 e
       upp_buffer_a = 0xDEAD;4 g+ ^" q3 E3 k/ z. k: G
    }3 e, F5 J( v( q3 V# g3 o- g9 ]

6 F  K" U( b$ ~    //for(i=0;i<1024;i++)
/ `/ M+ {2 S) T7 f! i- x; _    //    temp=0;& ]# H- U% i% u3 @8 a% H

1 g* J( Z) [6 p2 D) ~    //UPPReset();
- m4 s. U1 I4 u    /*启动UPP DMA传输*/4 ~& N" m) c8 G6 ~
    UARTPuts("upp_prog_dma_i\n",-2);/ Q* `: i  C& x+ u. }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 ^8 r  k5 K6 r! u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' }, z; z) l7 Z7 ~% T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& j6 n+ a! G& K& E7 D

( m5 F( [* s8 `    UARTPuts("upp_prog_dma_i\n",-2);
( u- m2 d7 N; C' y' z    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- e4 O, A9 D# ~9 r$ @+ F! r2 z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 X7 g. ]! x' l0 B# u    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- Z8 D' q" M" G" a7 b- j
$ L" p* l0 b# s0 k. a/ A    /*等待UPP传输完毕*/
. }& {8 Z% O" U! i8 ]    //i=0;
" i2 k" d+ {) a. Z    //j=0;% d; O% ]4 v3 g9 J  b
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 E; {/ ], {3 u+ l4 A: A# ^4 Y    {
) ?7 A" P& h% V+ c        /*  测试UPP传输的同时操作普通DDR数据
( d) S* `, Q! a4 [+ F! }( T3 \        temp=i;
, W: x% M* w- v6 n! Z: z; g        i++;
% G% f* g& {/ C* ?  R* _        if(i==1024)6 j( t' Q' T! D( w+ s- A
        {# v/ u$ o4 }* J# w) z
            i=0;
, [) Z; E4 b1 T  J7 p* A4 G4 T; Y9 X            j++;
9 |" \! c& r* e2 _4 [        }% g( {$ g+ j2 o8 W& j- X2 M4 ]
        */* {: @  a. W7 A. n$ ]! y

1 Z9 E2 Y4 w$ ?- \4 b       asm(" nop");% E% ?2 y) U( _# T# I4 V

$ H% {  E% B- Z  ~% [3 X       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 e5 T$ G% ]# M, F
    }7 a0 h- i# k; c

: g# }/ {3 L! [! H* X    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 w/ b0 r* n6 H) O    //UARTprintf( "i=%d\n",i);
; E7 [- W7 G/ C6 x2 \3 Y5 _    //UARTprintf( "j=%d\n",j);+ k- |& ]9 v; D( A0 r% |; V
    UARTPuts("Data mismatch in buffers.\n",-2);
2 w* g2 x' [, n9 F, x    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 |1 t# O# K, ?! H4 v$ M    {
+ \6 I6 ]) B/ A3 L8 ^        for (i = 0; i<upp_frame_size; i++)
4 _0 l* |" a6 P" q        {
% f& }1 d. _+ |. a; [9 e0 {4 K            if (upp_buffer_a != upp_buffer_b)
; [, I( H7 j5 P; c9 M0 W2 O  w            {. W1 a& E+ G* P& I, L# g7 q. A! S
                upp_error_count++;
- m3 Q8 n0 C0 i( b2 h" B0 v% F            }
' l/ r0 t9 t  z) p7 N* S        }$ h0 C: ~7 a% S7 f& D
    }
# R7 y4 D" w9 h, ^4 Y% X2 z9 m$ Y0 l- w% Q2 Q
    /* 报告通信结果*/
7 s1 m2 G# ?* Z    if(upp_error_count != 0)
# o1 n7 \0 p6 |/ b+ M# Y        UARTprintf( "upp_error_count=%d\n",upp_error_count);: A3 u, ~8 q. C* ~7 e) E
    else
, @# V0 R3 w$ `5 F        UARTPuts("uPP transfers complete!\n",-2);
% [; b+ `3 ^! x! z
4 M. N- A; X: l5 j: K3 `. x: B    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  ^/ m' a1 u! P6 f* u  j
    UARTGets(ch,2);2 X0 W, [! [1 G8 e! f3 z4 a
    UARTPuts("\n", -2);  R# y- F5 d  ~1 D0 w9 d: ]) u5 `
5 o7 y( H1 E6 f2 q$ q. c! q) O
    if(ch[0] == 'y')% x& A( M" |# }8 N6 M+ F, \% D( Z
    {8 G% c9 K1 p/ I: v8 `
        /*打印全部读到的数据*/
' _2 L8 M' [' }  k' O        for(i=0; i<upp_frame_size; )
* m( V" c3 a# P; r        {
* l# V) E. D" i$ d& G            for(j=0; j<5; j++)
* F$ @; I  u' F' v            {
: Q. G; L) F' m  f7 k0 L& A                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 d# E5 \4 Q8 I% ]; }                i++;
' J, A5 R5 c! I+ d  ?                //if(i >= 4096)# @7 Z" d  [( q, c2 ^4 r$ r
                //    break;
0 _" V) W/ v& ~1 \, Q5 _" X  K& z) g# o0 n; |. F: T$ j
            }6 Q3 [8 L* H. C
            UARTPuts("\n",-2);$ ?$ q9 B! K  C! j
        }/ k# E& V3 Q( y/ O5 j. n+ }
    }
4 @7 [" K1 M; S% w
. u; m8 `' M" S" F}

4 y9 w% m4 i9 W. p
1 j* t1 i: g4 n) b! u! y$ H
9 J1 O4 i. u0 }6 I6 j! G4 X

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 K3 O5 g7 E& B+ v. O+ _

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 U( j  G! ?! }) N- E- R9 K





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