嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 V# s. h2 y* B
Void UPP_TASK(Void)
# X  k; L& N3 Y/ k! h& z0 T{2 S8 H, b3 l- `( H

; K6 k! O0 U$ q    int i,j,k,target_int_count=2;
) k' t+ ^6 T: W$ ~( g* z/ T    char ch[2];. y& g1 ]; J3 b) R' v- k

4 `& A2 X! e7 }  e& x
7 M' j4 d6 n5 l' x" o* V4 T% y+ F( Q& n# y
    upp_interrupt_count  = 0;- k1 j  o; L4 j1 l8 [2 H0 X
    upp_error_count = 0;
5 V* `* F' T0 o: L' ^
* [. z# x6 k. ]0 O    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 }9 c7 y% |' }! h; o4 |3 Y" {    // Initialize data buffers
# @: D! _( V" T( @. G8 |9 K    for (i = 0; i < upp_frame_size; i++)
* l* }1 m2 ^$ n# V. _: V    {# ^6 `( U+ s( H3 s
       upp_buffer_b =i;
. H9 C0 u* Z( P       upp_buffer_a = 0xDEAD;. _1 Z0 I  R4 V& ^7 _0 h4 O$ q& W0 c$ v
    }% V, F! z+ p7 ^6 `. X' p# O. O
. ~( H2 i# m8 W7 Q- r: O
    //for(i=0;i<1024;i++)
3 A; G. Y. a& [+ @    //    temp=0;
* K( Q% {6 n, h0 C" C1 M
5 C/ N3 k- w& W: ^    //UPPReset();
5 p& F; m! S- Y    /*启动UPP DMA传输*/0 n3 U* O2 ~- P; a) e0 y) v
    UARTPuts("upp_prog_dma_i\n",-2);
8 m1 L# H& {0 _# Z; N    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, P: G9 d% D0 l0 b0 \5 `* C' V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- \8 D3 w2 n3 l    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. p+ O* N# N! z  w- D- u; M2 w
0 `  `! S- S; N( z4 f8 n2 i
    UARTPuts("upp_prog_dma_i\n",-2);
6 f2 j  l# h! ]  V    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! E# W. Q) V- @9 j# z7 ]2 \3 L0 ^
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- ~# ~4 D* c+ \6 M8 r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 Z. p) v7 }4 n7 ^/ S" a! J8 q

/ |: T& U: x& I6 v4 i    /*等待UPP传输完毕*/
' `4 b' I' q) ^5 U7 G9 Q    //i=0;
3 l5 j  m4 p0 _. ~% D    //j=0;/ P+ u# y$ L* z& \( w
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). a0 y% u9 w0 Q' k/ Y- E$ w
    {
  g  d# P0 p) d/ u( h0 F& r        /*  测试UPP传输的同时操作普通DDR数据# W' w" }% V8 {: ]/ l7 h
        temp=i;
2 E) x$ G- N0 B2 G$ m7 k8 H        i++;
' |6 L! h* f& t" O" ~        if(i==1024)
3 Q/ S- k+ n5 K% l1 \6 S! ?$ b$ v        {
7 v  W" H. l  c# c, J) c% T            i=0;
) h$ V. e2 S2 w            j++;# r$ j% o5 f. l2 R  R
        }
2 g3 s3 ]; l  g* j. B* P; d        */2 n& a7 a6 W9 |" a5 q
& r. ^3 T4 {, {  Y6 C  B
       asm(" nop");( r2 i1 z3 n: @- _- \- I

* }& k$ m/ i2 U7 d. y- A9 p  \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ E6 y% T* o' {" t
    }4 N" q5 F& u/ u6 I+ ?' Q* S$ C
5 a+ u, m* z5 U1 y0 A
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( K6 e8 y# w/ q    //UARTprintf( "i=%d\n",i);5 V& G, Q2 ~! Y5 {3 M2 H' T! p
    //UARTprintf( "j=%d\n",j);
6 E: `; ~: j0 r6 l0 o. G; u' Q) E    UARTPuts("Data mismatch in buffers.\n",-2);5 Y+ \- H" g! C; o+ j2 T7 H* b
    if (upp_interrupt_count == 2 && upp_error_count == 0)
, k- @' @7 Y  W6 I1 T- R    {
) t' V4 u6 g) e) }) y8 `        for (i = 0; i<upp_frame_size; i++)
. l# L4 x# W1 p4 o7 ~        {
9 G6 `% j/ h4 N+ e            if (upp_buffer_a != upp_buffer_b)
1 {7 y+ R" D4 w            {! [+ t6 B6 G8 h! V
                upp_error_count++;2 w7 N7 i$ j6 S8 d: }; n4 |' {
            }5 l+ x, A0 |, x+ g
        }
) _. G5 O; d7 V6 R    }
# _4 d1 ^1 a6 X. S4 J
, C  h( U) O1 z& ~8 S3 H    /* 报告通信结果*/5 R2 x4 d( `- w, Q: _
    if(upp_error_count != 0)
  d9 L7 V. z8 {$ x( i+ m        UARTprintf( "upp_error_count=%d\n",upp_error_count);& u/ Z- w4 k. m
    else
1 j3 g; P, N9 [8 b; D  S. M5 x5 A- l        UARTPuts("uPP transfers complete!\n",-2);$ x7 N6 o$ E* ~0 w

/ @2 x( o8 C, [/ q. x) z; f+ c    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' V+ Y6 T, F3 S/ l& Y    UARTGets(ch,2);
/ J6 l  X$ r4 d3 _    UARTPuts("\n", -2);+ {" X  f# Y5 Q1 R; ?

9 j+ J7 _$ O; R( c: h1 ]  N& ?& }' ?    if(ch[0] == 'y')' Y0 M5 G1 b. e% X5 L
    {
9 M( t  S4 V4 O. v        /*打印全部读到的数据*/# e, Q' j8 K4 Q+ w( W# b0 A
        for(i=0; i<upp_frame_size; )$ a, X5 a; @1 u' ^4 X0 U6 h
        {
' M3 k- R+ F. _            for(j=0; j<5; j++)
$ M$ w9 ~$ {5 z* S            {" V, D' R# m, k( m% a
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" d. Q. u& e* ?9 \3 b
                i++;
+ C& E- G5 ^8 R                //if(i >= 4096)) [; y- l- g% e( p+ M
                //    break;0 s2 ]0 ]3 X+ L9 y; m
- B9 u) ?" D8 o3 k6 m' [
            }
( W3 h% ?. h3 J            UARTPuts("\n",-2);
" U) H. ]; b" r" {# |4 _& z        }
! ?# a* ]2 r* Y. g9 z    }5 z1 ]+ x- g7 H& D1 U2 y! }6 e

0 k. V7 O( U  R9 Q}

7 t# s1 K6 R: p8 J, \
' z+ O/ J9 c3 M- f

4 N" }2 [2 K$ J) u5 f$ `- f9 i8 |
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% w0 K5 e* E" G5 N+ D
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ i" x' F$ ^/ f0 z





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