嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?0 k# h+ `$ S( h- S/ w2 y  s
Void UPP_TASK(Void)
3 @6 U; S$ t& M7 ^{
  J  u7 v. E& M  X. Y+ f; ?) ~# K, T4 f) H- b% w9 K% c8 S' k
    int i,j,k,target_int_count=2;( q9 Y) p1 s$ r( z& K" _: y
    char ch[2];
( Q  V  v: ]0 W" U1 N  R! x# O0 H1 U
4 G: [2 u' o/ a3 c% m: @
$ |: |) t. M/ {, p- x
    upp_interrupt_count  = 0;# x7 K2 }/ v$ \
    upp_error_count = 0;
2 B$ L" }) W) m* c, e' m: m: y; \3 J1 I7 ^3 t
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 |% |/ w* I! C5 d
    // Initialize data buffers! O3 o/ E4 x# U& D/ a) w
    for (i = 0; i < upp_frame_size; i++)
: ?7 f% F. z: f" g, S: b5 J) u9 a    {
0 k- s% p' T; ^. d: Y       upp_buffer_b =i;
0 i0 p: j7 ~' A" k  k# A       upp_buffer_a = 0xDEAD;4 E1 `! A2 c! {) d, G' A
    }. Z2 N" G; ]3 p# _4 p/ s2 t  G  U

$ c3 X8 A7 U' N3 T/ u4 L* \% H8 B    //for(i=0;i<1024;i++)
# i) }% ^$ V  x7 Z( u1 E5 l+ e    //    temp=0;
- X" T! O# o  V; }- G; u" W8 l7 X- N: M5 K5 p
    //UPPReset();
' |5 V$ F1 G4 g5 H( R    /*启动UPP DMA传输*/. s4 v1 I9 t. a( ~" [" s7 z
    UARTPuts("upp_prog_dma_i\n",-2);
1 E% m% x8 y( ^+ g    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 b7 \9 N% L! @) K( K( T8 ^4 u. L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& i0 M3 G& {! y+ K' t0 b: R8 h4 E    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& ^! l( W/ y' ]1 b, c) _
3 y5 m7 C2 F, q( q. h5 W    UARTPuts("upp_prog_dma_i\n",-2);
9 D+ @* ^& c( r6 U! `4 ^' C) r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;$ x* r1 p6 C& P
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 E0 L. j' O! p# R2 z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) Y$ K- b4 j$ r' W+ ]- V* i$ l, V4 E5 z$ o8 f2 e$ X$ E  Q  h; G4 L3 O
    /*等待UPP传输完毕*/! l  m8 M: [1 Y4 @
    //i=0;8 q& ~: G- `3 C  ^: g/ b6 S* V; R
    //j=0;
) g* f7 N& b7 k- ?) p* g    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 ^' J9 @; @3 H+ U
    {
  }8 Q1 t8 p% l        /*  测试UPP传输的同时操作普通DDR数据7 Z' W  h/ y+ S+ D2 v1 u) w
        temp=i;
2 E) Q8 K& B( r! `        i++;# z9 a) l# W9 T3 J( ^6 [/ X
        if(i==1024)
' V  k/ V2 b3 \0 M# {) q        {
9 Z/ z/ P0 R3 X            i=0;
* O& v  ?7 M: c& ~  Q4 r8 @  F            j++;& C3 N; ~. R" S# w5 \/ {
        }
6 A6 W; b" d7 w" y# k1 d7 F        */
* t+ V7 t& e7 S6 s5 ~3 b! Q
+ ~. L: M* J( p8 F1 Z6 ]1 h9 G       asm(" nop");
- y4 m- [7 O2 Z4 h" J8 q  [
; X) N! `, c: m2 S4 l       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" W4 N& \) g8 V. Q* \    }
1 Y$ Q# ~4 G% g6 ~" `/ r# u' d2 \! S/ |. I! f) [. `8 h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; a- q' Q- i$ Z! z
    //UARTprintf( "i=%d\n",i);
( D( G+ B! U+ ~0 @' v    //UARTprintf( "j=%d\n",j);; q0 K5 s5 v" e; c
    UARTPuts("Data mismatch in buffers.\n",-2);
2 `- T) d) {, E" T) S    if (upp_interrupt_count == 2 && upp_error_count == 0)
! R  ]7 s, {4 b# ]1 z  Y" L    {
6 E& o- E$ d. G2 g9 [$ |. y1 c        for (i = 0; i<upp_frame_size; i++)$ D1 T9 m$ J" G# d6 `7 Z
        {
( }- ~) _5 X2 j; k            if (upp_buffer_a != upp_buffer_b)/ N0 K1 n) Z& r! G3 k7 t  A2 N
            {, _( |3 n( k" r, S/ L5 x) A
                upp_error_count++;
3 @4 z2 j6 p; r2 D( }            }6 M( \( o. W  h
        }; u7 g) I# @- }$ z* H  S
    }
0 k& |2 ^, h0 R. k) O  I5 ^; _/ Z/ J9 E. T; c# k/ H# M/ m* L* m8 K& I
    /* 报告通信结果*/4 x( b, ^" T$ L' H& r/ }5 S
    if(upp_error_count != 0)0 x# e' q0 t; U, n3 P9 t, R- S
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, p# P  ^" m3 [( p+ o, N# M    else
# w  ?4 S& H+ }7 e        UARTPuts("uPP transfers complete!\n",-2);
. \% A- |( |( n; M8 C+ w' {! }( Y9 Z0 s) L
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ b/ S  m/ _# r! Q% p' d
    UARTGets(ch,2);7 }8 r3 U- T: E4 \& y- T
    UARTPuts("\n", -2);
5 y0 G- E) L- v) c( f; C) W# {2 d, u2 g) b
    if(ch[0] == 'y')) [1 j7 _5 W1 F8 U' ~7 {* C
    {
- o* H8 ]- B3 v2 K( Z) J9 ]        /*打印全部读到的数据*/
/ V1 S% }- I2 e        for(i=0; i<upp_frame_size; )0 D% L' Z* ?$ }
        {
$ Y) \# j1 u7 l$ d, f8 L; {  z            for(j=0; j<5; j++)4 C3 J6 C  V7 S) I5 G& n
            {
5 M, u9 V/ f6 y( G( h                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% n. F7 {$ b* Z, Q                i++;0 w. |; n' q, i! u+ g8 _7 p: D; \
                //if(i >= 4096). e& U1 E1 T7 `% ]- S
                //    break;
. ^0 }. R% n+ g# }) ]/ B+ k* A' E, G! x# p
            }- s0 W; t) ?( g5 Q- I4 P
            UARTPuts("\n",-2);
" i! S( Y& {  @0 g5 h. i3 C        }
8 D) x$ P" T5 E" f    }
% _8 h/ \/ o. M- @6 f2 w6 ]6 g! Y  e
1 U( P; F9 U4 {: [( _}
) t1 n  D# C! I. M2 a+ a+ M! F
( U- F- a- C0 E1 [& w9 w! U8 }3 F

) J' E# r7 l0 I) x$ K- u& K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 O, K0 t2 ]* c7 U

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% E/ _9 _8 A- m





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