嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' Y. r3 G5 r) F
Void UPP_TASK(Void)
6 K+ L$ |! t. K{- M! X/ Z; \. g* R

9 f' M7 n* o2 C3 ~    int i,j,k,target_int_count=2;
+ h, j5 t4 O7 y8 ?  Z    char ch[2];
5 {# K0 B" ?+ v1 K, j" ]5 K6 {9 Q5 G; {6 t; l& y$ G) P

8 `8 H# u7 [* u; j0 P4 U
& @% a% y0 u7 |    upp_interrupt_count  = 0;
" W. P0 v/ }2 O" K$ n    upp_error_count = 0;
+ _* t7 }/ T/ `9 y2 W2 ]7 Q2 Z& n) V5 A3 p( d9 z
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) i: U, f8 s6 u2 E$ G. F    // Initialize data buffers
. X4 A9 A% \0 C( z7 _    for (i = 0; i < upp_frame_size; i++)
! @2 U* z  w/ p% t' [    {4 z% v0 A, B- J* S: t1 C$ e4 T" y' {
       upp_buffer_b =i;
/ K' e$ Q* |; V: E% k5 h  b1 F, l, B& ]       upp_buffer_a = 0xDEAD;3 O- K3 e" O7 x9 X
    }
# |' I; }" N6 J7 }
$ U9 C# A9 n. z! R( x    //for(i=0;i<1024;i++)" o! T9 A( M; i. t+ P% z
    //    temp=0;1 ~# X  q. @+ F
( l, h' l- Q: l+ Q2 e0 h
    //UPPReset();& K1 i. s# K+ @4 x
    /*启动UPP DMA传输*/8 d' `* [* Q* X$ W4 O1 d
    UARTPuts("upp_prog_dma_i\n",-2);
. y' C3 I- U$ q5 o) b    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* Q; L) c$ ?& ?* p/ Y9 U
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ M0 U6 X1 a7 v( c/ R+ K6 p
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 \+ R( ?2 ^. J
" W5 U  s0 [) I/ I* S3 Y& e  u# ?    UARTPuts("upp_prog_dma_i\n",-2);& i' Q6 F1 [- Z% _$ k
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& }# B: y. |! H3 ^$ v; Z6 n3 v7 X" M
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: v- s* X, h. G- w/ H
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. ~: x. H3 q% C9 H5 O9 K2 J3 D
' y4 T5 g& d6 x7 g  |    /*等待UPP传输完毕*/
; k, ~4 T' u+ ~5 r0 R0 |    //i=0;
0 C: w  S8 ~- p! d" \    //j=0;) I+ \7 S: \& A* l4 M5 f0 H6 \. q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 Z- e( U, A" l- e    {! A. `  k, s  `. A/ G" P* L+ P- ?
        /*  测试UPP传输的同时操作普通DDR数据
* s% d* U2 w# }5 W        temp=i;
7 S# V7 U" e5 K: Q& _, x( \4 e        i++;
" k  N8 m3 W) c) }5 V; M        if(i==1024): z) h0 V. K# [
        {
# h* g  ?4 J! g* Y$ t7 H            i=0;
9 ]6 m) P5 \" ?+ E            j++;
, i6 A6 H8 L' A; E        }! y* k$ E" N7 w* r- Y3 U5 A
        */
- t1 n) O9 T" j
1 R  c9 d, L6 i5 B6 }( ^       asm(" nop");; N3 i4 d) f2 P3 \! c* c

5 ]6 N' j. S" _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! U/ b* q/ A6 Z$ ?: j4 \    }6 [$ o/ P5 r/ Y$ }$ j
% |# M0 ^- p3 z+ C9 H( {, l2 m: s
    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 {8 r  @: I$ P3 D; m7 y" P
    //UARTprintf( "i=%d\n",i);
; q- r$ p1 t% z  j% D0 ^    //UARTprintf( "j=%d\n",j);0 c, \# c. j  }$ S  Z3 q
    UARTPuts("Data mismatch in buffers.\n",-2);& i4 R$ f: |4 F7 u
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 W" o/ Y# r) M' ]* ~
    {, O, J& ]6 ]9 ?; o4 u# l+ M% Q
        for (i = 0; i<upp_frame_size; i++)
. ^  T/ ^: i  J* r1 D3 X        {* c' e% z) a& Q& |. `$ u5 P4 ?' O
            if (upp_buffer_a != upp_buffer_b)
$ j0 f. r+ q% Z( C            {
  n  W( \+ U% _1 o5 k                upp_error_count++;) X- v- f$ n- H% k3 [& y" H8 h6 T
            }+ o$ C& x, m' l+ K4 u" i
        }
# z  F( m& W0 e/ N! {2 z/ c    }
2 a( c! [: K" R1 u+ ]- c$ Y! D9 Y0 f2 t9 h$ e
    /* 报告通信结果*/' q& l8 U  A3 F+ G: Y
    if(upp_error_count != 0)
  f( D2 X* N  E( {+ e) m% R        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 A& j! H: I$ @& @
    else
5 i8 p( P$ h8 O' y" b" X        UARTPuts("uPP transfers complete!\n",-2);; _6 }, j' \! _
: }4 l; x& e% |5 g
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* r% G5 @3 O( j9 w6 [% M    UARTGets(ch,2);/ s. m5 O8 J0 Y. E( O3 u
    UARTPuts("\n", -2);* V  j9 `: g/ t

( C5 q* W) d" R* k! K6 i* g; _: q    if(ch[0] == 'y')5 h- P9 `; S4 ^0 ]3 X
    {* r& `4 I; P* k9 [
        /*打印全部读到的数据*/. z5 j% R+ V$ T4 ~
        for(i=0; i<upp_frame_size; )# I' T# l0 C4 K; f; y1 x/ L
        {
+ ^& N# i# B0 c6 X  d1 `& a+ r6 {            for(j=0; j<5; j++)
. u( ?3 n* W7 u- ?4 l. I( n+ g            {
, L0 f/ ]. b5 K/ u                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);# v/ v9 d3 J; y& ~1 @
                i++;
) L8 Y* O/ S7 `/ N' V% x                //if(i >= 4096): k$ S! N8 i2 [# Q( _3 E
                //    break;5 u( v3 p0 e" W/ F: v4 R' U: B

% @$ M2 ?1 C" Q5 j6 x7 w+ f            }0 w# a6 W* e( D+ L+ Q
            UARTPuts("\n",-2);! b* T. ^  f* ?1 D; ~
        }
. V$ I# N& s; n9 }7 b    }
$ o' a8 b! o  u( Z" }- U
8 h& k/ E% l2 K% E4 I}

# y3 P! \2 J: {* n

( B0 b0 b3 ^" _. {' L! }; \# o  O( p( D9 }) z' a9 X! ?, f& h

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 Z8 y: m0 }1 ]
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 k7 a! ~- V2 P  q+ C8 h





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