嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 g, i# F. d& n2 [& S
Void UPP_TASK(Void)
( ?( `0 b; R  X1 r5 M: g{
# _/ j9 L! M! ]3 u+ v2 z6 W- |" ~0 C0 D! i8 Z
    int i,j,k,target_int_count=2;
. n9 P$ B! K% R, g% K/ b9 n    char ch[2];- n- B% P. F" l+ Y- I
0 d1 `9 g: ?7 ^# T# c% V2 S5 Y
: Y4 z3 W6 W$ Y4 C
$ o/ H) ?, x  n! _" Z! J$ g
    upp_interrupt_count  = 0;
$ w# G8 I( X5 B    upp_error_count = 0;
0 Y, V" t& v, U" o# @; `0 @1 P( L
    UARTPuts("\tResetting uPP buffers...\r\n",-2);# p( |4 h6 i- ~- c0 U9 }+ `
    // Initialize data buffers! }1 W8 W+ s3 \; u6 }+ B* P
    for (i = 0; i < upp_frame_size; i++)* c9 f: L3 g# f
    {
, |6 `. x* r6 T8 c  D' u       upp_buffer_b =i;
8 B) j* [( Z) N/ _4 c" w( f       upp_buffer_a = 0xDEAD;: B3 `" c8 R1 ]7 _  q9 @7 c+ M4 D
    }. Y+ o, M! o$ @+ j4 T
5 S) B0 ~5 B5 r! e2 w
    //for(i=0;i<1024;i++)% E3 m, L  n* N+ g
    //    temp=0;" W" W3 C: K( d6 S! i
6 L2 v8 c+ C2 Z3 V+ ]' J; B0 z
    //UPPReset();- y+ h8 q3 b% V0 E& T8 O
    /*启动UPP DMA传输*/
3 M/ a, a3 i1 }! h3 R, \    UARTPuts("upp_prog_dma_i\n",-2);# Z4 Q9 S8 K( J! X$ `6 e. A% z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 P! M9 F% }! G# `) n& P& S    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 a8 b9 _; w( \0 i% {    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) x2 T9 [6 a. H2 p( c

5 Q" [% q! K% E    UARTPuts("upp_prog_dma_i\n",-2);1 V! n, m6 I. I$ ]* f
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# L9 e4 A5 W- `9 j- v
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 g0 ^, m, o5 D2 q; F/ k
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 w" O9 T. A8 j- V4 S1 c
6 L. }- M& f" Z' a3 N    /*等待UPP传输完毕*/! D  v0 P  Q: u) x) R  T
    //i=0;
7 T! S5 ?( o& @4 B  }    //j=0;
) c# D& P8 C$ v    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 j3 _, g% n* j1 f( F    {& K! W% D' ]" w1 C. K+ @7 N# X; R
        /*  测试UPP传输的同时操作普通DDR数据
, O. C# z9 X( P9 Q$ Y) s        temp=i;+ P) E4 l( o0 w9 T0 b/ @
        i++;+ ]0 E8 x$ S, i/ ~$ H1 B& C5 z
        if(i==1024)/ H+ l8 m! k* a" A9 D
        {: c- z* x" X; b9 @- {- Z6 b
            i=0;% W5 @3 X4 p2 E* Z+ {$ ^
            j++;' ~& W2 J, v2 W* w
        }
7 h6 ?* s7 k: ]6 v5 A        */; t) ~& ~1 P- p
# p6 P- R/ t6 h6 }: B5 [
       asm(" nop");. b+ B6 j  ~. i2 m4 z% P# ?: q

+ l- n' ]: _; V, C; K: [       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 H" X8 S0 J; z  ~$ q3 O6 ~9 e    }/ Y; a; z# B( p; Q4 ~
  i: g7 x+ _% D) O) N6 j' m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ @1 |/ ^2 K, Y. J
    //UARTprintf( "i=%d\n",i);
: C! m8 K1 `( d+ |" u. e  r    //UARTprintf( "j=%d\n",j);2 H! ]1 `; s9 Q' p$ u
    UARTPuts("Data mismatch in buffers.\n",-2);' h$ o3 T. `  z& a+ S; e7 ^8 ]
    if (upp_interrupt_count == 2 && upp_error_count == 0)
, Z2 C3 ~$ E9 O- [! m0 x    {( B% T& E8 d- u  L3 b
        for (i = 0; i<upp_frame_size; i++)
/ ]9 l7 _( g* n# L! c        {
3 W% E7 w/ s- R5 B5 x            if (upp_buffer_a != upp_buffer_b)* H" `8 e  m, V/ _) r, G" W3 m+ Y! N
            {* J+ N. B0 O9 l6 `/ h" S0 H
                upp_error_count++;
! o+ j" v  x4 D& Y            }
& ^8 R; g' W' x9 V        }
) M4 E* I" h1 \: q0 ^& [* d# V    }
/ x- r  V( }% ]0 c
. p0 u& |* S" @6 K2 j; W' [; W    /* 报告通信结果*/
5 \: ^$ a9 I! \9 r* T    if(upp_error_count != 0)6 M5 i/ a1 J$ n" [# @# A3 v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);# \( y3 y2 P2 B4 |" R
    else8 a% ?3 m% ?/ {. f% Q0 y
        UARTPuts("uPP transfers complete!\n",-2);% F1 V5 l6 t* p( h! k

  X) I2 b' D4 F+ _    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. P' Y. J! n% }8 o+ _' p
    UARTGets(ch,2);5 E  j% {* ], ]
    UARTPuts("\n", -2);
! Z/ {/ \" R: s$ ~9 Y" W
& m9 a, O9 o+ {! G    if(ch[0] == 'y')
2 Z+ L3 D: m2 a, p0 {* E& x    {. T; _/ f9 `/ x2 P, y) X- o3 ?+ O* H) L
        /*打印全部读到的数据*/) }  k6 k) B! e! I% f+ R/ E
        for(i=0; i<upp_frame_size; )& l1 M5 Q; y$ l0 Q8 R; J
        {
  K! m+ ]2 Y; \& Q- ~: n( p. F; {            for(j=0; j<5; j++)* q$ |8 o4 h2 v; o9 d( W; m
            {
. P( V3 f, O% g3 r% F" u/ b+ |                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ |' S# i' g$ u. X# ]& z+ Q                i++;
- z! q" _: L  d: }  V- G                //if(i >= 4096)5 C2 m# d+ P. s; u* r4 G/ \- K
                //    break;
, B* s2 w, ?0 ~6 P
3 T- b/ ?5 h  V3 e            }
  O' [" w# c  K7 _            UARTPuts("\n",-2);
: Q- v( [8 p* k0 [; e3 Y        }& b2 m2 G5 I7 o' m: N0 C
    }
8 ?8 G: X( H. x; J8 X# s5 h" V; T" B) `# C( E# A
}

: p, s7 ^7 L/ W' m& s3 X

% B3 ^% m. v6 ]5 c7 c" ^4 B  l+ B) W* n2 @

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" |, A1 y+ H6 c2 ^! u0 T

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" M$ B  ?" @( p




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