嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) l5 P& k" E3 A% n+ W' O
Void UPP_TASK(Void)
4 ?. }: F: p% Z# n0 b{' K1 M. ?( r( c2 `: r
9 X0 h8 {; P. r+ M
    int i,j,k,target_int_count=2;
! n2 {- |* v' J    char ch[2];" f; {: }7 b' ~* r4 t" K+ A1 K

, A% T2 |+ Q! p, a+ C4 Q/ S* V- q2 \8 m3 M

# H$ @) Y% v- i. z& K9 p$ Z/ w7 C    upp_interrupt_count  = 0;
6 _- ^- ]7 b$ f    upp_error_count = 0;
, [* t9 T1 E% T* t5 G  V6 f  k7 z6 N3 b: n% g- C
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 [/ C. y/ K& p6 b  G- O    // Initialize data buffers0 M, ^* }8 q! Z0 j
    for (i = 0; i < upp_frame_size; i++)
% a& Z& M. T& z5 N    {; Y/ K4 E& Y% a  j( A8 j8 I, w
       upp_buffer_b =i;
3 M7 y1 ^0 @8 b4 H9 J) O       upp_buffer_a = 0xDEAD;
. z9 }% M$ F- [! X$ F    }
- C5 `/ [1 K# u
+ p# F: s. U8 m5 O    //for(i=0;i<1024;i++)
- @: m4 F& A& F% S3 P6 [9 g8 ~- J    //    temp=0;1 s  |& A- {2 q8 F) f# }" O& W

/ M- ?! h& x" R, w/ M) e. Y    //UPPReset();
, ^0 c% e9 M- N# ?" [+ O: u    /*启动UPP DMA传输*/
0 c$ U4 k9 _5 Y/ L- I+ D    UARTPuts("upp_prog_dma_i\n",-2);1 F% @' o4 B3 ~0 Z, B# p
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 h/ [" ?' N: o8 R: [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 u6 B) L, k8 n5 {0 G- _; C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* F6 {) h4 [* P
0 V  k* ]& v- d! [" n& _    UARTPuts("upp_prog_dma_i\n",-2);
1 b7 o* b6 U# p- n$ m2 B, M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) t  @) T" ^+ V( P* a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 o: t) e9 ]" H) v! `1 ^; w5 @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 t' ?# P- ]  r& U0 m+ S
- a# ~/ _8 A1 ]: a" w4 A    /*等待UPP传输完毕*// x# p) Z+ ^! S  M$ D
    //i=0;
/ H/ p8 N+ }, J1 R- ~4 I    //j=0;
0 E4 f' v: J6 j+ z6 |/ M8 `    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' b3 A& l2 C% p
    {
# y4 k9 G& j: h6 i4 ~2 V        /*  测试UPP传输的同时操作普通DDR数据
5 r* u1 k# m1 K/ O3 L" c* ?8 ~2 Q        temp=i;( b& s* \1 n( S7 `6 W* }  C
        i++;/ y) ^0 D# I9 p* @- u
        if(i==1024)/ y2 R$ W! }" u6 v' q2 z- L, T
        {
. F) W5 {& m1 R            i=0;( w: P2 c/ A* D" O: i/ W( B  \$ b
            j++;$ C( D; D" l) R3 |
        }
' x4 C. g& a, h5 O7 e        */
3 y% |: C& {' Z# N' m. ?4 r6 `, f, r  C; f8 [
       asm(" nop");* A! f) p( _) o9 P8 L  M7 |; q
! N) R4 `8 H( e7 X/ o
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 V" J! i  m! E7 P& ^" E    }' M5 U& H5 y: N' Q& L0 S

( p+ @2 Q& T& I3 K. x    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ t* |8 @6 n' y: ^( Z# ~2 N$ j3 @    //UARTprintf( "i=%d\n",i);2 }: z; ]7 [$ f7 q1 e( G4 U) k
    //UARTprintf( "j=%d\n",j);( {7 ~, V2 t3 R; T3 t: P
    UARTPuts("Data mismatch in buffers.\n",-2);
; A8 d' e7 L7 e2 v# @    if (upp_interrupt_count == 2 && upp_error_count == 0)
" T% i# n  u8 }) u# y0 }9 m! m( z    {: D1 U5 _1 @1 }8 A+ a
        for (i = 0; i<upp_frame_size; i++)
4 [$ d/ Q5 a: G9 @% Y6 m. @        {
( ^; F- o9 ^6 d) q            if (upp_buffer_a != upp_buffer_b)% C% x/ B6 q, C1 a0 o
            {
! g7 w$ @" [/ o1 G6 {- v5 t                upp_error_count++;
7 b$ H# x5 U+ K+ @. {+ M            }
* g' S9 b( J5 g  y        }. K0 @8 `. g- q3 k
    }
, s- n$ E% G' x' E5 v5 `
5 Z. c! G2 f# i3 W$ h1 R9 Q    /* 报告通信结果*/5 i/ {5 l  g+ d' P- A3 k, u! X
    if(upp_error_count != 0)5 K' d' `7 V$ |; u, g3 Y" |
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( C8 Z- _4 j/ c
    else" v: f# B* K% J6 ?: X0 I
        UARTPuts("uPP transfers complete!\n",-2);% g, y/ G9 i" [2 T

' e/ {7 \. M; L. Q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 q6 l* N8 f% e- G. e    UARTGets(ch,2);+ p9 V1 E) l  k5 \. Q
    UARTPuts("\n", -2);+ x0 R% }! {# G

( I) s, |: }; j1 g1 D    if(ch[0] == 'y')
* v' [" S  B. _, [! c    {, d! @. ?2 Y$ e# o2 g
        /*打印全部读到的数据*/$ G2 Y7 U1 R# D0 ]- h/ ~$ s
        for(i=0; i<upp_frame_size; )7 ~' g: C2 s7 d6 c" U( _
        {& s7 i% q) R$ q% @$ r
            for(j=0; j<5; j++)8 z' L& I: V, Q- a: _& A  K
            {/ d% G1 }( q% W7 L4 y/ K
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 |# W! Z, p6 O2 G& h8 o
                i++;
" W8 C- ^/ Y  S( v: A8 X0 @* ~                //if(i >= 4096)3 J# l) O3 d9 q* ^' J
                //    break;( [# ~/ `3 @3 k3 g7 B) S3 F. ^, {
( z' }) l6 N& g- m, m2 k. e
            }
3 p$ q1 C. S$ D, T$ k9 X* Z5 `            UARTPuts("\n",-2);5 y- o. i  C; K9 s2 V0 n8 O
        }- Z- P$ F. q8 E0 w( i/ j- o
    }3 L3 S2 p* k/ U( |9 L0 x- H7 c4 _+ |

; i9 l: e" p3 B' R2 j}

5 _5 ^/ N' o/ j2 p
- C( G) `7 n* h

* A5 L7 C! ~, q, l5 n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" q+ E( b  J# R

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  S# F* D) L. i$ q; @) M( U; i




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