嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( `9 _& X- v' L, N1 i* R$ J
Void UPP_TASK(Void)
& O. b% y6 p! R1 g{
* i9 ~! [- u6 ^$ f$ [. S# Q3 q3 i/ d& K5 g
    int i,j,k,target_int_count=2;( h9 w8 ]' e- M
    char ch[2];
/ K5 v5 x4 C. ^" U- s$ O
; t8 [/ |6 T( `" I; k
! Q# i4 ?0 D  U  Z4 z, b! V8 S+ e, N( p, p
    upp_interrupt_count  = 0;  x: K; h: I! K3 Y; R" D/ S% ?
    upp_error_count = 0;
0 x1 P+ ?& _" U! @4 d6 b4 y6 Q$ }; F! n/ Q! e
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: \+ N9 Q7 l2 b" F% p    // Initialize data buffers0 s  P, u$ c1 T% t" {* k1 T/ v$ ~
    for (i = 0; i < upp_frame_size; i++)1 j6 p/ H9 ?& E& K' c0 C0 g: P; P3 _
    {
% }3 y/ y7 Y6 d/ j# W       upp_buffer_b =i;7 @1 r6 f, n7 Z3 @& Z: x/ r
       upp_buffer_a = 0xDEAD;1 B+ k3 m6 }; p- ^0 n
    }" v4 S; u" j& ~* A- [

4 ^! T5 R& X3 X! F5 g    //for(i=0;i<1024;i++)
" o! U8 U+ [. U( k) J4 M# ]    //    temp=0;
- k$ e3 @6 s0 ~: w6 F: r( |- K2 d/ L+ k9 r
    //UPPReset();
7 ^' X* S; d$ P5 k  ~    /*启动UPP DMA传输*/
$ \' P# E2 W/ f- R) ~    UARTPuts("upp_prog_dma_i\n",-2);* j7 K: {+ Z2 P( G: z; K' W7 [
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) r! h1 ^! L0 [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( m6 g/ A  @* V2 S; g! R) Y5 v
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) o! a, U  t. h2 f1 a
8 s" w, {; o- S" \    UARTPuts("upp_prog_dma_i\n",-2);
( x7 {" F; b7 k, L    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, J# S. Z6 r' K5 @: h& ~    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 s( Z0 D* v  V  `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% R  k; K& X, h6 {3 q! b' R$ {1 k% V: z. l
    /*等待UPP传输完毕*/: C& C' N7 ~/ d8 Q5 y
    //i=0;
& R+ B% w+ l/ k3 @    //j=0;$ N) `1 `$ L3 N' e9 r# i
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ [5 [( G5 e9 o+ F# T
    {5 k6 R% W& b* n4 D3 V6 ^, T
        /*  测试UPP传输的同时操作普通DDR数据* {: H) @7 b5 i& g+ D. {
        temp=i;' n+ k. B- [) f3 O8 ~$ L% ?
        i++;2 [0 X: Y2 O& w- ~
        if(i==1024)
9 M0 p. @. _  c3 ^) v- w& u        {2 L! ^( w: N; b
            i=0;+ h- Y, ^! s8 p5 c! w+ H
            j++;! R- ^7 i, a. I( C
        }
3 M/ p! N( y% W        */
- g% d# m) T  L# D! J( ?6 @9 v' @; I7 K; D+ x9 Y
       asm(" nop");) N+ {5 m* d/ ^$ x
; P# b. o8 A/ R' U' M, L; j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: @  y& c# f, t5 f5 a; V
    }
5 D8 x. j+ W0 y* V
' {+ Y( R& g* o+ u2 a    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: ~7 w. C4 N& v+ t    //UARTprintf( "i=%d\n",i);
3 [; s0 g* N% x6 q% d    //UARTprintf( "j=%d\n",j);
  R/ m# @$ o1 K" P% B    UARTPuts("Data mismatch in buffers.\n",-2);- N1 D% c  t( A5 i/ |% R
    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 l6 j2 x  U/ N( T4 Q# g    {; }/ N8 c8 K* U5 D
        for (i = 0; i<upp_frame_size; i++)* Q( P( L3 I/ A
        {
2 s* M$ }/ h6 U# @. {  @% X. K7 Y2 O9 `            if (upp_buffer_a != upp_buffer_b). I9 Q, e. r3 e% C+ @
            {
0 N  \. P& ?! A0 a1 |1 S* p                upp_error_count++;
3 c2 O- z( r- S3 `8 b1 }. x            }
8 [6 V8 G: B2 T5 E+ n4 ?! n3 k        }) t4 E; d. h/ E0 n% D
    }
- ^8 P! g& Z1 k* X
( {+ F! n, g! G; z" q! }    /* 报告通信结果*/
( T5 u1 Q$ u6 Z    if(upp_error_count != 0)
$ }4 L& p, W5 I' b1 a        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 u) M, a' T! B$ y& T( G* x
    else
: ~6 u, j+ z+ t+ j7 V! o6 N        UARTPuts("uPP transfers complete!\n",-2);
1 |8 J) b: s0 I' J5 Y  r0 y& O5 V$ P. {8 p1 d7 w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 g8 v  H2 I: s& f    UARTGets(ch,2);
# E9 Q% T7 b, J+ F# }; f, r    UARTPuts("\n", -2);
1 ]) O2 r* k: Y# p" r9 R; k
0 [+ S6 c2 J9 Q, Z* V    if(ch[0] == 'y')
) Z8 I: V. B% n% R! E% b    {
' U  F) L5 U9 \5 Q; K# T7 u. n( A        /*打印全部读到的数据*/
$ p! z7 w. c) {" k3 x0 b        for(i=0; i<upp_frame_size; )
# k# b; M: u! d: N# X        {
$ h( O! z8 b8 l$ X( f            for(j=0; j<5; j++)8 S1 H. ^: W! v: W, w/ F
            {6 `9 s1 w5 e# S/ {9 l  e
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" b  C/ I* K; R$ b
                i++;
$ Y  x5 D9 p- h                //if(i >= 4096)
" t5 A4 z8 [7 M9 x  H8 n                //    break;
+ w& [: q" K6 A* U0 n# s# w6 ]! C
, C% q5 x  X0 q! _9 y, ?, s            }
) C) j; @7 H& n- O' ]            UARTPuts("\n",-2);6 J% \+ C" I+ `% q- {# E
        }
4 a# m0 B3 H3 J6 x    }
5 I1 j/ J) {3 i5 P' F6 K( \: ?) c, u0 p  N9 t5 a' }& `
}

$ T0 p4 R- Z, ]8 e

4 v% E( \8 s! Y" M' B- s* ]5 [' \; P: i, @0 p

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. Q8 V" D# t1 m7 `8 x3 L) |$ I

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 H- A" ?+ `( L' ^3 {$ z




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