嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  l9 G5 W) k' W6 K+ J1 ]. L
Void UPP_TASK(Void)3 u( }2 c& ]1 [. G# e& Z
{4 W9 n( \% \& A6 k6 Q
) d2 I0 A( t7 q
    int i,j,k,target_int_count=2;; M. I, ]9 y6 Z
    char ch[2];  V3 ~% B& v+ b

8 v6 q) H* v3 f2 Q/ g; N! P$ `& G& p+ H; b! l7 `& w! U
, `9 k1 C) l0 Z% x" p
    upp_interrupt_count  = 0;
+ a6 _+ i0 s% r$ j) g( }  K    upp_error_count = 0;
5 L' v9 M: t+ P; u
: b4 X) n* s& ]: q    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  r( J/ F2 ?! A! b- a0 r2 S    // Initialize data buffers- ~7 `& K6 r0 h% `, W) h
    for (i = 0; i < upp_frame_size; i++)) K/ p1 e+ D1 M% m. i/ A5 ]
    {
1 e! z) I. B9 T6 s2 H* M7 f       upp_buffer_b =i;
+ [; ]$ p# h3 V& Y/ J       upp_buffer_a = 0xDEAD;
1 c% |( b- q# C+ x0 f% k    }) H8 o7 v6 `% P/ Y3 m3 j

# j3 ]6 F; N% R    //for(i=0;i<1024;i++)
3 y6 z' T+ ~& z( \% j    //    temp=0;
; d4 I$ P* W  K) Y; f' H2 n' H9 M& {& {7 i- i" d" ^
    //UPPReset();
1 k) o& W8 o, s( U    /*启动UPP DMA传输*/& l& Y& Z9 V& \; m
    UARTPuts("upp_prog_dma_i\n",-2);. e7 \, Q, X! H$ \
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  z* r  K+ a7 m3 r3 d
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ g2 G4 q( n8 \2 \4 h- C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, N) T- X) U/ B6 K3 v
6 f" s( [1 b6 b$ @8 L
    UARTPuts("upp_prog_dma_i\n",-2);
5 u2 f, r! m' {8 y# o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 Z& w& ?; c) K) j( O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 o7 M" U4 s4 ?: R    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 g+ S& t' H% E+ \! C2 H/ B" d% u2 F2 L; g  g& y" i' j
    /*等待UPP传输完毕*/% \; B5 k* @6 c5 f
    //i=0;
0 O3 v5 E1 L3 q" W    //j=0;) G/ E4 N7 t; \2 f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0), Z! H4 W! e0 G  e
    {
8 o  ]  `+ j6 Q! t+ g        /*  测试UPP传输的同时操作普通DDR数据- A; a8 O3 j  C$ q% G! z
        temp=i;# f! g( j7 ^1 Q
        i++;
) w  L5 z" J8 C1 o3 ]: g        if(i==1024): k4 l$ ?: c) s9 c/ o
        {
( \2 M9 Q3 p  m+ X            i=0;
# v7 }5 p; _6 u$ t$ \            j++;, ]6 q- J3 ~2 z4 Q
        }8 ?  Z7 u& p' @/ r8 m
        */
( \# P# @, u, S2 {* k+ Q8 \7 u( C4 r" {5 t" `
       asm(" nop");% e. o+ o/ \  C

6 l% N2 B0 J" P  E! q3 @  |7 [! ?       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 y$ D1 |/ O$ w- }" Y& Y    }4 B6 n. C7 i' b% B* N
6 H' c+ a9 `8 d" f/ L- u
    /*检查UPP传输的数据是否正确 (loopback modes only)*/! H& k/ p) i) ~/ C4 R
    //UARTprintf( "i=%d\n",i);
4 I& G; ~+ m' ~& \    //UARTprintf( "j=%d\n",j);
/ W. l" {. l: i1 r    UARTPuts("Data mismatch in buffers.\n",-2);+ A) Q7 _" a5 X$ Y
    if (upp_interrupt_count == 2 && upp_error_count == 0)- ^& H2 H% _' }2 a2 C
    {
1 p* A. h% X' o/ D2 f        for (i = 0; i<upp_frame_size; i++)
8 {2 j$ c' A8 k& F        {. w" n; i7 k2 _- h9 H2 p6 G  d
            if (upp_buffer_a != upp_buffer_b)
1 `' M& [* w# i$ y            {
% K5 F2 j+ ~  `                upp_error_count++;6 q' \( m; [$ e3 u% k
            }
5 o& M) G& C( O* O( c        }) B% ]) ]0 x% K! G# X
    }' g; ~  _, L6 `% E7 o$ M

. f: ~" ~! q/ ^& m    /* 报告通信结果*/
" |) d1 W% }: R, j* H    if(upp_error_count != 0)
5 j1 I$ M6 m7 d. o! X        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ w, C4 `5 r0 f: C3 i
    else& m$ R! e) X3 M: v8 ?2 t7 G  ]
        UARTPuts("uPP transfers complete!\n",-2);
8 C5 K! Y6 R0 _& h9 ~
* t& I  l# G" f. I! y: B' M    UARTPuts("Do you want to print all the data?(y/n)   ",-2);" U3 ~0 I- C( q* a3 y
    UARTGets(ch,2);) M2 _% R. t7 }; t3 `% J
    UARTPuts("\n", -2);
, u1 {1 Z; E; z5 }6 U: i
1 Z7 k  D' [# k8 P- t4 f$ w7 Z    if(ch[0] == 'y')# Q2 S' U3 O7 s
    {
& k6 S, Y3 D: j) k6 r        /*打印全部读到的数据*/
& d3 I# @, M  S1 V1 a3 T        for(i=0; i<upp_frame_size; ); @; X" _' U* g' T1 X  [# R, e
        {2 x, n3 ]! N4 z; U2 Z% X9 K
            for(j=0; j<5; j++)7 [* i* @% `( B- a( H
            {
3 P/ l# g% J: R                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
0 m/ M+ C6 ]1 a: ]! T. m! [                i++;5 f* I" o- c* C
                //if(i >= 4096)
8 o& \/ W1 @: W                //    break;: G: ?5 V7 N& b  T$ f6 b1 h# Q  A1 \

+ [! K9 z' ]  \            }1 L, H9 z. `% W& E6 b
            UARTPuts("\n",-2);
( y: T7 k$ ?1 N        }
2 c- t0 _+ B; Y) Y    }5 s" e- P  l8 \

' m" L) H9 R( v% B. |}

/ m! Z3 K, @* [# E- {- |
* f2 J. t7 Y8 o: w. R. l7 A( y
& x: u/ M( z! L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% j. b# u5 L1 M0 a4 ]6 i

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 \. ~, y0 `- \, D& K' n





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