嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 Y8 I6 k* ?; @* |9 T0 U6 s* b
Void UPP_TASK(Void)) ~" ~+ u3 u4 s( F. H. ]- k
{1 A% l- {. r4 H, g0 Q4 |
1 w* I! }5 d* N$ c8 p% a
    int i,j,k,target_int_count=2;& J# a- s9 I0 h
    char ch[2];
* N; X7 x0 {# I5 G$ Y  C
3 i4 ?" n! Y* h4 P+ v  Q  A; R+ Z. P+ N) ?. s2 ~0 X: W
: i2 y; L! ~7 r6 I: e
    upp_interrupt_count  = 0;
/ F* {0 I3 k; J( ^: n- k, m    upp_error_count = 0;
; _8 k/ K! A& ~9 |$ j8 F7 e5 g) _  t( D
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- L4 w0 ^+ G$ ?7 d    // Initialize data buffers8 p: b, T. F+ W1 q
    for (i = 0; i < upp_frame_size; i++)" t% C# ~( C# f
    {$ x  Y* j. T3 ~7 M/ ]6 ~# y6 [
       upp_buffer_b =i;
+ A) R5 F9 a' x& q3 n" }; y       upp_buffer_a = 0xDEAD;! P- V8 y. p, c' }5 X' m1 R. [
    }
0 Y$ u, T8 j. H7 S. N0 h" i2 D9 Q
5 Q( e  t) G6 H    //for(i=0;i<1024;i++)9 W0 Q- |' H" ?0 {; |
    //    temp=0;, ~+ q4 \/ E+ q  Q$ H
7 s/ ^9 B7 D, k; U
    //UPPReset();
2 f1 y5 _$ D- _( \0 `    /*启动UPP DMA传输*/
) Z$ H' _+ v$ |& L: L) c2 L/ l# n    UARTPuts("upp_prog_dma_i\n",-2);5 f- z0 ^0 y( V& h' @
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 y/ k: j$ H- @& b
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  l5 d  J; V" N# C( e6 c
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 b1 e1 h7 b7 V' E* v! t$ r) ]6 E! e) M0 p7 x4 i0 \# W2 g1 `
    UARTPuts("upp_prog_dma_i\n",-2);
3 S/ ~: [$ G  W% ^    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; ?8 d4 T: b8 t% _9 E* x
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" p& ^! U- w- ], S$ P" H# \7 `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 p0 S! N  h' G5 ]- w; d2 R

! i4 o+ ]1 ~% @9 t: C    /*等待UPP传输完毕*/
; K& v- |5 M7 z) o  i    //i=0;3 J2 h! U% `( R
    //j=0;
1 p6 ^5 z3 t9 `, v0 B) a& y- F    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* ^- h4 c: A& L
    {
2 l% q8 V1 a$ L1 J; @" O) A        /*  测试UPP传输的同时操作普通DDR数据
- N. s0 Y  Y3 p+ z" I8 M% m        temp=i;
! o8 f: C- b! I+ Q8 \9 R        i++;
2 _3 {1 e: i: m- Y" `! u        if(i==1024). D6 d# E$ @6 s2 Q/ C
        {2 N3 P  Q7 \' O! ^( S4 b! G
            i=0;. v) A# N3 L0 ?
            j++;( z8 B6 P+ n* e7 Y+ z3 G
        }2 S4 B  ?6 Q2 C$ |% i5 z+ M
        */
# p# b  u" n- f; E8 w$ _9 Z
( D4 m$ I! `  y, {) l% D- J       asm(" nop");
( A: g" {4 v* D% V! `5 Y9 g; ?2 B$ I7 P/ ^: c5 b
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" b0 v6 t6 G# P3 B: A2 `    }8 _$ q, v6 T9 X8 Y3 M
0 U% t1 k, |1 C- T1 r" x4 K
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 r4 h1 m! B( _7 @    //UARTprintf( "i=%d\n",i);
7 C4 I; Q" U- |" t  z    //UARTprintf( "j=%d\n",j);: D7 y) m! T- ?$ c8 E9 O% I* Y
    UARTPuts("Data mismatch in buffers.\n",-2);- r0 Q0 W5 O' N# [8 F1 O
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ t1 c9 j* p, [6 ~9 z  C6 W" q
    {
; `% F! X1 h+ m' Q, j        for (i = 0; i<upp_frame_size; i++)
- ^; u, O7 P# u& `/ W9 H* U+ z        {
+ c7 G5 ~; \: O" n0 t            if (upp_buffer_a != upp_buffer_b): Z9 N1 l2 |6 \+ b* ~
            {; C" \9 `. `$ t# m' p) d# j
                upp_error_count++;4 r. T% S  O( U' }! |( X7 w
            }
& {3 {: D$ j6 ~( K: l        }
, b4 `' j4 n9 c, M    }
5 d8 B9 ~& D+ h# c6 s+ ~- U& `# _
4 l, ~$ p8 {( J4 i    /* 报告通信结果*/
0 p) i. V6 e$ j2 ~+ e! v    if(upp_error_count != 0)
9 j  o; G. N: e0 W# g9 ^) E        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 M% X2 K! z- T# V# B
    else/ h# P/ N, l1 w; h. a: Y; e
        UARTPuts("uPP transfers complete!\n",-2);5 d% g) |" @9 F3 k# K
7 [' m  S9 r2 [6 Z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
4 e# `2 i  _( d2 Q4 Y+ \    UARTGets(ch,2);
; u7 U0 Y$ K9 c3 Q; T    UARTPuts("\n", -2);# W' T" r" I1 O2 H; `- Z8 Y! I; l

8 X' @/ G' `- S6 y6 y    if(ch[0] == 'y')  Z# ]. r$ W* p/ }
    {# k/ U& u) Z) d5 B
        /*打印全部读到的数据*// ~, N. e/ t3 S$ R) E* T* P
        for(i=0; i<upp_frame_size; )4 V+ P  l1 O2 `  P6 [& t& e3 z
        {
6 u1 k5 }) B( j' ?% g            for(j=0; j<5; j++)' ]3 ~, e: D% O* [- n
            {
: a6 ]  A& y& u3 `4 D; M9 e& {                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; c( r# W- d  Y1 B6 _                i++;
3 M8 @9 |1 ^8 T& M                //if(i >= 4096)
9 w/ Q" E4 V& S! _. S. v                //    break;
8 p# |# a1 G# O# l+ h1 N
% k3 d# m% S9 ~/ T: c7 x3 l' n# C2 D            }$ Q. X4 w2 ?- B# u, I0 U1 p, _
            UARTPuts("\n",-2);- K! |+ W" d! _- Z3 t5 t
        }
" k/ ?4 M1 J* d3 E  l" R1 n    }
# d$ e5 [& w1 m1 H- t& ]3 v3 y8 R0 b. P9 A) L+ _$ j
}
' Z$ G4 ]5 |7 s% m

. _4 G% R) N2 u7 k
6 u' v- O# g; Z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 M! G& |. u/ e" k4 v

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ ~- r4 E, x/ }. a' L4 W




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