嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, Q6 T  M0 p4 Z$ f, x
Void UPP_TASK(Void)
5 n( M: R; n; o' ~/ X3 T{
) \' `* `$ `7 A5 L5 p, B2 j6 |& \- i4 Z; y3 c# K, l
    int i,j,k,target_int_count=2;
( X# ~( y# l4 h7 p/ V& W    char ch[2];
% N1 ]* I+ a% u1 r  l7 J3 F9 b1 m- Y% ~" U

5 ~% E% [: I1 a$ E2 j7 `* J/ z5 A: C5 t4 q% A
    upp_interrupt_count  = 0;
# k( i5 `" D0 H" m/ {+ t    upp_error_count = 0;
( P: C. `" I" v1 D3 c) x# H6 k# z: E: C; ^6 p
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 ^* b4 C( N2 T; s3 o# Q    // Initialize data buffers
; @/ I/ }, ^) ~0 {7 B    for (i = 0; i < upp_frame_size; i++)( d0 Q0 A. f6 ^: }% G
    {
& R9 G& L3 ~/ j       upp_buffer_b =i;4 }( [' u; A+ b4 C, v
       upp_buffer_a = 0xDEAD;$ H4 n/ y) ~3 p  {/ L& y, K0 Z
    }7 n% [$ C/ E' [) H

' T" Z. t1 e2 ]4 W6 y4 T0 l* r    //for(i=0;i<1024;i++)
$ P7 J) Y+ P% g9 Q0 J( N6 W/ @) t    //    temp=0;' q9 T2 x4 A4 |( I

0 }5 z( v0 n9 ^" Z: f    //UPPReset();4 I3 j7 L+ n% q" H2 \+ t
    /*启动UPP DMA传输*/* Z  E# @. k2 H9 G. K
    UARTPuts("upp_prog_dma_i\n",-2);7 Z! X/ R9 n/ u3 u: A) Y# y" \+ s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# e  X( c$ A0 b/ v: |9 g    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ K% @: T9 l" c& [7 d: z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 H) U" H8 R# a  h: d- x4 [

8 g- V+ D3 N: _: q    UARTPuts("upp_prog_dma_i\n",-2);  _2 P+ @5 m4 K1 A8 d$ l8 ?3 o7 g
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 h1 h+ L* |7 B) |2 Y) _( f
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 m) ^8 p1 w; k0 c8 g' o  V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: ]1 q$ f# E' J7 Q
" J& C7 h# w& U; K1 I4 M. u$ e+ B6 u+ O
    /*等待UPP传输完毕*/
# D8 M& K! L2 e3 D3 e" _) ]    //i=0;3 b) o5 B+ a2 ~, j! A& g" X% p# e
    //j=0;
5 V* ^5 p1 L8 K/ Z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" n- V  ~8 }: N# c* C) n. p# l
    {
  o3 e  \. Z/ W4 H2 B        /*  测试UPP传输的同时操作普通DDR数据
& ?4 B+ w: o# l- |" M  X4 U        temp=i;
& s% J. k/ c% `; S1 I        i++;9 b; V7 ~! r& S) T
        if(i==1024)4 g5 Q& B( q: k) C' U
        {0 U5 b7 R: Y* w
            i=0;" V7 d, T: K  P
            j++;
6 h( z3 H& _* c5 I' V! w2 Z# V        }
/ K+ R2 o0 ?$ U) W: s4 ]        */( |* I) [- o1 x7 Z+ Y+ a

' L2 y' }# ~' S; I" u6 v       asm(" nop");
1 B, N" X+ L) N9 ^
8 a/ Y# A* @& J  z- L1 d# ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 c) f  I4 V" z& W! l+ M    }
3 Q9 p0 u$ P4 K1 [7 p* P! [+ Z; ^# m  D9 v& g5 s* b
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, A# x# q3 L% ?3 l  n9 x1 X* K
    //UARTprintf( "i=%d\n",i);2 t# Z% W5 Q* _. Z$ W
    //UARTprintf( "j=%d\n",j);+ c- E! x' J* j; {% @8 r8 D
    UARTPuts("Data mismatch in buffers.\n",-2);( W+ q0 C. Z; ~# E3 P  m
    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 d7 |0 K( J  [/ F9 \2 ~, Y    {
+ N) ^0 d$ N) m* `/ X        for (i = 0; i<upp_frame_size; i++); t# L/ |, z1 k0 o( v. y0 M
        {% G6 l9 }3 ~; M+ e+ L
            if (upp_buffer_a != upp_buffer_b)/ s2 M) ^1 O/ A6 V" e  ?
            {
/ ?  q( m. {$ D4 ^0 J- q( X                upp_error_count++;
6 @9 e3 C4 J' P* e, T: }            }+ Z8 x' @) D, M( g6 l
        }
0 P- d3 i6 r) |8 t- V    }# p8 S6 L9 }5 ~! J4 P) `8 S
3 q. A- |8 r# m, p' d- }* q+ I
    /* 报告通信结果*/
' }1 a5 g6 b: R4 T; Y6 E! ]/ I    if(upp_error_count != 0)' Z3 `8 s7 s* \
        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 m" {8 W2 O. H: o: X8 e
    else" B/ ^; a; q1 [8 l* Q% w3 }
        UARTPuts("uPP transfers complete!\n",-2);
: H; b  B, F6 i3 M& W  v0 e$ s5 Q4 P. L( q2 k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. E7 k! S* o- \$ Q$ r% R
    UARTGets(ch,2);- P8 l4 A  \2 e2 |( b! N5 V
    UARTPuts("\n", -2);
5 B! z$ b& P+ o9 T& P9 _9 W1 I0 ]5 t+ K! ^1 l4 q
    if(ch[0] == 'y')# ?6 N' Y% f1 Z. Z
    {
. q! {. Z! ^. v" G% s% o! t' A' G        /*打印全部读到的数据*/
! P$ q# F+ M8 u- N6 c$ t        for(i=0; i<upp_frame_size; )
$ K! V4 z1 f6 K; `3 P4 I$ r        {5 q/ W) F3 n* z
            for(j=0; j<5; j++)
+ j2 M4 m+ W& O* y& ?# X            {
$ L+ b; f1 T. ~) A                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. W; Y% b, U! v6 w8 |' ~( D
                i++;1 e# ^# m  y  u) F. F$ ~
                //if(i >= 4096)
& ^) j# X& {& I8 U                //    break;
  u! J+ Q! B8 r8 H8 G  Q
# y. g9 H" n. R* ^: ~/ X) J; G7 O            }0 p2 ~( Q: x, ]2 F* Y7 r, z
            UARTPuts("\n",-2);) t+ W9 F' x0 Q# {
        }
) N6 X" o) N3 N* f    }! ^( ^$ r8 r) o5 F; T
0 q/ l; i% ]1 P9 z& H) K! s
}

$ b3 T% y1 v/ W2 J  U# x3 n
$ J3 Y# y/ Y! q  W3 O

- x7 N& ?3 N* A8 v4 s
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; s6 j- V" M2 J  _# |  O

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 A) o- X5 Y  _





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