嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- q% `2 v# E! V% X
Void UPP_TASK(Void)' J9 y! P4 F) c1 i! T/ s
{/ k4 |2 z* ^; V; @) [

& G4 @. Y6 Q  L) h3 \7 d    int i,j,k,target_int_count=2;
( S* P. o4 x2 D4 E  F) H2 a) s    char ch[2];
2 w" h8 v# ]7 x( g$ V9 u/ x& `, V
. e6 P2 c; x3 J- g1 q8 m" ~: B% S" h( H" e

6 n4 q$ |! i" ]8 n$ k4 @    upp_interrupt_count  = 0;
$ \+ p- r5 e! U4 ^" J    upp_error_count = 0;" \7 d" p$ O! ^0 T

! }- S' z9 ]. V; r9 h    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ s  L+ B  q, k
    // Initialize data buffers
( a& A0 X, F9 H1 K    for (i = 0; i < upp_frame_size; i++)8 [+ s; f" W* t3 R+ u
    {
6 H# C: [' c/ P- q6 g       upp_buffer_b =i;
& w& F6 G) f/ D9 J       upp_buffer_a = 0xDEAD;0 N# d; g  k" |" t* s! q. M; o
    }
8 L7 u9 ^$ j! {  D
( J3 Y- M1 b' \3 R0 }9 A    //for(i=0;i<1024;i++)
0 N& @: w) I" k% }- W1 r    //    temp=0;' `. t  S; a# \/ X: X
0 m1 O& Q1 A! @
    //UPPReset();
. M0 J. t. n- ~# v- E    /*启动UPP DMA传输*/3 {+ s1 d% J, @3 [
    UARTPuts("upp_prog_dma_i\n",-2);
4 W* z$ j% h- l- V, @3 f" [    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. m& _8 B7 e: y8 q! V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 m$ P7 e2 w8 A" V  R    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 u. ]0 T! o% Q# N: h3 `- B
2 l# d  B4 i$ j/ o( A# ?    UARTPuts("upp_prog_dma_i\n",-2);) v/ `# p3 w2 v: D
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ x" K3 g& N9 z' D. Y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 F2 u& r( h( u  I  o5 k
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ ~2 D  f' Z: W+ |3 Z* V/ j3 Z! i# _; r4 c
    /*等待UPP传输完毕*/6 Z4 Z* K# b! S# z( m
    //i=0;: l$ o8 Q9 `6 K( u6 _8 e
    //j=0;$ R3 k( R4 ?& a, y6 {) O
    while (upp_interrupt_count < target_int_count && upp_error_count == 0): J8 X# ~: z7 x$ q! W0 ]2 @3 p
    {3 @  h" n! C6 v+ R, m, j3 K
        /*  测试UPP传输的同时操作普通DDR数据
. C0 P4 w0 v- [: r: m/ J        temp=i;
3 I! k4 X$ j+ q3 ^& B  v& c        i++;9 L! K3 ?1 e5 Y. U! B& z6 `* A
        if(i==1024)
5 i3 h, V8 }# Q) p        {' Y3 ?  _) ?# b' P5 b
            i=0;
9 e% c) o1 F1 x8 T            j++;1 Z8 e$ w+ I/ `; A% A+ I: w
        }
+ C: L" m3 _9 O- K& w2 Y9 {        */* q, x0 `1 d. w* `- ^

* k" n2 u, n$ a% ?2 {       asm(" nop");
7 [0 [6 k! D. q" w) e' b# Q" e0 x/ @1 Y4 y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 o( a5 ]- N( x, M  q$ ^    }
3 i- m9 Z+ h# j+ }4 V1 L
4 Y$ U0 S9 J3 W% s( \! B    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) \7 O" M, N  d; U8 ~    //UARTprintf( "i=%d\n",i);5 ]' a- T) [$ U# D) }8 N9 z( y
    //UARTprintf( "j=%d\n",j);( P) r, s0 r& P
    UARTPuts("Data mismatch in buffers.\n",-2);$ [7 N# t3 i9 w+ P& o+ C; x( B
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ b& d1 R/ V- Y1 Q" J    {0 C: T# X) y0 `7 D( d) U
        for (i = 0; i<upp_frame_size; i++)
7 |" Z4 t$ g4 X% l* l1 @        {! T+ ^9 F1 T) n% j& w1 B7 U* u
            if (upp_buffer_a != upp_buffer_b)
. H) T* f# Z1 C9 q0 T            {8 R& |  C" [, K% _, b& |
                upp_error_count++;* e& F8 C; V9 e  {' ]5 o5 F
            }
# b, K9 B# B, C) E3 e        }* A8 z, r/ k# H
    }! A& V# e' L. S- j

- V: }+ \8 N( n8 ]8 }5 z    /* 报告通信结果*/
' W- I8 {9 l( ~( f" c    if(upp_error_count != 0)
' H0 |: z. R" W# ]2 i        UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 o0 P9 [3 x' B; N    else" \. O/ g$ Z% @% o
        UARTPuts("uPP transfers complete!\n",-2);: O% z  \0 j# S" z; s6 y& I% t
# p/ T3 U6 T6 y8 I: ^
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* G$ p1 o* ^$ m7 F- ^    UARTGets(ch,2);6 l# v9 Y1 g: l, @6 Z- ?
    UARTPuts("\n", -2);+ _7 v5 ]' J$ H

: {% d+ o! f# E    if(ch[0] == 'y')  A" h/ V6 d; v. G( o0 u" o
    {
) X6 r- F% z0 r( t        /*打印全部读到的数据*/
( Y+ n( v/ b5 A$ l# }3 Y$ z        for(i=0; i<upp_frame_size; )
; z/ T+ F# U* [' P. Q2 U        {5 F3 P' F7 P9 Q+ p0 Y
            for(j=0; j<5; j++)
: W* |! d, c& a+ D) s            {
6 n5 {; X7 X, c: }# n+ X                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 y2 `' f  }# q8 n( d0 ~& Y) Q                i++;1 p: {$ X% \/ C8 c  l& `7 R0 j. ~
                //if(i >= 4096)4 W! ^7 p! O9 B5 p/ P
                //    break;
: |) c7 q3 b; P* @( Q! K
/ l& ?, a- _$ g( u7 x            }; ?# d6 ?! K% o" A
            UARTPuts("\n",-2);' r5 G! t" A; v- t/ k7 V$ @! h' @
        }
7 c( m$ Q3 y0 y* J, y5 p! i3 j    }
) Z; c  w. E! r" E: ^4 P
8 P  V& H+ d4 n+ q( }% s% m}
+ d. E, ]6 T/ F) P' g7 |5 B* K
' R  s% L5 ]. z( A6 x7 n

2 ^, l# q$ j3 P) @8 U
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* @8 C8 z% `$ t" t$ [7 n
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- o$ r* x7 R7 t





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