嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 |8 J; @3 ?* _! \7 e5 z
Void UPP_TASK(Void)6 y8 e) B" |: l7 }" D) h  C  m
{
' h! o3 C! s5 {( ]. W" K3 z$ @# e0 x1 E3 p3 }" o
    int i,j,k,target_int_count=2;( L: T7 E6 n( Z
    char ch[2];# W, h. D' H( b$ [

+ k% e) }) J5 a+ l1 F- v
3 L+ M& S- y8 J  g8 `& `. m& ?7 z) N! G* u% M
    upp_interrupt_count  = 0;$ z% I# w" k4 P5 v. z/ N0 _
    upp_error_count = 0;. F5 R. l, P. q7 [8 F
" A5 T2 S+ F& \2 {7 ?
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 s7 g' j/ v, H8 W/ h, Q! |
    // Initialize data buffers( R0 L1 V% c4 s+ K0 h0 ?1 `. R; d6 d
    for (i = 0; i < upp_frame_size; i++), A" g/ B, E- A/ |0 f$ A
    {. u& L7 }; }  s6 [- |
       upp_buffer_b =i;9 q* [3 I; }4 {
       upp_buffer_a = 0xDEAD;
7 _: U% O. b% M& O7 f4 R: [% J7 j    }
- C( a6 Z4 ]7 l2 \7 x1 v& Q# P2 K: g0 m
    //for(i=0;i<1024;i++)
6 |; }# V( U  u! I    //    temp=0;
: K8 m( c; n0 O/ F% H: X# |0 c
: x' B4 p& I' N1 q( |    //UPPReset();! \. k8 u7 d) ^: S/ |7 t5 y
    /*启动UPP DMA传输*/
( b6 c+ O4 F/ \4 w    UARTPuts("upp_prog_dma_i\n",-2);
& T/ O. {! T/ W, \( e( }    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) m. n8 Z8 Z" C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& k" s. c0 S: o/ k2 _) R: N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  X0 n& x" n. o/ ~3 ^$ ~
  f: Q$ _' Q: Z
    UARTPuts("upp_prog_dma_i\n",-2);# y, e* @* s  S& j& W* S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 c" M& A6 G: k: o# X/ Q% o1 K
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" r* {* @1 t( i, W
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  S' `. M- ?/ ^% D5 ~+ z& N
6 s4 F% Y5 i/ M" Z' t, P    /*等待UPP传输完毕*/5 i" g# O2 u3 O* o
    //i=0;
) X) Z$ ~+ A! S9 u! X7 l    //j=0;& d$ |3 H3 I9 c% M9 I& j
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% t, j! k: D9 r
    {" k5 b0 h$ H0 V+ B" g1 g$ x( E! \
        /*  测试UPP传输的同时操作普通DDR数据+ r# _4 _, X1 E  n; m& T) v/ u+ d
        temp=i;5 |$ ?% P" s. ^& u* A2 ^8 g
        i++;9 Y! l1 @4 w% A$ j$ }; a
        if(i==1024). B1 [1 L/ i) [0 z( B2 C! x: `
        {
# D: B/ o! y  ]8 \% D, E* ?            i=0;
  j4 r+ `; r' o8 U0 u9 t            j++;+ |. J  w+ k. y% P. E
        }
1 x' s$ [2 i8 ~5 ?/ y/ _6 G, {8 I        */9 z1 m8 h) v' C
9 f# I' {* T0 t: J! B1 u8 M
       asm(" nop");
, N/ ]6 e: J- Q
# {+ m' q3 e8 t$ ^# m4 J& z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 ~7 s8 e; M4 Z8 @/ B# I" d: C    }. l: h5 y4 P  E* p
& W, f1 R9 h3 Q1 @) s3 G3 ~
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( k5 b- q9 q0 f3 [
    //UARTprintf( "i=%d\n",i);; T5 m5 f. @/ K; b1 X
    //UARTprintf( "j=%d\n",j);
6 ?  E# [  O' ]4 ]  T, V% g6 T2 S    UARTPuts("Data mismatch in buffers.\n",-2);
2 N2 m  N$ A6 F$ j6 k5 |    if (upp_interrupt_count == 2 && upp_error_count == 0)) s9 M- X% `- W, [
    {9 _/ l6 q9 \' O
        for (i = 0; i<upp_frame_size; i++)7 w0 R2 k* n6 r2 _$ D* C
        {
0 R. |' n; ^2 |' o8 n) G            if (upp_buffer_a != upp_buffer_b)
" d$ P' L# R7 b# P4 j/ T2 e$ K1 w            {
( l, L5 X7 E) N                upp_error_count++;
; T; ?5 A6 C, ~( A4 S            }' w" _2 K6 p, T; c, t
        }' D" e: \" |" [+ d3 P; m
    }
, I' ^) d/ h6 {2 |  X; i
/ e1 k( j6 p) e) L    /* 报告通信结果*/6 c$ |( X2 `: {- F/ a# \
    if(upp_error_count != 0)( f: o, r6 ?0 S' v3 a( e
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 n: y; }8 ~  ]* W; J% R: }7 e    else
; e* X- H9 y4 C* u        UARTPuts("uPP transfers complete!\n",-2);# G, c! ~: N, c+ n9 S5 N' E$ d) ]

& B7 {/ ]" g6 l& z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ J* c) m  @. O) R9 U    UARTGets(ch,2);
7 J$ G3 ]% _9 [6 A8 V1 R$ E    UARTPuts("\n", -2);/ P( q4 T( c5 t7 x) Q& E: u
2 U7 J. L# m  a$ t
    if(ch[0] == 'y')
' F2 I! k2 F! x6 X2 U: u    {
0 D$ D: Y. u2 n% h/ ?/ I# N( U- \        /*打印全部读到的数据*/$ P: A' ^; [# O
        for(i=0; i<upp_frame_size; )
( ]2 k, k7 F9 @" ^" x% Z' N        {
9 m" Z  F8 g7 g; O% x. N4 }            for(j=0; j<5; j++)
8 c3 q2 C6 k& Z0 g2 w            {( f  |& O  j7 C3 b! |5 a* |, b- ^! f
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  s: \& [1 q% @# C( M, }                i++;& [" A+ y( a: f5 B% @+ A
                //if(i >= 4096)
4 l* z% k. q# U: w- D                //    break;
  p1 x6 }1 H" N+ P) K8 k- {+ o/ H) ^; u0 E6 x- p' ]( Q! T
            }; I6 {$ \0 i  v0 n2 y1 I% f
            UARTPuts("\n",-2);: Q& p7 m- X6 {) C# W' r+ z
        }/ X, d6 v% v) W. u5 m/ b
    }9 ^8 E( e0 R3 f

7 A7 ?( {! ~6 G: A2 \* t, n& o}
! u- L) |' X2 d& X3 @$ F! t

4 `  z) s* C  P6 S. C
* v" n1 R. e/ j( U, |. f& E
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; Y6 D4 r, k+ z1 ]

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. i1 [9 g' R5 ~6 i- T1 C$ k





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