嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 u8 L/ A) T  d! L% F+ ?
Void UPP_TASK(Void)
! I. s' X) k2 @. x. d% A/ n  }. @1 f. u{
+ ~- T8 I1 V- q4 @. V
) z; N+ j; N0 w0 x% F* `, T5 Z* H* ^    int i,j,k,target_int_count=2;  D- h- H, K' w
    char ch[2];
8 `# a3 F' x3 U* F% P1 M8 ]  |! c4 H. _# u0 ]4 N: @6 f

+ q: {8 n$ N8 H6 F3 P- |  d- x1 P7 U; {% J
    upp_interrupt_count  = 0;$ g2 W& |) @8 ~6 Z
    upp_error_count = 0;$ O7 R, t4 C+ _1 w5 b( H
7 U; M! U8 k( |3 U) r) Q+ G
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, `: y2 l9 t/ S! ^6 K. v* h- j
    // Initialize data buffers
# T7 K1 k. M5 c# L: n    for (i = 0; i < upp_frame_size; i++)3 S8 |0 b6 u2 P1 I5 x. D* K% j
    {9 _# j. Y0 m9 L& A2 ]" z- _
       upp_buffer_b =i;
' ]( F. d6 a: Q& h3 F- f+ d       upp_buffer_a = 0xDEAD;
: P+ @8 _3 a, r; ?/ t    }  X7 o+ v2 C4 B7 B& `4 S* i8 v5 \" [7 \
5 f2 v  ]2 u* s* |  X9 l
    //for(i=0;i<1024;i++)
* R, ^+ m+ ^8 `$ ^4 ^& T" u    //    temp=0;
( S9 R7 m& t5 x! H0 ~* U* C8 T% U/ d3 Q
    //UPPReset();$ ]4 V- I0 z$ _) ]
    /*启动UPP DMA传输*/9 M; S' k. t  x& L
    UARTPuts("upp_prog_dma_i\n",-2);
7 l4 u$ ^, D0 e4 Q7 |    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: I  F8 t6 G' W' @  b# T. C5 O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& F7 n# ^' v5 M9 L+ q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 Y! Z# G4 j( V) j9 L- `

' H9 Y- T, _  \% c4 `* U# s    UARTPuts("upp_prog_dma_i\n",-2);
; F4 {4 m/ M) I2 t: b    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* Y% v# ^2 K) S& L
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ z4 R( }3 V& ?1 _4 B    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 S8 i3 k' N! d" f
( v4 E# G: T/ p    /*等待UPP传输完毕*/$ Y% L- Z& u3 l4 s3 \3 \& O' i. i7 t
    //i=0;2 Q# t7 m# j4 i/ e  i- K. a% K
    //j=0;
+ a  S; k: O- s2 R2 S    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' Z! I$ r8 Q3 n. u/ T/ w# O
    {& K; o+ {4 N% `+ B
        /*  测试UPP传输的同时操作普通DDR数据
) r) @! c: i8 E        temp=i;+ \: }* R* m) U6 a# Y0 F
        i++;
$ V. F; \) E4 F" {) Q        if(i==1024)
$ T; J. [+ ^! x% m' K        {
6 s% s6 L2 l9 D' w1 E            i=0;
( Q/ i& d! h- V6 O! Q4 O) L            j++;
& t% o5 P4 ^+ w- D        }
7 S8 W4 m& v' w+ q( r% P/ ^        */3 m- ^/ N6 @- L7 j& T
4 V" y! g; `0 k" p  u. x
       asm(" nop");
- u* T2 f4 y) W' V/ k
. A2 [5 s$ n& q* i" N9 y7 M       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ W  b7 \. L1 y
    }0 E" |& Y- X; a4 C& s( P) ^
( G! C" b# K2 y9 y, H# s
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 w9 g( S1 h+ K, t& f    //UARTprintf( "i=%d\n",i);0 t- y6 R& s5 Z: g) Y& o1 K
    //UARTprintf( "j=%d\n",j);
& [5 e, s8 r- Q2 ^* S) n& F    UARTPuts("Data mismatch in buffers.\n",-2);$ {" L6 W3 D4 M
    if (upp_interrupt_count == 2 && upp_error_count == 0)" D. E2 R& v4 L) y( F
    {4 L7 w* v- m! c
        for (i = 0; i<upp_frame_size; i++)
  R" A# l1 @( g2 {        {4 d) J( T7 y" H5 j3 H( L. Z1 z6 ^8 {
            if (upp_buffer_a != upp_buffer_b)  M- b7 a6 Q. t- A% f; n3 [
            {
5 j7 y% g  Z9 ?( v  T- |. m+ H                upp_error_count++;- [5 H$ a' h( w0 k# f3 F" F
            }
. ?" u. A; j3 r& o& m        }
9 ?- A5 a1 E! m5 T3 p    }7 b/ a; k( f+ F* R  V, l  |( i
% I7 q/ L6 ?* x' Y) L- m- L
    /* 报告通信结果*/
6 e4 i9 h% ^( A7 {    if(upp_error_count != 0)
2 F6 `; `9 j1 N5 t) V- M4 ~2 e        UARTprintf( "upp_error_count=%d\n",upp_error_count);. N3 r. u  {0 I/ i& L$ {, T* X
    else
' l( @" a) h8 C6 o' ?        UARTPuts("uPP transfers complete!\n",-2);4 _, ?- ~( E6 c& Q7 j

- k; f) ?, L1 [) |9 {" m    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 y1 |) e0 e7 H3 {% k    UARTGets(ch,2);
3 w3 j$ o( k, P& ]: e2 ?: C    UARTPuts("\n", -2);  c0 m" J5 W3 V0 L0 b, P* }
2 x9 x# }. D& \! |) R* O
    if(ch[0] == 'y')& Y9 w2 z$ [5 ?  Q3 S; q9 u  |+ C
    {* e. ~5 |/ ?7 ~
        /*打印全部读到的数据*/( h' y! A7 T$ f/ I6 j. N# R
        for(i=0; i<upp_frame_size; )
! d$ B' Q, d; Q- x# ~" G        {: |+ M, M$ W3 E' v( ?5 z9 ]; _" k$ a
            for(j=0; j<5; j++)- D1 _) F2 J$ u# h
            {
5 U" x4 ~3 u7 z9 J, `                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' z* T: @- K8 k6 l5 o% o" e! B% [                i++;
. t: @7 Z* L8 _                //if(i >= 4096)
; {5 L1 j! L; G* G+ C: }5 {9 X                //    break;
3 {- ?4 L4 l9 S' [& z5 r8 v/ T  K8 Y- X: W: V! Z4 q
            }2 S1 n: k, j8 M5 q' U
            UARTPuts("\n",-2);6 U4 @8 q+ J3 ~% G: v
        }
5 f+ w! J* l5 E2 W& g4 i    }$ h; G' l' i" l9 o  B; ?% g3 |; a: P

6 L% [0 u! B/ b6 P}

% \$ |- H4 Y( x

; {4 P8 Y' r4 f
$ |3 a* e4 J' z, Q5 x
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- I. j/ L8 a$ o0 `
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 H4 x; \% U1 Y8 @5 W& D





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