嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" c  V5 ?. X7 _1 x. ]7 C. v" f
Void UPP_TASK(Void)5 Q8 Z5 p3 X) [& k0 X
{
4 e% Y* ~7 L( ^
% ^9 l- l2 j4 o+ S4 Q  F, ~    int i,j,k,target_int_count=2;: K1 o( _6 |. t1 n; i) H
    char ch[2];1 l% _! p7 K- H. P& C/ q
" s0 V- H% {7 ]- J

; A! C3 `5 j1 j9 o! F+ n& L- j- R# S1 \$ r  M
    upp_interrupt_count  = 0;
, s* o) `: C  V# \; F& z    upp_error_count = 0;/ |, j' D$ ~8 k8 \, F- s# H# _% }
+ w, |$ v9 z8 q$ S0 P
    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ a0 @; L7 ~+ l7 S! n- K+ C. V/ }/ _+ ?
    // Initialize data buffers% T8 D/ V1 y7 ~! b4 C
    for (i = 0; i < upp_frame_size; i++)* V* d1 N: {) E0 {  U( u7 e9 @
    {" B7 h! C6 A! {. J) u2 X( g
       upp_buffer_b =i;" g5 x) t) B; o" q: s0 W1 M9 p
       upp_buffer_a = 0xDEAD;
5 J/ q1 M0 w4 f$ u6 U    }1 G! f+ F% D: P1 ~+ J! w$ q6 E/ W
1 V  I- E" G- ?+ X+ ]: ^: J3 i
    //for(i=0;i<1024;i++)6 u" d/ \% b  g/ j* n/ U  V
    //    temp=0;
0 D: e% {1 Y5 g- o( A4 a( d1 ]4 l4 O- D9 w" d
    //UPPReset();/ v$ n  O) l& j% N" \; L4 f% u0 ^
    /*启动UPP DMA传输*/
2 W/ ^# n  y7 j3 z4 p( B& V6 k/ S    UARTPuts("upp_prog_dma_i\n",-2);
6 \1 f2 N6 k/ Y8 U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 d6 c* p, ^2 D6 v- [) F
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' R* V' B3 S0 P  ?) |    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, z- S. ^5 e" h% s, M1 I
) l8 |5 O+ ?8 ^% o
    UARTPuts("upp_prog_dma_i\n",-2);' Q3 n2 A4 r& @1 Z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; p8 \' Z7 O9 A3 b# ]8 A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ J& ]( U; T% J4 ~5 A+ k& u0 n
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* o3 X" ~- Z2 u) m
% ?; m2 u; n9 D) N" P! k2 [0 M
    /*等待UPP传输完毕*/
: V$ ~' q; W2 [8 h- m0 k    //i=0;
) ~5 ?4 s0 @( h$ I9 w    //j=0;
/ A9 |# c! p& O- ~) J2 E    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: y6 E2 f; A4 X    {
( c% x# D& H! w5 r' Y( t        /*  测试UPP传输的同时操作普通DDR数据
0 u" [0 G, c; `1 J" B+ p        temp=i;
7 ?6 P* B& [% \7 L- W- I        i++;1 \9 y- @; ], d6 v
        if(i==1024)( V" R7 L2 Q6 @2 K
        {  y& Z& f% u4 w0 l
            i=0;
! [! \: @$ N( W& t            j++;: e2 `" H2 |' H4 g* p
        }' q2 |# R9 V1 S6 x/ @2 ~8 [
        */
- X8 e  N' f4 m1 ]6 r
/ `2 @/ j; G- o; Q; i3 s       asm(" nop");* q+ t' h6 t4 ~/ [$ ~, x
- Q+ D$ W( Q) m. I( l, }
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# q+ c5 E9 S* B1 Q0 D6 Y
    }  L$ V' q# i/ o: e; `
5 M9 E, \) {, D& w
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* c5 q- O) z9 l( T+ n
    //UARTprintf( "i=%d\n",i);3 `( M+ u( o7 O- Y) b
    //UARTprintf( "j=%d\n",j);2 L1 L! G) j" n& k1 o
    UARTPuts("Data mismatch in buffers.\n",-2);) F- ]3 ?; d6 u1 f' s6 I+ Q9 g5 N3 X
    if (upp_interrupt_count == 2 && upp_error_count == 0)
* Y# I; d, K% z# [. r3 `    {
4 J/ S* ~3 y: t" ~        for (i = 0; i<upp_frame_size; i++)
9 s+ U4 b3 a& L1 Z7 e3 \9 q3 h        {
6 h7 M& i3 Z: C. E1 V            if (upp_buffer_a != upp_buffer_b)6 G2 }8 g$ C: x9 t3 L. V2 l! F3 R# F
            {
/ s; y+ i. |" u+ c# Z5 f                upp_error_count++;
3 W, W1 a! l. D! q            }9 H5 L% ]1 O; W& ~* ]
        }
6 e  r* n3 h* c( u8 k0 r    }  ~- Y7 p4 f4 B* u0 F
% |* y, L& P5 J, Z  t1 h
    /* 报告通信结果*/
- ~) C4 u: S6 H# x+ j    if(upp_error_count != 0)- A. r6 x( r4 q* Q' g6 W6 L
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* r$ T' m  H( b: I" v' {    else, N( \) E4 f+ O9 W7 H" l
        UARTPuts("uPP transfers complete!\n",-2);
& M4 K" k, S( V
: A- g) D( }* F- R" e    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; O- Z. E- w) A9 w  R' d4 M/ H    UARTGets(ch,2);" F( U9 ^5 v8 V4 E' `! t
    UARTPuts("\n", -2);- [+ q, U, {$ B5 R$ C

9 S. I" m" c$ ?! n4 }  W    if(ch[0] == 'y'); P1 g) o9 y7 B8 B
    {5 ^; o  V. [$ |+ q) Q! o
        /*打印全部读到的数据*/; W0 N9 G* E" S0 K
        for(i=0; i<upp_frame_size; )
8 P0 n- s% @0 U, {; [        {: f- X( ~* n- E9 f+ D
            for(j=0; j<5; j++)
+ }9 ^, T: G2 G9 J  i1 T; k. }$ D, ^            {
1 v% t1 z5 n4 L9 v) Q                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. |$ o8 E9 a; H# e- W0 B
                i++;* G0 l; M: p: z8 o5 ]2 m1 E1 R
                //if(i >= 4096)$ B" Q3 s; {+ C
                //    break;! a: D) |9 w( V& f) s3 h4 G
: p. s) a/ ^3 Q8 P$ K! I7 b4 w
            }; a# c: U1 V: J9 [2 v  X- G& B% R
            UARTPuts("\n",-2);: L& ^; |) n& I$ N  H9 y3 o) {/ j
        }
: F8 r7 i% w0 q: |8 Q4 B2 t  r+ ~    }; _3 Y3 b4 a( F, `/ l0 M4 w

9 E  \( V4 }; `* Y" a}

3 A) e% I1 `* ]9 [
" Z$ I3 l: M$ V9 b4 a
# w+ u5 Q! U& ~

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# J- i( W$ k- [! h4 m

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' g1 i- a- @6 Z




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