嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% h7 i1 s% o' J  E2 L: N' S1 e
Void UPP_TASK(Void)
6 V) u8 b# c9 r8 c{
( T, o; c; b! ~1 X: m: L8 X. q# j* R- u) B3 U/ ^3 N4 r
    int i,j,k,target_int_count=2;: b* k* ~: q! r: c+ U  j8 ~
    char ch[2];
- m; i" b6 K9 p/ b" E  i. F, A9 Z: s5 S. {: _' @3 U; V, x- \9 I% H
* R5 g0 _' ]/ o4 t

+ r/ F7 z; h0 c& t    upp_interrupt_count  = 0;5 q! y, t* v5 ?/ M6 ~
    upp_error_count = 0;2 D" s1 B- y" [( V

+ H) H2 Z4 q! l1 J/ h1 a3 |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 M$ Q3 l, C* |+ ^    // Initialize data buffers8 l3 H+ f$ H; M! ~! |( o' R$ P
    for (i = 0; i < upp_frame_size; i++)
4 ^2 V' F4 A& ]1 D- E    {
4 e  ^' V" c* d8 b9 i       upp_buffer_b =i;6 l1 f) b2 O9 Q( |7 `' b
       upp_buffer_a = 0xDEAD;
1 }% I/ n  P9 S5 x; Q' {    }
- ^- ]" n% I5 D# Z$ [; f, _7 x9 J  m, u) L" {/ M( I/ \; q9 K: I
    //for(i=0;i<1024;i++)6 W8 m1 N/ \/ z; `3 V/ l. }4 X- {% j3 k# E
    //    temp=0;  N$ v( M* `( G5 v6 ?) b

5 _% F8 C$ }3 X$ s# |2 j    //UPPReset();
1 W" p- C$ i9 |; `- i4 X/ `    /*启动UPP DMA传输*/% W8 i: D  j$ E. X' {
    UARTPuts("upp_prog_dma_i\n",-2);! E! s* x: J% w( T6 ]* G8 _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 y( O) d$ O, m6 k0 U/ U! j& y    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& x7 N$ h1 F% v% o    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ o; E! B' N# |% z+ X
6 T% t" x# b; p+ z$ `3 ?9 b
    UARTPuts("upp_prog_dma_i\n",-2);# {$ p7 b* W* V( e: M# q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ y2 O1 N4 A8 p9 b: \
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 o+ J- ?" H5 n5 L: @2 z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; e  w3 e% S( r; w/ H- G3 V9 a6 v- P4 a$ }
    /*等待UPP传输完毕*/
: U* n5 e3 k) H) ^    //i=0;
7 I: i$ K  g- ^7 r1 x5 `$ a, h    //j=0;
' J# C! |( w; T1 y7 q1 W2 Y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 X* W& C$ D9 O+ p' G7 ?+ m/ @3 F
    {' g+ S* q5 L( m3 n3 e/ o- D0 G
        /*  测试UPP传输的同时操作普通DDR数据! e; k+ E2 L9 u3 p+ |/ q
        temp=i;
9 V4 ]3 a0 M5 v0 f: O$ U        i++;
/ R4 ?) i7 L/ [; Y3 r( u        if(i==1024)
2 Q1 S" `- ^5 q        {3 ?) `" \. x# \2 T1 S
            i=0;2 A2 T  a: w, C+ y6 i
            j++;- N- ^0 q; v3 d7 ]
        }
8 _( K0 i4 \5 \1 |& B- R        */7 |1 I6 X3 C! c, r' [; w9 @/ B

' r0 T+ W" W) d6 u- C$ [       asm(" nop");
) @" L3 w+ y' [. ^' P* e! {! V8 h9 G' t7 m" j/ o0 D
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);( ?! s+ E& j: w9 N
    }
9 O7 f  h0 J/ U: k* @. m' E+ _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/  M& N' k4 D' L/ z  Y
    //UARTprintf( "i=%d\n",i);; R! d  p' o% p/ j' w8 c% L
    //UARTprintf( "j=%d\n",j);
# J" }- F: i: _' e    UARTPuts("Data mismatch in buffers.\n",-2);
, W; x( Z1 k7 \9 I9 X: i    if (upp_interrupt_count == 2 && upp_error_count == 0)
# K! b* ]! ~2 ~( z5 V/ B& e2 O    {' I7 h2 E! U2 _6 V# b
        for (i = 0; i<upp_frame_size; i++), P+ h# a: t9 o, F" N! ^: D
        {
- G, P8 ]* ^7 y# ]1 b; ?6 _            if (upp_buffer_a != upp_buffer_b)8 e) |* A: Q. r9 k
            {
$ I4 g4 D* N  t( _& Q' l% l                upp_error_count++;1 h' G, Z/ D8 H" |4 q
            }8 y1 |* y3 M, S; M/ [$ u1 z
        }
. d4 }4 A8 G9 A1 u9 k4 H7 T" t7 x    }
1 N) j3 [. ~- V3 {1 J9 [5 f. e4 W& J  y: N! j9 S* [
    /* 报告通信结果*/9 ^1 a$ L- w# H( L7 U
    if(upp_error_count != 0)) H% m- N2 D& h/ N
        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 D5 x$ A3 R$ I
    else
6 @; h' n# V3 U        UARTPuts("uPP transfers complete!\n",-2);
( o" W) o( K$ _+ j2 H
6 Q9 y8 c8 S, \& m& g$ ?" Y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 o% D& v5 B0 K4 B    UARTGets(ch,2);1 [+ n2 k1 x" t# m0 G; J
    UARTPuts("\n", -2);
- s! {" v/ \4 q' C. z4 }& q- b! ~/ ~9 G/ _4 ~9 |; i
    if(ch[0] == 'y')
- W# }- D3 {0 i) j( E    {
$ l/ o. O! Q0 I& _2 g  }/ @- @5 b/ H6 U        /*打印全部读到的数据*/! W4 d) |2 p3 F7 F+ r9 d7 u# `
        for(i=0; i<upp_frame_size; )
; I5 R+ k. b) \/ l/ B7 G        {- Y: Z6 I' i6 |3 y  h+ }
            for(j=0; j<5; j++)
9 b2 O; G8 h1 @" }7 x2 Z3 _2 u            {
4 h. L' G% s; _" r' K& o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* i3 Z6 ]1 {3 D- [
                i++;6 v4 I% k& R/ E, E. z- w5 c
                //if(i >= 4096)
  B! V' T# f$ a% i' a/ g                //    break;' h# K1 s3 k5 ^% I) b

* B  P0 ]* A5 e9 P9 m( I7 o$ f            }, ~# }- H6 a7 x: Z$ U$ c
            UARTPuts("\n",-2);
/ q1 ]3 R8 N: h8 G: T8 [        }3 d# S5 B$ ]2 n9 T2 i, i- L
    }' w* u, g( F, v7 t/ C
* o1 n9 M8 M, w# a% X/ I, \; T
}
" d6 E" R7 f" K. `8 u. j: s

/ j! d* D9 B2 _2 ?2 _/ z& T2 M% E9 q3 I! o" a+ \+ _8 `

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* A  n  {' x" `, h, ?

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. r# [/ Q! N4 G, o0 c$ l  C. b! W





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