嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 i" j7 Y9 c* |  K& u2 H; T
Void UPP_TASK(Void)0 A) M! Q* S' s, ?. \! _* u, s3 o) @
{. t/ @, a. \7 R3 B' E

$ }2 h9 ^$ U! Z; R! `. `' A$ h    int i,j,k,target_int_count=2;
. c( u- Y6 A* p$ Q4 F" R    char ch[2];8 ~% p. j5 Q" q$ m8 K# b0 I
9 ]3 R" V5 j1 f+ D: v

9 i6 ]4 B" Q1 Y9 z+ d6 \' X( h( J4 e+ m) U5 Q# w+ k
    upp_interrupt_count  = 0;
4 N, S6 }2 J/ y5 j- ^    upp_error_count = 0;% H1 Z# S8 `1 D' ?

) k. k  P, i$ P& |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, N' I: [9 ~. o    // Initialize data buffers
4 C8 R. ~2 U7 ~9 d3 @( q4 r    for (i = 0; i < upp_frame_size; i++)- U: X# }) n; I- r
    {2 j6 x( d1 F* N* |
       upp_buffer_b =i;
3 U1 B3 {% b2 y' M& x& ~2 W       upp_buffer_a = 0xDEAD;0 [( h' C9 J$ `* F  ~) s* d
    }
( h$ w3 }+ ^' X' _' g% |2 x! T" p. Q1 C
    //for(i=0;i<1024;i++)
$ Z: Z; X) Y: a, D0 {% Y) F1 e0 v    //    temp=0;
* j, p/ K( a. m! j% [" j& w& c- K8 e- f: \# P' j
    //UPPReset();9 j/ z; ?- k5 I
    /*启动UPP DMA传输*/
$ M7 V% K) {! a& h& _* Q, V    UARTPuts("upp_prog_dma_i\n",-2);) R- l* u$ a: Z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;2 s# c' l1 w5 f. w
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! l$ t7 I7 x4 L2 h( w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 f1 [- h3 t7 r' F. T
) K. J3 [0 M& @    UARTPuts("upp_prog_dma_i\n",-2);
+ N/ T1 n0 }# ]& @" A    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 ^) A! F1 q  k# `    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ m% g& z, g  `+ ^: k
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T/ }) j& @& l0 }! u6 d8 b; `, i; V$ }
    /*等待UPP传输完毕*// G- u  x# T, Q0 {% H; ^
    //i=0;
+ ]) ]/ @4 D' r; o/ R! p# M    //j=0;! c7 h5 u  ?& g. V2 s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* F* e4 N6 P' h. W7 Q4 {
    {6 D7 G9 t# \1 r
        /*  测试UPP传输的同时操作普通DDR数据
7 B! ^& I1 [: f1 w        temp=i;; l5 b0 A8 O% f+ _
        i++;' N6 N$ S" x/ f) h
        if(i==1024)
1 `/ h) d' P2 J, K; _- R* I        {
# G$ n3 t0 G7 d% [6 m6 [            i=0;  I' y7 h% O# Q2 y' B
            j++;
9 I# M- w  a- i0 D/ [+ S0 U( k% t        }
, ^, h: ~6 b( k) i: W7 O- ?3 H1 y        */
" ~3 p0 `  G, N$ S. ?. _1 U* Y! y8 r+ ^
       asm(" nop");4 s; O0 W5 P5 v2 q* n2 Q5 X0 t

2 f9 S, ]  X% r3 ?       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  K! f; g: R0 c2 c    }0 K) A- A) ]4 U* g* g0 P

" p6 N& }/ ^1 m    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 r5 ~/ K8 m+ ?
    //UARTprintf( "i=%d\n",i);. D4 G& N8 ]$ C, X0 W5 Q) C
    //UARTprintf( "j=%d\n",j);( J( M" s8 D; A; f+ f
    UARTPuts("Data mismatch in buffers.\n",-2);. g* |! N& m5 j' C8 \+ S8 q
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 [* ?- N, S( X8 E3 B' K( Y    {
- u3 E5 P5 j# Y        for (i = 0; i<upp_frame_size; i++)3 D+ s. o; {5 m* i8 Y  f; b4 [! i
        {2 M" N. U% R1 i& M+ B5 ~
            if (upp_buffer_a != upp_buffer_b)
5 c/ \/ X4 d2 H( F9 J/ `            {
5 A( J( A- s* S" h0 F                upp_error_count++;
/ |  \7 D5 @' A" |, j. I            }
* [! b0 L7 Y& h% ^        }8 o; \6 I1 C7 M, ]1 G% c
    }
: |: K  B! [, d  a2 c9 V4 |
) J$ i! n/ [) d! a$ H% z    /* 报告通信结果*/
5 v6 ^* G) M- y6 O5 q, I& i! b' P    if(upp_error_count != 0)6 U1 r: M8 W) m* O" [
        UARTprintf( "upp_error_count=%d\n",upp_error_count);* z- c* i, P9 r/ {, c
    else
. P3 d* [2 D% u        UARTPuts("uPP transfers complete!\n",-2);
* L. c! d2 h* A+ ]6 a; V4 u
) I$ k0 E6 l+ q& n. I" S- T* b    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 n1 t' i4 }  P3 E, D
    UARTGets(ch,2);9 b7 m+ c" p6 U  h$ l/ {  w/ H
    UARTPuts("\n", -2);. N4 T% P- t; ^

) z0 U/ I3 v+ x9 \. Z    if(ch[0] == 'y')
( Q3 G9 N. \& _    {- u! x8 ~3 ~3 b+ u3 X8 J. k
        /*打印全部读到的数据*/
+ \* `1 w# R( m" I" E" \        for(i=0; i<upp_frame_size; )
1 O7 ^' r- B0 W        {
+ g8 V6 [& I, K! R            for(j=0; j<5; j++)1 U( g: g- u% h
            {) V5 G3 W& H, a$ ?" k' m% z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' D( X4 T$ @# U' A0 U% c
                i++;1 R+ ]2 n. r1 o+ _% n
                //if(i >= 4096)7 O1 y  P+ r+ j: p
                //    break;
% M- r' S8 Z, r% |( Z+ }2 J; q: K& L0 U* v3 G8 D
            }
8 A/ ]0 R- C/ I1 d$ N5 U            UARTPuts("\n",-2);" r  a" Z# h' T
        }
; \& C! X- [' }/ C' b    }/ o: P/ P2 e! e- I

" B* d+ N) m- I+ L9 U2 M}

& J; S0 \' K9 u( N0 z! t" ?  d

6 A9 _8 {  N' G' V6 b% j1 s7 q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 O1 e% {* b+ H" P3 x* i

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 W* H( M9 G0 Q8 X





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