嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ |& u  \7 t; L3 \) f- k0 j
Void UPP_TASK(Void)% ?  y* _8 E3 i$ w  {
{
$ Y' P4 t; l7 N
9 g) s+ ^6 x5 C) x, p2 n    int i,j,k,target_int_count=2;! d- `) j4 e. f& J
    char ch[2];
/ `  d4 @+ R) a" E# d0 ^( Q7 Z, _0 N7 Q$ j7 x7 g

1 w' e+ f5 I2 Y. [- f# c$ T' |: f1 h# ~) v5 z/ l7 E
    upp_interrupt_count  = 0;
6 }0 R4 f4 s. c% g2 i8 o/ _    upp_error_count = 0;
+ G5 k5 V! f& u8 a4 B# J7 a- o: e1 {) G* m/ X) I
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. k! x5 `9 V) L
    // Initialize data buffers
0 G! i; g1 m) s/ ^    for (i = 0; i < upp_frame_size; i++)
/ w  W  E* {* _    {( S9 ?; O+ b& X: |# U+ B
       upp_buffer_b =i;
& ^9 L9 G+ Z9 n  }# t0 {       upp_buffer_a = 0xDEAD;
) @  M! ?9 f! Q+ E3 M    }1 d" I- V$ j$ Q* Q2 G
( Y0 K8 R, u* A8 X
    //for(i=0;i<1024;i++)
3 X4 b1 t: s6 O" ?, A( E& n+ p    //    temp=0;
3 _' V' r# _% n7 {/ M
6 @- `; t, f! n0 o0 E7 k- G4 k    //UPPReset();
& D1 T7 V+ z5 |: }0 r    /*启动UPP DMA传输*/
2 B% t, f$ M0 L" M4 X- ~    UARTPuts("upp_prog_dma_i\n",-2);
  O4 [3 D* i. g) {1 M1 v    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 A3 D3 n9 K. P4 M# S    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 H7 }! }: Y7 x2 l5 Q2 ?9 D% t8 d
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ \+ s/ B- E6 u' d4 n$ J7 e

6 @  G  A/ ~! I) w    UARTPuts("upp_prog_dma_i\n",-2);0 f4 ]+ Q& j! W% Y! N. D+ g+ J
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 j, u9 {% `: J" ~% e; k$ g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ v3 N8 |4 o: ?" m" N& s( W5 I
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) O9 s6 A6 A, F: ^
! f5 h6 e. X) j% j1 L, y    /*等待UPP传输完毕*/7 A' D5 W& a3 h$ u5 M7 v( \
    //i=0;
5 t* B; p- T6 `3 _$ A1 V7 H    //j=0;
3 q5 _/ X1 Z7 [0 e' \7 y& N: i1 K    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 X" e9 a& D) e+ V6 ?/ L. M    {
# x$ H- i* K5 _' }        /*  测试UPP传输的同时操作普通DDR数据
% i" g/ ~1 N& _5 F        temp=i;+ e( m% ^) N) |- l' \1 M
        i++;
; r2 o0 M9 {4 V+ Y        if(i==1024)
! X1 X6 [# z8 ?  T0 e0 X6 ^5 ]        {# \- g. g+ R* v/ C' G
            i=0;3 h4 b5 g' r. F3 a% y+ @
            j++;
  l- a( v8 z3 @9 D5 ?        }: M7 r+ l5 T. k
        */' Y% @) e- g' c" s) L
% [6 |' Z& O- w. M
       asm(" nop");% |/ ]/ O0 o2 `' z( ]# T3 S( H

4 ~7 l, y2 L# K3 I, K) S0 y7 ~8 T. ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 s2 k9 F2 ^+ X5 l: m; b
    }! s! h$ b7 Z8 x% f$ a! R7 W
% x2 [+ m4 j$ \+ Y4 y* w' C) ~3 M
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% {( G# m" J4 E4 x  F    //UARTprintf( "i=%d\n",i);
6 {* A) V) k3 K& o    //UARTprintf( "j=%d\n",j);
7 E* A' e" n& C( o4 T  Z' ?* X    UARTPuts("Data mismatch in buffers.\n",-2);1 `1 e) k) p4 T% q) [6 @$ ^. F
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 l* d2 {0 ?9 i" G- ]' E
    {
3 W, b! n) a: x# J5 }% R  p        for (i = 0; i<upp_frame_size; i++)
6 @6 P8 E% N2 B: H0 `        {# J0 e5 ]  z2 a0 R: m/ U
            if (upp_buffer_a != upp_buffer_b)' P" i# J6 }) P: A, F0 C
            {
% L& b/ q  k3 D                upp_error_count++;8 [# O$ l& @! x! ^; D& B7 D  S
            }+ A: z' c* ]9 g4 l
        }
' I6 }  C; y* J. F) t    }
* R; S  a3 f, i. e5 _* t) B
5 w$ e; W# X7 }    /* 报告通信结果*/8 @2 T* T1 d2 A; M& ^, ]* g5 O
    if(upp_error_count != 0)  ~1 J; n6 W) q0 ~3 C5 F
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 N: _* F0 M5 q3 t4 p    else
( F; k5 x/ W% d3 W* N8 F4 t0 R" w        UARTPuts("uPP transfers complete!\n",-2);+ y: J' f2 X; C+ t0 O
) `; E( K4 a. ^2 q& Q7 R6 V+ T% N/ l
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: ~; c, z. i6 W
    UARTGets(ch,2);
' ~4 T: }8 m8 d" x% A7 o  A7 S    UARTPuts("\n", -2);
' A& q- b3 Y% @0 f+ [$ _; i: ^8 Z% [6 H# o: z
    if(ch[0] == 'y')
: g1 Z& |) C% ]- S5 P    {
" G( L# I; C& H1 _6 ^        /*打印全部读到的数据*/
3 I6 @- z% M2 B2 n1 g$ _! s        for(i=0; i<upp_frame_size; )" {. C# \: O; @, ?
        {4 q4 E& A, H, G/ P9 k, h5 u
            for(j=0; j<5; j++)
, ]. S4 a  {% u& T6 H" k+ n            {
* B9 U. Z( _9 ?! L  B; }& j! g- T2 X' B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ c, a/ l" F0 @2 {; P, G
                i++;8 o7 J/ ?1 B1 Y
                //if(i >= 4096)
2 {( k1 c3 c) j- p6 L( R) c/ l( r                //    break;
! \9 P6 S, r5 [' b) s3 o
$ x/ g9 o9 u" N% R            }1 i1 x+ P$ f/ I! y% b, n
            UARTPuts("\n",-2);' u! u% }( N6 Q4 i! }
        }
7 r: k' n9 F& e( C1 A    }
$ \1 `6 H& b% e/ d# ~6 w2 j7 @; E/ \4 @& O' }; Q9 |- k* A
}
( h" }! o- d& X4 @
4 M& V4 h/ W: r$ [) k
4 U: u% Z7 R$ z: Y+ [6 R

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ W' f( A4 }" F% h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; ~# H' t- k: U/ N





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