嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( R* M$ r/ u4 k+ N) y! K
Void UPP_TASK(Void)
1 G1 R; T- f( f. ]" o{
5 ?+ F5 M; \1 w& k1 b* w1 @: T/ c8 d0 C- o+ o9 o7 w5 p( s  K8 B, W# `% i
    int i,j,k,target_int_count=2;
/ M) f( K: e: m    char ch[2];  T. Z4 s5 h: z5 O5 F

: p: E7 O% k9 ]) m+ e' K* _$ `; n

+ U7 z7 ^- X7 R    upp_interrupt_count  = 0;
- X# J- I5 h  ?% P. P    upp_error_count = 0;4 b* I/ J6 L: H' D$ m
; h- V+ F- L! ]2 |
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. s% a* r; T. q; I- L  b
    // Initialize data buffers, P/ e, \! n8 h# n9 `% w
    for (i = 0; i < upp_frame_size; i++)" A7 d( j( Q1 U0 a
    {
/ X: e. Q: U0 _- Y; c. O       upp_buffer_b =i;! l/ m% j+ h9 f, W: c
       upp_buffer_a = 0xDEAD;
4 ~6 X: V( s, Y' n# ?1 w9 E    }# {2 L1 c/ `$ w1 q$ V& K& ~$ x6 o
* B5 O" K9 R0 f1 H$ b
    //for(i=0;i<1024;i++)
1 i+ {4 l* `8 ^3 L3 G$ P4 p    //    temp=0;+ E( X2 M2 H! O1 o; d4 R

# k6 S" Z) [9 M7 [$ [: j- ?5 b    //UPPReset();
# ~3 \" F7 u' T3 A    /*启动UPP DMA传输*/% y1 q# \" Q# Z' P
    UARTPuts("upp_prog_dma_i\n",-2);2 f; \* {) S4 [# G$ O7 y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( l( V9 Q2 b" p, g, O4 D1 g    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 M1 l  J$ a% b    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& w6 u) f5 ^( L" t7 k* a- _6 U1 H# @- L! V  d) M
    UARTPuts("upp_prog_dma_i\n",-2);3 D% X8 p8 @1 v
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! S0 P0 s) a3 H1 E
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 Z! C' d& S4 _4 j    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  u1 j6 V# ^5 P# J' c- K
) D5 i; M- a: [& T3 W' }    /*等待UPP传输完毕*/
5 S: V( r9 Z3 {7 Y4 Q% P4 q8 i    //i=0;2 l4 @9 v4 v( G* ^4 a( t. H
    //j=0;
' q! ~2 W7 }+ d8 h. W! H$ D* B6 W    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 R& g8 Z6 v2 `  l    {( F% h1 P# S% Y: W) m, r
        /*  测试UPP传输的同时操作普通DDR数据
5 K% o, h/ S6 A        temp=i;9 n) M, e6 W; C0 y7 V
        i++;8 h  A4 r# ?3 n$ \' z
        if(i==1024)  a2 ~$ Y6 u( {; B/ @9 f) X
        {0 ?- {) R! o3 i) ~' A
            i=0;1 H( ?) }6 u8 g, V
            j++;
' c& K" U& Z0 O0 b$ R        }) s1 B& r/ b% {" ^8 o
        */# p; a& E7 Z" f7 U0 u: z5 |

# P" ^$ m, y5 Z( C2 y& G       asm(" nop");
0 G% _: _/ ?1 F0 f; z, ^0 }2 D1 ]; l' B1 K" k
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ O. w# F2 f4 P7 R* @- Y+ @
    }
) S& b2 M! N& ?4 b* I/ E
. b  I2 k" P; [! r$ M' w1 X, z( N    /*检查UPP传输的数据是否正确 (loopback modes only)*/. s' M- z' v1 Z8 J
    //UARTprintf( "i=%d\n",i);
. ]  m& ?4 ~* U5 j' h& t# g; g    //UARTprintf( "j=%d\n",j);
) u6 m! A$ q& S# t    UARTPuts("Data mismatch in buffers.\n",-2);
0 n2 ~7 f) Z( l% K# g9 e    if (upp_interrupt_count == 2 && upp_error_count == 0)
# @+ d; Y+ d  r1 y    {
+ u# S! y+ R) D        for (i = 0; i<upp_frame_size; i++)
0 r0 T3 D/ n1 |        {8 P9 m9 O' _0 A4 t: l0 K" I
            if (upp_buffer_a != upp_buffer_b)
5 `) ^& G, M8 I            {
! V4 X4 C3 R0 x8 v. Q9 G$ G2 ?                upp_error_count++;
7 e5 L% _9 M6 S1 o2 V            }4 B& ^  }$ m. E& t; e8 O' z" N5 t
        }' f1 ^, g3 [  ]# G+ u# m& U' H
    }; m6 c6 V" i: h: w/ G, T1 h" @' }

+ B! e& u* H( L5 |# X7 N4 Q5 T    /* 报告通信结果*/
. J) `- B: B" H5 q- t# y2 `    if(upp_error_count != 0)
- o7 ?0 {% `% L        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 U) Q$ {+ ?3 z8 f( R/ t, u( x* ]8 K
    else
' m$ S% D' V+ l8 b        UARTPuts("uPP transfers complete!\n",-2);
' ]2 j) a, j* `* q+ q9 D1 ^$ H
2 L5 I1 W. N& `1 ?8 [" F* |    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# v" X% y* j* y4 \    UARTGets(ch,2);
  x: w/ M# r& _- V1 s. N    UARTPuts("\n", -2);
6 I" q# ~  N4 Z2 M. I5 I! B+ C$ |
/ g$ \1 h( b. X/ O7 Z    if(ch[0] == 'y')9 p; ~  d" K0 t
    {5 |& ~6 O) N0 |9 l8 ^) x: ]$ j8 b
        /*打印全部读到的数据*/' p* ]) C2 d2 U# v( Z
        for(i=0; i<upp_frame_size; )- Q) A) j2 W3 J, c" j
        {
. W. K- ~( R# G            for(j=0; j<5; j++)
; `* W% U  d2 ?            {
; ~' C4 {6 e  K                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 X. H0 b9 a5 e- \! N. T/ K                i++;1 [. o, [. {( a7 b% T, G0 D* o
                //if(i >= 4096)6 s/ w% s4 i$ y* `, M. p
                //    break;$ K+ X0 A% J# i9 a
) J$ \9 T: c( R% z- S! _
            }
6 o$ _1 D& _: `( h            UARTPuts("\n",-2);& ~! l  ^/ z( [4 S
        }
2 P& M- C6 l, C9 V! [    }. L: Y" Y1 l" `7 z) B* ~# O) r

* N5 n( N1 Q  G3 c}
/ G; b: @- A! @2 D( }8 [7 C

8 o( D4 X+ o0 x* N  c0 c# ?) M2 o- w2 b' y  v/ b

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 F, N. \  D+ I" H
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& c* |- D1 t" I( l1 z# I) I! a




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