嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ {7 K' A9 M: c2 F2 \) K
Void UPP_TASK(Void)4 c9 I1 }+ Z& {( x$ N. P; u' O
{
1 u5 E; ?9 V7 M) t2 X& R" e( I! K- b, T# e( }
    int i,j,k,target_int_count=2;
( Q  C0 q, C; K6 d    char ch[2];
# _2 S$ T' y0 q1 v; j( a9 {, n4 R: w' v. Y
: ~) S/ @, P. G2 k+ u5 u8 V
. h! D1 o7 R+ _/ i
    upp_interrupt_count  = 0;1 x, `, e  T* i' Y  y
    upp_error_count = 0;
) `6 e+ \2 e% P! m7 [* S0 }: [5 G
$ H1 T9 h; H2 K# S& L    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 W# q. s, ?9 U0 u9 a    // Initialize data buffers( A. y$ E, e5 v3 p( v, E$ D: V
    for (i = 0; i < upp_frame_size; i++)
. j3 r2 B$ Z7 [( A3 D) d    {# y1 j; d! D6 O# Q( P2 @3 X
       upp_buffer_b =i;# h8 m- [& R+ n: Y" X6 k( d! m! X2 g
       upp_buffer_a = 0xDEAD;
4 K2 q* Y/ x0 x' S1 |0 ^/ e    }: b$ }- q$ t$ k8 R

# s5 f3 H4 ?( q1 w, ^$ \9 ]% K3 J    //for(i=0;i<1024;i++)  j% a2 W' Z7 R
    //    temp=0;
9 T5 p/ _( x' l6 q% }% N
- Y) \* @8 a6 h2 u& g+ k% K" G    //UPPReset();* E9 y- g. h/ m' q. k
    /*启动UPP DMA传输*/
/ Q2 f+ U3 L4 Z    UARTPuts("upp_prog_dma_i\n",-2);0 j1 z) K+ H, P: ?3 s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! y' p; V- F2 A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! D! |' s# i6 {) d; U9 w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& M& |8 Z9 Z$ m7 q/ g2 q* y6 P: s. E2 E/ B  Z
    UARTPuts("upp_prog_dma_i\n",-2);
4 \3 S- p/ F6 |" w8 J, j1 `    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: l: ]$ k( C( ~& z, f    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 `+ m& `" u7 n4 M    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 `' r1 @$ m4 L- _0 u
7 W  r2 n0 t  r+ G
    /*等待UPP传输完毕*/2 z4 r8 p$ Y; O; N
    //i=0;- P- N3 Z; F# j
    //j=0;
( J4 ~" b, |  |  p2 e3 |) H    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  z' Z2 f4 @4 ^! `! f' h$ u1 g- U    {
4 _' p/ s! |8 C- k& B        /*  测试UPP传输的同时操作普通DDR数据
" X; T  |: ^3 ]2 _0 L% a        temp=i;7 u/ V! N' X* k7 {6 E! e$ E* `
        i++;
7 ?6 G8 Q& d7 X4 L4 u        if(i==1024)3 h; [4 G; {. A8 D, A
        {5 |( g' ~1 n4 s- I% k
            i=0;
9 T7 Z  j3 x8 `- g* V            j++;
! C/ y' K2 @0 F        }; W9 q/ s7 l- D& q" n8 Z# c/ n6 h- Q
        */1 F: N# b& s2 m3 k  H
3 L+ i, y. t$ R) {# L
       asm(" nop");
8 f) f  Q9 H; v4 M8 _3 I2 M& {3 n9 N, w
/ {5 C$ J# Y6 e7 d: B       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# B( Z! W2 e. z: L    }$ e6 L2 a; B0 ^1 |/ }' Q9 Y
" }. V/ H4 `8 c+ f7 g! i
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; m' j' _- {8 b) U$ }* g
    //UARTprintf( "i=%d\n",i);
- @$ k1 f" L$ L2 ^- p    //UARTprintf( "j=%d\n",j);
* Y/ {3 v, J, _; _$ t$ N! z    UARTPuts("Data mismatch in buffers.\n",-2);& Z+ s# M; X: r, H' Y1 f. Y3 M
    if (upp_interrupt_count == 2 && upp_error_count == 0)8 c4 L+ u# {& n, m& @6 ^
    {
! {) g. B" }' ~  G8 R+ h        for (i = 0; i<upp_frame_size; i++)/ K" A0 h& @$ T% P1 {1 B
        {* f+ m1 K. E7 z$ [0 L( G
            if (upp_buffer_a != upp_buffer_b)6 K- y; |! ?! ~" U! B  @
            {# X5 f# A' ?) G7 G2 V
                upp_error_count++;
: q/ v. _6 Q1 w, x) A$ H            }- P( b2 U3 m+ E9 i
        }( R2 K1 G& s" L4 p; Q! \4 h: f2 A
    }
. |. G  g1 d- ]  y( l" J$ G4 B" Z- M
    /* 报告通信结果*/8 X* m* M: D) J2 s6 u3 ?. P
    if(upp_error_count != 0)- v3 b# S4 U3 p+ R9 o! v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  w: a) C) {* T% w# M  Z
    else
/ ^' e) P$ p% G        UARTPuts("uPP transfers complete!\n",-2);
# p7 Y- b8 u( B6 Q: [" N* D4 a
: z% @/ S$ p8 l4 A) d    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# Q, M0 o! W* z- x
    UARTGets(ch,2);+ h5 f7 I  W9 K3 M+ w
    UARTPuts("\n", -2);5 B: [+ p9 l/ `2 n

5 q/ Z$ d- `7 R7 R, K    if(ch[0] == 'y'): S7 N0 P1 R  R2 g  v. _
    {
4 w1 |8 c& w7 B6 `. f        /*打印全部读到的数据*/
, M# Z. V9 f1 R8 Z- F, d# U        for(i=0; i<upp_frame_size; )5 H8 K9 F6 Z7 y5 x) i/ {5 K- s* U( v
        {0 s* s% ^6 R, e
            for(j=0; j<5; j++)
$ X# W* S0 M6 H4 _+ }; k            {' m! m. _, ~  f7 }
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% s3 v3 W) |' G" G+ L
                i++;
9 L, C/ j$ m, s                //if(i >= 4096): r1 y7 F) ]3 V* ^
                //    break;! ^4 ^  ~4 l; V& W% z2 a8 r

+ K  r. w! w* X2 L. j            }7 W. n/ m9 X2 I7 S/ a3 N# n
            UARTPuts("\n",-2);- q0 J8 f' R1 R) X4 l$ H
        }$ |7 B1 p( T: z# S" p8 k8 z& q
    }2 q1 n; t: b& t9 b: _6 s
- m. [- Y+ P0 ^, q' ]+ n! A* d
}
$ y. \7 H2 z+ ?" _) W
( `0 l) h& K( h  {. ]

, G" X" f* v5 x/ Y' G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) @& H! ^; a$ h, J' l+ \
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" n" q3 o' C7 w# A& _




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