嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; A0 {+ ?( u$ C/ f
Void UPP_TASK(Void)
  I5 C+ ^  Y" Z$ B& E$ e{
2 J; l4 ^% w/ C) \
; g  s/ B# m; O1 W+ ]& O8 g: F( y0 q    int i,j,k,target_int_count=2;
" }) A; h$ ^6 o, ?0 K4 R  Z    char ch[2];: t, n5 U' T! q4 l, _$ V9 J

! Z, s4 ^; G8 s
* I/ u) E+ k1 k2 y% E
* K) L4 |% s/ C5 z3 m  o7 A    upp_interrupt_count  = 0;
; S6 _9 q2 Z1 |, W* N3 p    upp_error_count = 0;4 k/ m+ j! d/ C/ v- W- y

) }( f0 p# |6 G4 i% G# O: H    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# r% O8 c$ ^5 ~, ^. j4 q    // Initialize data buffers# f8 L/ V; r7 P6 K' j8 k. k
    for (i = 0; i < upp_frame_size; i++)# p% x( z7 |  F4 I# Q
    {6 x! `* F0 v/ F' C
       upp_buffer_b =i;' Y2 {# l& L4 K# w$ l
       upp_buffer_a = 0xDEAD;
4 E. i& `6 S  E    }
- d' B8 r* b6 a* @/ J# Q% N" Q: M3 P; a' L6 W8 n0 P; J3 A
    //for(i=0;i<1024;i++)
4 {' ~) x# ?7 p1 O- E9 U    //    temp=0;; Z  h3 A# w* w, L7 S

% b3 i" G. F6 Z% q4 S' e1 F    //UPPReset();
4 O+ w7 e5 l! U% k    /*启动UPP DMA传输*/( {" [9 C/ F* c7 }8 F- o/ ]; Z
    UARTPuts("upp_prog_dma_i\n",-2);% s' J+ A* j; K3 o$ W4 K8 R0 P; e
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' U" Y' ~* r0 T4 h& ~, Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! C- z7 s5 J: A) M& C. r3 g
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* V8 v: b- a# p" {  w& w" g
5 |  }2 [+ b# }9 w; W2 _7 q; I+ Y8 r    UARTPuts("upp_prog_dma_i\n",-2);# y3 L0 j% p+ B1 O* t7 u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  V  _9 j) e$ g0 `5 B; w4 J/ j    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& a- d" E; M) y8 P. ~1 l9 w" C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* }5 z9 }4 ?6 B8 G7 U4 S. a
7 a6 M2 C" q- C
    /*等待UPP传输完毕*/
0 K  q9 S" I% }3 e; [    //i=0;
* S4 o% N- O" \! d! a7 S2 N1 n    //j=0;2 d+ `: h: X8 @" x4 @  B2 d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0): \3 {6 Y; k& t' Y8 W& E6 \; f
    {
% `# K; g; \- {* S6 k- h4 s  n        /*  测试UPP传输的同时操作普通DDR数据
' y% p% [1 V  r" |8 O0 ]+ f        temp=i;, J7 T( w# x. r. D
        i++;
) N1 g1 y8 j- w+ O: d9 [        if(i==1024)
9 R% n( R( h9 B% B5 M( p4 c( {        {
3 o5 j) m  |' {& l; H. ~            i=0;
% i& f+ L: d. q. E2 k            j++;
! S' t9 m) B3 N: L        }
) r9 K( Y  u/ e        */) r9 p; P+ S: B5 M+ h

5 @5 R8 N  |6 @4 B6 q. d       asm(" nop");) P0 ^* C- f1 k0 i5 h" B
  R5 A0 u3 x# |7 L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" L- w, F' R5 ]6 ^    }( l3 J( |% N  g6 v/ [
, s1 R6 Z% H, j  J2 N" n5 s( V
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  V5 H# ~9 H, k9 P1 c: f    //UARTprintf( "i=%d\n",i);
% C: F( A9 ~4 ]: @' W) J3 }( o+ S    //UARTprintf( "j=%d\n",j);: @' s/ j) b4 G- c/ w- r# ?
    UARTPuts("Data mismatch in buffers.\n",-2);
6 ^2 z# \# m- D' I/ h8 w    if (upp_interrupt_count == 2 && upp_error_count == 0)3 [$ W& n, Y* @7 l) T9 h. i; U
    {# |* V1 i" x! i- N, |9 |
        for (i = 0; i<upp_frame_size; i++)- S& v8 @1 {0 m% c" L" H; r
        {
9 o( Q1 B) _: w$ g            if (upp_buffer_a != upp_buffer_b)
5 T  Z! C' g8 G2 _+ m* |# ?8 T            {+ \; S8 y8 L& m7 N
                upp_error_count++;
, Q  ~; n. s5 G; n. `            }
) X( V" P5 R8 q; G6 P, L; {" n4 q        }
* |' Q9 c) H$ _2 J8 V    }
, T9 w8 E, q2 n' g% }% ?1 }/ Q- g- S" `
    /* 报告通信结果*/
) ~1 v, @2 N: v: K) n5 y    if(upp_error_count != 0); M! i' P! e! @/ R5 Z+ D; R' K
        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 H! t  V$ C3 M- ?
    else
' l; }  K" _. e0 F        UARTPuts("uPP transfers complete!\n",-2);; \0 K5 _# K( S0 z+ v

+ V5 I# r" W8 ?- V! ^    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! X. o6 x6 h. B% N8 u
    UARTGets(ch,2);
, Q  b: ^% _1 {# Z  R    UARTPuts("\n", -2);
8 ]" @# _1 v5 k: K' n  `1 m" `. z* {1 e3 F3 R
    if(ch[0] == 'y')
5 V6 L$ a9 j6 L& V7 O+ M    {
- o' g0 X) ^4 `! P6 E+ i: J        /*打印全部读到的数据*/% w6 V0 d/ E  ~% v3 F
        for(i=0; i<upp_frame_size; )
9 `' x( u( x: h7 D        {
9 V0 v6 p7 o& U; J2 d" a* k- g            for(j=0; j<5; j++)
2 ]4 l! W& C# W; z* f' U/ y4 Z6 ~2 r            {4 B- P& T# E: H$ o2 E
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- \% I$ t) q! J; h0 ?, g: ^                i++;* I. [) d5 ~3 K: F2 w+ F
                //if(i >= 4096)
5 P  g0 @' T5 q8 E5 F! {# L: n2 ^- z( ^                //    break;- p' N+ B3 Q1 k9 C/ v' @

" }6 A! ]' ^% I) u8 g            }/ I1 d1 Q6 R( o4 y9 B! s3 ?- R
            UARTPuts("\n",-2);
; Z2 a# D3 C0 \9 b: s* h        }: Q0 M2 k/ R& s1 F) v- \- R
    }
, K  C& t0 d; `) r: m  y! u3 j, K( V! t% l
}

: ]& Z" U# S. g7 V6 ?

. N; _( u! K: _* k3 m4 x/ y. m: G. ^7 [4 i' k, i

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% A2 V/ T$ M* \* c2 y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 \) m6 f6 `" E, G





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