嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& @6 j* T7 c4 W3 ?
Void UPP_TASK(Void)% e) {/ l- s* D7 k) J  {5 @: K0 b
{
2 k& h7 v# V7 ^6 B' X$ a3 H/ f! t/ |" j  h4 H3 z$ J  f
    int i,j,k,target_int_count=2;
. A: X  x9 D. [; x! E6 M    char ch[2];
- P/ B2 ?1 y/ ]: z$ `* Y' c) T4 c1 \+ j8 m% I9 v
* j: G! L9 A3 U5 c
7 Y  s2 G0 Y! W
    upp_interrupt_count  = 0;
7 k  e8 e4 f- x& o1 |8 B    upp_error_count = 0;
& G1 [) D! L, q; w( [
4 ?1 G, E2 c, ?    UARTPuts("\tResetting uPP buffers...\r\n",-2);  C1 }. C" Q, l9 _
    // Initialize data buffers
/ W) x, x0 Z* L) {& |# m8 W$ a    for (i = 0; i < upp_frame_size; i++)
  ^( j9 d* Z& `) `( g7 h( K: u    {
1 d. f6 r: j& n4 w1 _1 I       upp_buffer_b =i;4 M, g0 z6 T$ y/ L6 h# y8 i3 U
       upp_buffer_a = 0xDEAD;
" {6 b. u& y. i" B' ~$ W: H9 m    }
5 Z/ }( R3 F7 A3 [: ?, O) f- ?3 I, M& A. v
    //for(i=0;i<1024;i++)! t- F; F! s9 X3 K7 Y
    //    temp=0;! P8 e$ H' a0 y/ n9 E8 ?

: x, G! _$ ~; w4 v7 m    //UPPReset();2 C, o4 I# {* l9 ]$ B
    /*启动UPP DMA传输*/& {; f, h/ K& J: B
    UARTPuts("upp_prog_dma_i\n",-2);
+ K* f: }  E) a5 x  p2 v" d    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! ]9 @  y2 `/ ?
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" p' B+ z9 e- @! m: K7 L    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- n3 o) b! q2 j- W( }7 Y& f- o5 Q, l- a
6 u6 W# V& Z7 D. Q    UARTPuts("upp_prog_dma_i\n",-2);
( |+ x. k2 d& _    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' ]7 w- j- E. b; ~: [. V
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; R7 ^8 A- y- H* O& G- A! ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* }) k1 i; F- G; e

7 D; J. c  t: i    /*等待UPP传输完毕*/
" ]3 p, v" d# E' m" e5 ?, u    //i=0;  `. k" I9 e$ K3 L3 v! a
    //j=0;
, a  a( l. C1 D8 L% I6 p" h    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 ?8 ~) Y- G, w0 D% ^7 ]) L* @    {
* e: y9 F3 `9 }- V$ }1 R6 ~8 ?        /*  测试UPP传输的同时操作普通DDR数据# o# n( s/ v% n" m
        temp=i;& o& i( u4 X8 @. x+ S
        i++;2 k8 M9 {  H8 W# I* k  u" V8 ?
        if(i==1024)* m! U6 G$ A7 |' e) W, l. t
        {
; w0 x  y4 B% L. A. V% q' V$ @            i=0;0 p% R( ]  b! Y$ t+ ^
            j++;
  y# d: W, z* d- F2 f        }
2 r: @: M& Q2 t% z        */
0 V! E4 I  W6 ^' X; k* F5 \1 \) V" l: S7 w! ]5 k  e
       asm(" nop");
7 p! e4 A( e# N' C3 p3 F: U
# a3 c0 K4 V* v: W! p       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 W, a+ m. ]# Y8 b# m7 o    }& @" h( {$ I5 m
1 {0 M. k2 K3 P4 ]% Z. C
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 b, {! b$ \$ W& U* ~$ w    //UARTprintf( "i=%d\n",i);% P! `/ M5 V  T& Z& M; r
    //UARTprintf( "j=%d\n",j);: o0 ?8 @, c) Q6 J; q
    UARTPuts("Data mismatch in buffers.\n",-2);
7 C: q6 A0 v! `. o& a, G    if (upp_interrupt_count == 2 && upp_error_count == 0)5 ~# d) _  x! q( V$ f8 X% A& c
    {
" d" U$ C# y+ x2 o' l4 V# ~4 O        for (i = 0; i<upp_frame_size; i++)# u. U. [! p$ \6 w& Y. M
        {; v5 t1 v/ b1 A, J! M! ]5 q
            if (upp_buffer_a != upp_buffer_b), b% G& M) {: \% {
            {
$ p8 }: \' f5 ]" `+ W                upp_error_count++;
8 @, N0 |( Q2 Q+ `5 W            }3 ^! W& L; f1 `) W9 V- X9 T& R$ U
        }( X: w3 R: n  C1 r8 i7 I3 Y  i- {
    }
; T5 o) [2 P# d% _5 |) r& l% i- p: b, D5 ^& R
    /* 报告通信结果*/
' u/ ]- Z  N2 G; C! S1 d: G    if(upp_error_count != 0)
/ Z( G9 t) D& m+ N* A% |        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, j: M  Q8 x0 l& ^2 v, u    else/ A6 O3 S6 G1 ^1 w' \  f
        UARTPuts("uPP transfers complete!\n",-2);
, R5 ~% H4 n: R
# P" T- A% ~3 M/ I* h9 V" L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# n, p0 g5 F0 k7 k! b- }
    UARTGets(ch,2);+ B, N0 e- c$ C8 y, y- y% @
    UARTPuts("\n", -2);
/ m7 x# K! T/ Y% D( l7 H9 |; I- k5 f+ y6 B: J" x
    if(ch[0] == 'y')
& l; O/ J& G& O, E8 u, g    {
4 ^5 J  n% U* D! |7 h" \; h        /*打印全部读到的数据*/
+ |' Q) k/ Z! l9 t        for(i=0; i<upp_frame_size; )  M+ z( m# C5 n
        {' `: o4 }+ f. w" {3 s
            for(j=0; j<5; j++)5 {: ?# l9 n7 R7 |  F+ ?
            {
1 K5 v4 H2 A6 g+ w                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);7 s* F* s  m7 M, [  [, y* t+ {# ~
                i++;
: S$ K- c, }' X3 K8 f                //if(i >= 4096)3 A4 p' s- l7 J8 x8 k( M
                //    break;0 Q, A8 U3 N9 N0 q1 Y4 E

+ S) c8 n& ~$ w/ [            }! e% q0 R1 D& z( e
            UARTPuts("\n",-2);
$ p) l: ~: s7 e        }
' E5 W1 b/ T- F# L9 I+ }& g    }
) U/ t" X" h* m* }. G
/ F2 r4 T& g$ M6 V- E& m4 Z}

3 v2 S$ N: G2 Y  M  J# e

( k) y+ S+ }( \3 B+ ]! ?3 r; _2 v8 ]5 V, f+ L0 A2 z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" Y( z2 b6 G: ^1 Q/ Y9 B* A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: Y9 p$ n9 [2 Z) ]7 w





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