嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ h+ X2 w4 w- m% w
Void UPP_TASK(Void)
) n9 R0 Y% Z$ y. M5 ^# c" Q% V{
2 ?, k) F, O) h' y' c7 B, G' \0 G' [( t) s' H% `4 v
    int i,j,k,target_int_count=2;
/ Q% r0 R6 r! g  M    char ch[2];
3 Y" t2 _1 n1 R# @( J6 N2 W% X  W# _) B

! |. T& t( {! o5 w* a% E1 w
$ b9 ^' l) j& Z5 w  v; K+ A* K    upp_interrupt_count  = 0;
, }& `: f4 z$ W2 X% d    upp_error_count = 0;: t0 o  R% n: I: z5 c; \7 z& X4 n

4 A- g  g0 c, U. c3 k, e    UARTPuts("\tResetting uPP buffers...\r\n",-2);# E3 e* \. s* Q3 I
    // Initialize data buffers
" G5 d! {" ^2 Z; L* L    for (i = 0; i < upp_frame_size; i++)0 s) f& L% m- |, X# d' }6 i! b
    {
1 T, n; f/ N, c2 V$ ^       upp_buffer_b =i;
2 G& J) p: Y, t6 a4 o6 e8 c# u       upp_buffer_a = 0xDEAD;
7 z! X% u2 w) T# Z: y    }
8 }* x1 d2 P# z$ |9 c2 |, H1 {4 q( p& c0 R* O8 q: N
    //for(i=0;i<1024;i++)2 k% E) t0 a7 y
    //    temp=0;1 G2 N0 ~1 J! w6 X1 x( f& `

- B9 i3 d  H- L) y7 l" q    //UPPReset();
$ P* C) }# a6 O% [) g    /*启动UPP DMA传输*/% G: q; s6 _) ~% n& D
    UARTPuts("upp_prog_dma_i\n",-2);
. y7 s- t( h! H    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 H3 N! m9 y# T6 k& A+ b0 E    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, y* V- s; \+ J1 i) a- q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);7 `3 H3 S7 D% o

8 C8 m. R" k( ~$ }' f/ W    UARTPuts("upp_prog_dma_i\n",-2);$ l; v) [0 B8 t2 ~/ Y* I$ [! f
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' s+ Q4 ~  q0 j, E0 N2 m2 {
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 l7 E# k& F0 A  [; ?8 N    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* o* L( }0 R8 T8 D2 S
+ m- N: m: I7 ]  @: K5 v
    /*等待UPP传输完毕*/' X% n, ~: d9 V/ p1 Q2 W
    //i=0;$ }+ K7 }! o( P  I* ]' z$ w
    //j=0;
7 H8 Q$ k2 b& @1 g    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ I- R3 p9 V% n    {
1 K* P3 ?# r! S        /*  测试UPP传输的同时操作普通DDR数据, p  q) I0 [8 ^+ {6 N7 A* `
        temp=i;
* t/ \8 y0 l5 v9 C" H/ @9 h" @0 t        i++;
6 R( Z4 Q; k+ H        if(i==1024)
; g- F8 i$ j4 S/ B# a        {
- r8 u3 i; y% |' x9 u            i=0;6 `  r" f/ n( E* y4 |
            j++;" s/ y4 j! T8 X
        }
( i5 K* X- m8 k/ O6 h' k        */' y# h% ?) g: \9 y% t4 U8 r

& T: o. h: K; c" k       asm(" nop");
4 o9 i  @9 H; z: L8 h
( q; q- G# S5 ^6 Z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! d, P8 z; f. x9 d7 G- a( k    }
2 U+ V, Q& z) |( v6 s8 ?+ b' m, K, I0 v  j9 w: a" |+ l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/4 A9 B) t# e6 c6 `. G& v# u
    //UARTprintf( "i=%d\n",i);7 X/ _$ O; {4 x
    //UARTprintf( "j=%d\n",j);
  B/ }8 P* q6 `, |7 \; R    UARTPuts("Data mismatch in buffers.\n",-2);, i% J; C- M# Z* m( E; t3 U* b
    if (upp_interrupt_count == 2 && upp_error_count == 0)# D6 W9 \: [4 {
    {
( A5 G; G' o$ P. D        for (i = 0; i<upp_frame_size; i++). q" [2 f3 @0 o
        {* M- r- i8 @  j$ ^
            if (upp_buffer_a != upp_buffer_b)
6 n5 x5 h( g2 B4 X. U9 P& z            {
5 O9 v/ g, Q8 W5 ~3 ]                upp_error_count++;
& V# \1 j- s9 a: Z& s. n            }: f; ~, L8 E9 ]- ]9 Z
        }
  N( c- s$ y; o# W; V  f    }7 B% F: ]6 D3 I/ P" M: J3 U6 h  `7 ^
+ U9 h3 @3 i( D- P& V$ X! B$ b. {! M
    /* 报告通信结果*/8 R5 Y0 M+ t6 x$ a
    if(upp_error_count != 0). i# @; N- l4 M
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 D4 @3 ~8 T$ S; M) w* P' N    else& `& g9 q- @6 G" }# ^0 R
        UARTPuts("uPP transfers complete!\n",-2);
# Y+ G$ ?4 t+ o! O! s$ a6 W$ e% M) R' ?$ i5 @
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 D$ ~/ @8 `. T    UARTGets(ch,2);, `3 e& d7 ?: V
    UARTPuts("\n", -2);
+ I( q5 u* ?( ~5 e5 @" Z: {# U# b" o& B- `( Z5 }$ T
    if(ch[0] == 'y')
. n. n% }0 h( d/ w+ E8 G* H    {( U, ?2 G$ t0 d% D
        /*打印全部读到的数据*// t( v7 k9 t) h6 T3 }6 S! D/ j: v
        for(i=0; i<upp_frame_size; )
' f2 c* s9 o$ X3 e# I        {( P) d7 Q8 v& d
            for(j=0; j<5; j++)
2 z  e; F5 n1 Y  i3 q: a; z: n            {. ?1 Y# l' \) d8 `& z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( _$ w! R( [1 d$ F# V
                i++;
- m1 x( x6 c5 t1 u' H                //if(i >= 4096)
6 D; N: E( x$ ^                //    break;- L* ]1 r9 s3 q* q: _: R' s; k
/ G" i- I- n6 \% d' ~0 Y
            }
7 `2 s, u; Y* R            UARTPuts("\n",-2);
# x+ T! q& k/ v/ l        }0 p* q9 i5 W6 ]$ Z- w
    }% C, J' y+ O* w

* h1 D; D- Q  z0 Z: x- h7 G  [8 p}
# G" D8 u' e% u. X4 j3 C

, ]$ v  \/ C& _# U
! ]$ I  t( |% X" A
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& F3 ]* n5 p" P) m& j1 ]

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 u9 l* d$ p1 ~* F2 }; ^




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