嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; o7 P$ {3 j3 I/ {6 n
Void UPP_TASK(Void)1 w! u& h( N1 }
{
- s- Q, S2 X* j# a5 k: l  F, w3 s: Y  J) J. R7 P
    int i,j,k,target_int_count=2;/ j1 f# a3 D' r. u1 E1 ~8 v
    char ch[2];7 r/ A6 n8 J5 D2 d- Q0 R
! x+ k; m, n% M" g. Y2 p; L  M

: `! {1 ]; Y" T- ]/ |1 r2 ~
3 u+ I% n5 f* ]& Z7 l    upp_interrupt_count  = 0;
3 m, \9 \' i, J, v( [% q) I. H7 h/ K    upp_error_count = 0;% k" B* ?( z; b& `7 w

9 }4 v  a! f* A2 ^9 s    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ _% s4 M8 u- y, i! \& R0 P% K* X    // Initialize data buffers
; k9 c7 o& ]  j2 \; u# b' e8 I1 H" W3 O2 w    for (i = 0; i < upp_frame_size; i++)
3 l4 y  c- J6 }. h    {
3 P, F' p2 L1 w8 R& K       upp_buffer_b =i;$ M% y' D, p( T
       upp_buffer_a = 0xDEAD;
: F. K+ U6 c8 I4 W, a    }+ @+ ^% c6 G- E) H! A. v9 E

, j- L4 a: [( @5 O. K    //for(i=0;i<1024;i++)9 D3 u; U2 a/ J
    //    temp=0;
: c' y+ Q- F5 _/ k- ?" o( P. ]4 U6 w$ G( f( K( {7 y
    //UPPReset();
2 ^4 l# d) H/ K, `6 O    /*启动UPP DMA传输*/" O+ n8 b' H8 F( s( ~9 j# I% @+ P* N* W
    UARTPuts("upp_prog_dma_i\n",-2);/ K' R6 Y7 @, b
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 X) T( T  a8 ?8 e% D
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' r3 ^% |& J( B, b    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 q' U+ L3 r" @# w* Q" m5 e
9 r6 Q6 E! }2 r. D    UARTPuts("upp_prog_dma_i\n",-2);
: M8 k/ T3 Y) k& P2 V    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( ?) f$ d0 f8 T0 g2 _8 W, \, L    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 y6 ?/ }- T- [) S9 _& u. r# O    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, J5 J0 g0 ~6 e* E( s

  K, W& `+ D" _" U) B    /*等待UPP传输完毕*/6 a1 o5 P: }( l9 V" o
    //i=0;) r( A% {2 s9 \( n8 E
    //j=0;
) i% [" P9 @6 l    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 U% N: o/ }3 P* E+ T% w% _
    {
( d- X5 [1 I- G        /*  测试UPP传输的同时操作普通DDR数据  ^* Z, y+ v( t/ e
        temp=i;
' {' X8 e& d" u2 h% _/ i! o: B        i++;1 W/ m9 v  Y/ v1 i
        if(i==1024)
0 c( @' B. @) P5 q) {        {
7 @6 E- T# g! C7 J; `) S            i=0;
+ D" @+ {$ |! Y' l6 d            j++;- x, f) u2 c0 S$ r
        }
$ ~1 j& m' f; a7 g* N9 B! E        */
% ]1 Z& q5 [9 v; x2 O, l( W. |) [  D" c6 D% H: ?3 b6 d4 {5 t
       asm(" nop");9 }4 P  ^3 o. D+ u+ ^9 U. M
1 x( R; W1 c+ U& d# Q# V: C
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 ^* N" c* v' z* Q    }+ O; L$ ?4 O( N, y! p

5 s% @% B" J  \1 F  _    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; ]6 D/ `( D7 M  ]    //UARTprintf( "i=%d\n",i);$ e* l1 d: [7 t1 f: ?4 i$ g( o
    //UARTprintf( "j=%d\n",j);
' n& ?; ~8 @3 \! X4 j1 \    UARTPuts("Data mismatch in buffers.\n",-2);
3 D' t- P7 o2 J    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 B! y9 q( H% f3 T4 M8 w( z    {
0 Q. y9 M0 {- p, |        for (i = 0; i<upp_frame_size; i++)
; ]# O, m: M* i/ X        {
/ C" J: \% I7 F9 @            if (upp_buffer_a != upp_buffer_b)1 D# J) R9 @( l: s" _
            {
0 z! b! e, g7 D8 W! O                upp_error_count++;+ F# ]+ N: M- D+ w
            }: Z* H: {, _) [0 r
        }- D% E5 i4 ?6 C. ?( `- M( n
    }: ]# L4 d3 R$ e% l5 L/ y6 _
: A* _( {6 N- i! K; s0 M" C8 S
    /* 报告通信结果*/
& v! D/ M7 i/ Y    if(upp_error_count != 0)
& G) Z0 T0 h: c3 T& ~, m        UARTprintf( "upp_error_count=%d\n",upp_error_count);# \' U% _7 B1 R8 `
    else' L0 g8 S4 Q$ H  |
        UARTPuts("uPP transfers complete!\n",-2);' |) Y# d2 Q/ R1 l3 [6 y
+ e* Z) _4 ?4 B/ [- s
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' H- O, f9 D6 d2 c& P, K# G
    UARTGets(ch,2);
) Q5 D, O* J# k8 a' D7 g    UARTPuts("\n", -2);
# r. A0 W4 Z9 E6 d+ O5 V
8 D6 C% @/ E$ V8 B( A: l    if(ch[0] == 'y')1 E8 C1 ^0 T' l8 Z) H& K1 \
    {- q, N! t7 X. M6 V8 G
        /*打印全部读到的数据*/! A8 P# r+ J$ B6 j% o7 h1 `
        for(i=0; i<upp_frame_size; )6 x, Y; }: V; z# z2 C
        {
, y, e8 Q. p$ {, v. S7 j            for(j=0; j<5; j++)
8 Y0 P4 c" }+ C8 |( I            {' I1 i% a. h7 T- v: {6 |. X
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* m) A! ~; s- Y* L, y                i++;
8 ], E$ J9 U5 Z" z3 I9 [; B& @                //if(i >= 4096)
8 c( t$ q% ^* z4 L# a6 z                //    break;
) ^. D) X$ b. W2 A9 B4 s4 y; b3 s; g. Y
            }9 l3 [6 l$ {. l) b; O
            UARTPuts("\n",-2);! ^% F5 J% I2 a1 M' |/ j4 B& s
        }( n5 T  p( r2 u0 ~- \
    }; i' ?1 x9 U' M
6 z/ ^  l: P3 }: r) x
}

/ j: c  @& H& p7 s8 Y
! X% G$ r$ T4 ~! p1 l

, @$ q3 }; X. u$ z& E7 @* X! ~2 m
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ V) b5 J; T( X4 r  B  ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) G; {( z  F" Z$ ?7 s, t" }$ y




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