嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& T! |) |6 Z9 l5 B
Void UPP_TASK(Void): t& r2 u, l; ^8 W$ c4 r7 E
{3 U! U% P' ?) d1 k7 w9 B' Z7 Y" V

6 W0 [% x% }! `5 @    int i,j,k,target_int_count=2;) E' e: z' Z+ q  }  L
    char ch[2];/ V$ Z8 n* m# L2 x' L, o
/ j  j1 ]9 y( J

0 l7 z( @, q$ L
" K8 y. e9 j7 w: m9 r& Z$ D    upp_interrupt_count  = 0;7 x' b1 w' `( [% ~5 c
    upp_error_count = 0;
% j7 F# u! j8 E( w2 w1 ]3 V, z7 G7 A$ t8 J- }
    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 l) s% k2 H; g# R0 c
    // Initialize data buffers
& K- R* P; Q* X! G$ Q  [& i    for (i = 0; i < upp_frame_size; i++)
- F! N, T; H  ^: B/ ~" r" F    {
9 T- Z/ @0 Q/ W5 S9 o  x& J       upp_buffer_b =i;' s5 G+ J5 e" D3 ~: }0 {0 M' B
       upp_buffer_a = 0xDEAD;. C3 t; m2 T/ c% N0 P
    }
8 U7 c) b: ?9 s8 V2 u/ ?6 {. p+ I* G* ~; x& n0 h* Q  z
    //for(i=0;i<1024;i++)
' b  p: j, I" j0 [) D5 c. E    //    temp=0;
5 u& n8 d5 |9 u. Q8 X3 R) r6 D
4 z( P9 s. y6 c3 s4 X+ l. f    //UPPReset();3 G% k2 k! S+ ?2 r5 d1 s1 J* o% Y* R2 V
    /*启动UPP DMA传输*/1 y+ u& L3 K* E; \; L- Y
    UARTPuts("upp_prog_dma_i\n",-2);
; M) @/ y+ y9 O7 h    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% F' M2 @: i; R# M/ O% S4 Z
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  K9 o2 {7 u2 Y. M3 k6 d
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. V5 d. F9 F5 o+ k" C

) ?6 K% o6 _4 c, d! m1 F& T    UARTPuts("upp_prog_dma_i\n",-2);
5 C. d& Y) j; R( Y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 v: S: o* \  j6 L# b1 H# u( ^; x
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, \7 A' C' C9 O1 B* T& g' }    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: A3 K7 Z, ~6 }* a" I0 o" q" y
/ Z4 W; Y3 J' l2 X; h, h6 u4 I
    /*等待UPP传输完毕*/; H# u7 W' D! B/ m, J# C4 }
    //i=0;8 {0 n0 x; p2 s/ K( B5 G5 w/ o8 D
    //j=0;
3 x6 @# s" R9 m& a    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 n' m  j  t0 t2 Q    {* R: C0 u9 `  V+ ^  c7 n2 N3 ^
        /*  测试UPP传输的同时操作普通DDR数据3 ]6 `% x* J6 W& _
        temp=i;% W) R- T* V( @# d2 m; o' A6 w
        i++;
" p6 b  c1 Q( }4 \6 Y; T' F, H# n        if(i==1024)& X* k1 z' U  k; E* L  _5 _" P
        {4 j; z4 Y3 P- ^, f2 ?! S7 r
            i=0;. A9 R3 J; K4 B; m
            j++;6 J+ m6 S/ Y0 n9 s
        }
. \, F9 p+ h" M0 Z& m1 {        */
1 F$ F! ^8 c' P) a; R/ X& D- j" B( O2 n  ^0 P
       asm(" nop");6 Y7 |( Q) b* c# _

  w" r7 N- u4 F7 [. |( D4 M       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) k$ J# H* w% n) D' `6 U    }- g. u# g1 h9 O% l( q. j& j' X
1 [, v# ?/ z8 Q3 Q( ]% L
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* J2 H* b  t1 M/ i4 n. l# r    //UARTprintf( "i=%d\n",i);% H; Q$ ~) b! e' N, e* p9 K8 ~
    //UARTprintf( "j=%d\n",j);. O7 W5 R# ?! g* t& X9 y
    UARTPuts("Data mismatch in buffers.\n",-2);8 K3 r; z) ^9 u
    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 k1 Q: k: v" {* o2 y    {6 C6 ^$ u# O7 v+ B! i, \. X
        for (i = 0; i<upp_frame_size; i++)
. n& o8 [1 ?" i- L& F        {
% C0 N( l& P( ], w: n- \8 O% p, I            if (upp_buffer_a != upp_buffer_b)
' O: [5 W9 Y/ ?& }8 z# e            {
) x5 F+ R" j0 [! z1 {- y2 r9 l; s# G                upp_error_count++;" y3 h1 D- J& A7 M: c1 Y; k* W
            }
$ D* C+ e$ n( Q/ s6 b( U% W- K& D        }
7 d5 }% M1 C2 l/ U    }5 Q7 D2 I  ?3 s( G5 f2 U5 ?8 x: C9 B5 Z
$ S; b4 g0 U( V+ G. W! j8 V  z2 D
    /* 报告通信结果*/2 S) U+ G! a' [/ B" o7 D, x/ D0 u
    if(upp_error_count != 0)0 Q0 E( x9 z0 J5 ~
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: X: J3 h; D3 [    else
' @" a+ o! k' b) A- M        UARTPuts("uPP transfers complete!\n",-2);
5 v% b/ U  p! X, Z5 W( y+ ^3 w3 E8 R) X; s- G4 a
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" @. \/ f& r- |    UARTGets(ch,2);# ^# Y; ^9 C- v: P# H
    UARTPuts("\n", -2);
; K9 a' q. F" }1 i. m8 i) `! b) D! Y3 R: y
    if(ch[0] == 'y'): k$ o2 D/ z$ |  M  b6 ^5 ^& R' ]9 a
    {, e& c: Q, b5 J$ w. o
        /*打印全部读到的数据*/
3 h$ _+ C7 o6 C# I8 @) g        for(i=0; i<upp_frame_size; )% r5 [/ l- w; K1 I9 h/ x
        {
# H  c+ U: W% i0 P( V            for(j=0; j<5; j++)
! a) {# q3 {# K! E' h( ^            {5 s7 I3 ?  M! Y) m
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' x/ z# P5 W; p
                i++;
+ M* {6 M8 K0 v: a0 U% e                //if(i >= 4096)
& E5 W" y& @5 X5 q0 u                //    break;. X$ B$ ~& g. ^3 A- z9 ]9 E

0 H0 \1 d3 B: G            }
( ]' l4 |. o3 T( D, ?+ O            UARTPuts("\n",-2);5 }2 e( q5 J$ x$ G9 h
        }4 c: s; S& k3 e; F( ]
    }, q8 T0 ], q9 j; f3 W* J4 @
2 O3 Z* S* q3 L8 u5 M6 Z
}

9 x$ ?. L1 M9 n
1 B% e- n7 P8 P0 Q
, z( ~$ K+ D4 F& |  u

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 S# ~9 ~  b% g; ^. ^8 v

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 Y0 W3 N7 e1 ^& j9 Y2 X




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