嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& }, s" c- f7 g* m5 B
Void UPP_TASK(Void)
- h" A! \2 m4 o0 }! x! Y' A{
( Q: y' i; u: S- `% f+ U! l# E4 g
    int i,j,k,target_int_count=2;) ^$ u+ S7 a  R, _
    char ch[2];6 z# V' e: ]0 v9 m
" A3 V4 g# O5 Q  f% C( W* m$ C
7 [' I' `( M4 }  `0 p

8 S. Q) A1 A9 n; M: d    upp_interrupt_count  = 0;
$ I1 A& ~2 P% v9 ^$ t1 u: F    upp_error_count = 0;/ m) ]: K' @4 h9 S" S; _. i; d

: Q+ @8 J, f8 Z0 _* d$ d    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 d/ G* z9 M8 v5 O$ {1 A    // Initialize data buffers
0 a4 ]8 W/ [# w& h' @    for (i = 0; i < upp_frame_size; i++)
) X. c  n9 |' b. ~    {" O% t, q# b% G
       upp_buffer_b =i;+ g0 Q) s7 Z0 b& K& g, y( ^, F
       upp_buffer_a = 0xDEAD;8 v, S* ?+ `1 N) l' |
    }" u; r5 Y$ M. A' s9 H8 y1 [

& Q0 ^9 F: q" O. a    //for(i=0;i<1024;i++); v2 s) q8 v; L# u5 X: X' c
    //    temp=0;( _+ s8 \5 |, }5 h# h

* h/ W6 [" R& S) M4 j    //UPPReset();
2 j. l, Q3 D+ B/ Y  S    /*启动UPP DMA传输*/( g: }" R0 [2 @8 E2 ?) @
    UARTPuts("upp_prog_dma_i\n",-2);
2 M! e: g6 x: P3 Q/ m) Z    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& g7 D3 o0 o6 \5 X& x! k
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ G" J1 l+ j' @" \    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; x) k1 U2 I( ~
( W2 c# X% a0 S  H    UARTPuts("upp_prog_dma_i\n",-2);8 W1 b7 x* H; ]! `5 K" P
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# V. v; R4 f& _5 D5 B+ O; ~    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% v' s$ G/ Q8 l7 {* f$ f; f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 b0 O& A$ Y6 M' A$ L- {8 V- S" q7 B+ G
    /*等待UPP传输完毕*/
5 b, K5 L% D7 a& A    //i=0;
4 A. }) r6 B% a6 A0 \    //j=0;
' }" G% `0 k* ~    while (upp_interrupt_count < target_int_count && upp_error_count == 0). ?, k2 x9 @/ j, j# C
    {
* }# I/ ]: i1 h1 C4 v, S        /*  测试UPP传输的同时操作普通DDR数据
% w" z% G9 |( I9 t/ {        temp=i;
+ m  s& r% f, n. k9 I        i++;
# o& A+ K3 m1 [6 n( @" h        if(i==1024), K: j( @; ^4 Q/ j
        {
  y' T0 N/ C  I& h1 m            i=0;
: r4 a: T* i7 v& c- G2 H$ I, n, S            j++;
) f3 a6 {+ w4 e% C& B3 d' P        }
3 `: R8 e" L$ C9 l: Z  F        */
1 o6 S, r; T: C! i0 P: W
, t, N" s% M7 C# N  {+ e       asm(" nop");" l/ h- q/ `% j. W* n9 ?' K

5 T: Q# a# Z, a3 S       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, y' k. Y: c# i1 l    }
( O2 O. D9 t5 ?  t. m! z+ d
+ [* w& T1 [7 G  d! i. v0 P    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. C% _7 f/ w# O2 H4 B    //UARTprintf( "i=%d\n",i);6 g- u: _; |% ^+ Z  C8 {
    //UARTprintf( "j=%d\n",j);
. P4 `& \0 F! f) Q( z' t+ x* y+ P    UARTPuts("Data mismatch in buffers.\n",-2);( u/ Q! F1 n$ D" I2 {
    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ Z, K2 e4 a9 N    {
. v. E, m5 j- N  D! E5 T& E        for (i = 0; i<upp_frame_size; i++)
- p( D! ]$ K2 @/ W: k        {
: a8 e( b: s& r            if (upp_buffer_a != upp_buffer_b)/ S2 [2 y' V; c* V3 Y0 {
            {
. Y" [2 @4 _* Q                upp_error_count++;
; O/ O- j) p" u2 k5 ?5 G1 _            }& u5 z) J% o) v3 o
        }' P, w# `( I0 g' a; e* w
    }  w7 u( O* n7 `. z# h
/ s* g. Z6 S4 g# J( i; z% u% u
    /* 报告通信结果*/6 Q) e3 k0 @& u( `& E
    if(upp_error_count != 0)" I. w& ~1 s0 W, v0 ]
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' [% \% E& C: a4 p5 d4 V    else6 s) \2 a: `4 l
        UARTPuts("uPP transfers complete!\n",-2);
3 b/ Y: Q) V" z- h, h; o% _
' z6 Q$ @  ?8 t5 O; I/ {    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& C$ P9 a1 I* @- u    UARTGets(ch,2);; f- {/ C" k! U( i
    UARTPuts("\n", -2);
/ W0 t7 m) R2 F! Z. F) G4 d3 [* u/ E! |+ |8 Z2 h) R
    if(ch[0] == 'y')
& b3 h: g* Q7 O    {4 h" `: P& L# B* s
        /*打印全部读到的数据*/8 _  N; M3 A4 @2 u* J- W5 V
        for(i=0; i<upp_frame_size; )
- p# `/ L% I( \& \1 G        {
2 X( ?) V  F, ?5 u- G( V. C# c            for(j=0; j<5; j++)8 W6 P) S7 i9 k9 ?$ U1 Q6 j2 q
            {0 Q- D2 B- c( N, W* P, M
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! h+ \7 x* n3 C
                i++;
6 i+ ~, |2 `! u# ^1 t6 W6 a                //if(i >= 4096)* J: Y: o% z0 W* ~* d" h6 }5 U
                //    break;$ ~7 X! P  N& Y2 N& |
* R! S! f. I6 Q4 W. l
            }
* k2 j' f3 {/ J! }# C            UARTPuts("\n",-2);
3 E. D: i/ @* H6 g8 {9 D8 s        }! q' a0 c, b' C2 Q1 J9 T! A0 q
    }
  ]" T9 d7 O7 B, H6 B/ s6 A# \& y% B1 E: Y* S- ~
}
/ z, J' v9 z( }) r
) f. E$ Y6 e' T$ }% Y

" r. T! @4 e; N1 t4 p5 a# g3 e; r+ F
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" R3 _9 u! s' M; \
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" w+ x' J) y  ~, u" Y




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