嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) K! j* r) g' r) k2 w, j
Void UPP_TASK(Void)
  k, ^( R1 Q6 m' [) A' K9 B5 W{
1 N. K% L, U( e8 _* o7 O4 u
; H) |, s( [8 j1 N) r8 b    int i,j,k,target_int_count=2;
4 k* X7 {) U/ V! s- {8 O    char ch[2];" Q( b% p" X# l( v* s
$ q6 t# o' T. a8 j1 e, I, h

3 |' D6 J3 |% |$ c5 s0 t$ ]' k( _0 [- \! z
    upp_interrupt_count  = 0;/ {+ q! l- O8 i5 U# k" X8 H
    upp_error_count = 0;
# D' k1 ]# `% ^% c# c
2 U7 w7 z9 h8 {    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% Q0 r" p6 v1 [* O# v    // Initialize data buffers
4 R0 Q) q2 [. @) a$ a1 F6 x) y    for (i = 0; i < upp_frame_size; i++). j  e' K: p4 ~; x4 x: n( E& }
    {1 u% o, @9 w1 J/ s
       upp_buffer_b =i;/ o8 b2 T- W! a  F) U$ ~
       upp_buffer_a = 0xDEAD;. g; g2 Y1 q5 _7 l+ v
    }
( ^9 Z) S6 `5 W/ t/ b1 @( U1 h- Z8 o9 ~' }
    //for(i=0;i<1024;i++)0 n! l& m3 h( M0 N6 H% [
    //    temp=0;
' g4 q3 H% [4 P' `7 q% \" W/ p# H3 K" K+ v, M6 g
    //UPPReset();
" t) j+ f2 ^' A' @    /*启动UPP DMA传输*/
( s) |& q: B9 J3 n( ]3 ^! W0 K    UARTPuts("upp_prog_dma_i\n",-2);* b+ U, t5 l+ i7 n& t( y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# i. ?1 k+ }9 w/ K: t, l, {    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# d3 T) N% u6 Q9 h- g
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  W* n- |4 z) O* v+ E

6 v5 m0 z: H6 K    UARTPuts("upp_prog_dma_i\n",-2);
( o3 `& ?* ?( a3 ^: B    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( F8 p# C; _! c8 z# Z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 m4 E6 {8 y' L) \& k$ A2 i5 v9 s
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 J" v# X9 F% \6 X$ z
5 S; E2 p3 t8 x" T7 y* B    /*等待UPP传输完毕*// ~1 N1 m6 s5 ?
    //i=0;* O! H& A6 l. C
    //j=0;
9 i% h7 d4 ~. i3 G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' R5 e8 X) @+ a1 {8 P6 [    {" X5 V4 E1 n( y
        /*  测试UPP传输的同时操作普通DDR数据, }& ~9 H0 o: z$ s
        temp=i;
. ]/ G% A* Z6 J$ d        i++;
8 S6 E+ b$ \! ?        if(i==1024)
, {1 ?1 |) `6 }" L0 V/ G        {
) S* v5 f1 B; j" h3 Y: }6 l' _            i=0;
" Y2 M6 o: J- ], d! ~* |  {# a/ X9 H            j++;
  A# d; k* C! X- k5 E        }! S6 ?9 s  }6 j3 S
        */) D. D% B, ]/ ^' m

8 W0 X# O/ e# }' @3 _( Y       asm(" nop");
5 V1 I9 J- J. q" c( X* m; J. I8 X" J# N" |
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 C0 v& D) j0 M+ J1 U0 \" R7 q    }& H6 y+ P, t+ Z2 f

. a) Z- F5 {+ R' Z    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: }" r" Q( z0 n# ?2 H    //UARTprintf( "i=%d\n",i);( ]5 l! G4 s$ w
    //UARTprintf( "j=%d\n",j);$ _. c% s8 P) j
    UARTPuts("Data mismatch in buffers.\n",-2);3 E5 h3 n# @+ y2 @2 H
    if (upp_interrupt_count == 2 && upp_error_count == 0)
; Y* V0 G& _# J) U5 L$ \" E3 k2 F    {" V! D  B6 _% t& n4 o
        for (i = 0; i<upp_frame_size; i++)6 n/ W5 }' s8 o
        {9 X. P: i) ^+ v8 L: ?
            if (upp_buffer_a != upp_buffer_b)! o4 x6 L8 ~: i
            {  g1 c7 L4 C; u  M6 B
                upp_error_count++;: P2 c/ y! s! @& `4 o5 q
            }
. V! b. g/ i8 f- U2 y        }) P% q: F& v$ t' y
    }
3 ?' A" p8 D/ V5 O; u. B4 a3 i8 t, X$ b* v. ^9 k
    /* 报告通信结果*/
0 {( t: O% X0 H$ h    if(upp_error_count != 0)
  g+ @" s& M# M1 l        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# i2 H2 G6 K3 `& k7 t$ g    else
# E5 H- w8 d( H2 \/ s        UARTPuts("uPP transfers complete!\n",-2);
6 i# ]7 A8 g2 h- [- X' s& f8 Q1 O
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ `1 M; L; t4 Y% W; ~    UARTGets(ch,2);4 T! N% q4 B& n1 z" F/ S
    UARTPuts("\n", -2);
1 F, s* k$ a2 O' ^) i' c, i4 E/ \+ I8 t3 I0 N
    if(ch[0] == 'y'); J* `- o" Z+ d  a; q
    {) S5 {) v, G' Z. `
        /*打印全部读到的数据*/
" E3 e( B5 g- b: g8 j1 f        for(i=0; i<upp_frame_size; )
, `9 ~4 }. k5 Z        {$ b8 d" L0 a( D& M$ f9 N) _
            for(j=0; j<5; j++)
8 c7 V8 V1 C$ K7 C' T2 Z3 ?            {
3 M" K6 Y; y( Y6 ]" L                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 H3 @' c5 w  m* r: Y8 ^/ b                i++;; Z& B: R" t9 r- f, D
                //if(i >= 4096)
$ f- j: l& \8 w% a3 j+ N3 o                //    break;0 u0 r- x8 Y1 g- W4 q) T# o& R4 U
/ m2 w7 p* I( g
            }
( a* o# r. n8 |* N- w5 r            UARTPuts("\n",-2);# Q* ?0 g$ ~9 R6 \/ C% |
        }
) M: N. ?+ F+ P$ J+ x  t  d    }2 j0 Q& z+ q: _. r

9 \, V/ e, R2 @- X9 B) K5 [}
1 J: `8 D8 I% v* L% X# m
0 a. _. c4 \9 ~' A" }5 s% Q
8 v4 b) ^4 @* q! S7 C

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% Z  r! H9 l. E2 r7 J2 A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ Q, ]" {: A' A* a) ~+ c% ?9 G8 }





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