嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 g5 s; S+ M3 n& s% B+ A4 J# ?
Void UPP_TASK(Void)
* \* f, `/ b3 Y  X) |# S' ~{4 m& c  `9 T! e4 E

7 D- {( _- _8 q8 U% Z  Y    int i,j,k,target_int_count=2;$ o0 ]  a2 j) `' n& R& U$ H
    char ch[2];( i3 ~% U7 v. i) Y+ [" O2 w

- g  I3 D/ X9 |- C$ U1 r( Q. w* i% C: \# j

1 k7 o7 v5 u' ^: l    upp_interrupt_count  = 0;- v/ G. ^# a6 c1 r! s
    upp_error_count = 0;, v, B! A0 ?3 h
4 K6 W, K& f& R( T7 J. R& y: }4 b
    UARTPuts("\tResetting uPP buffers...\r\n",-2);( ^# w  p2 _/ X
    // Initialize data buffers
7 Y! D' X9 n9 G$ L0 h6 P& ?8 R    for (i = 0; i < upp_frame_size; i++)
+ s0 {/ b! c; W8 }    {0 n0 W6 O" }# B: k+ T$ Z
       upp_buffer_b =i;
. ~5 `9 u+ R7 s5 J& G7 b       upp_buffer_a = 0xDEAD;
0 }2 C) ~5 Y7 W7 j  u7 m    }" {, b6 Y% S3 N0 O5 O; ^
8 c; a4 S! {# y# W+ a
    //for(i=0;i<1024;i++)
  J1 r6 B# P' ?    //    temp=0;! H6 _9 r* v7 E3 ]

! Q& E# U7 h4 S& _, }# C    //UPPReset();3 x' q1 Q- x1 Z
    /*启动UPP DMA传输*/7 g, O, v* p7 _5 a9 z
    UARTPuts("upp_prog_dma_i\n",-2);2 X/ R! L) h  c' i2 ~& Q
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  h6 o% e* m* z6 L& {! \( ~! r
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 r1 I+ J8 Y1 Z1 H; {& b# ^    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, r, t% i: T% Y, a: v9 W! W9 s7 E

4 W1 k$ N. S& t$ ^    UARTPuts("upp_prog_dma_i\n",-2);
+ m: r$ \" |# |    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, e, _/ [4 @; S) l    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ b: b. y) e6 U* D    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 [; Z6 ?! t& a% J
2 l; q7 {. A% Z/ B6 g( o! m6 @; u    /*等待UPP传输完毕*/
0 {' l0 @1 D, v5 y5 z* C7 u. L4 ^    //i=0;
+ O; R$ V$ f. _: ?: x- `    //j=0;
) ~" T9 _: N+ ~& B. ?* I! F    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; d% O1 b$ Z: Q5 q6 C    {
7 b2 h% j! @0 k( Y        /*  测试UPP传输的同时操作普通DDR数据/ ~4 y% D( e2 X) M/ v8 H
        temp=i;
2 m6 s3 f& u0 d        i++;
: \2 b9 J1 ~9 K2 q; J        if(i==1024)7 v  x$ y% s- d0 C8 E0 D
        {
" {+ v. K+ ], y% w! \) c# W            i=0;1 D. H* o% G4 x1 i' o0 k! C/ u
            j++;! M) ]0 e4 j5 A  G# r" H
        }" c9 s2 z( \. L# H2 p
        */
$ j. X$ L! A2 \' g/ @+ j) h( [. o  ]! v
       asm(" nop");
1 D8 Y% [0 g' |9 t. w- T* D& S: J$ Q  n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* Q6 {- D1 b. y# g! [    }5 c" E/ C; u- x# M

; ?8 P6 i  F% ^' ?1 \1 l/ _    /*检查UPP传输的数据是否正确 (loopback modes only)*/! Y9 t$ c5 h0 C; o& u
    //UARTprintf( "i=%d\n",i);( w# U( E1 D. b/ x+ d6 h+ U9 G
    //UARTprintf( "j=%d\n",j);
8 b  a$ A& t6 w9 u0 @- U% W2 w    UARTPuts("Data mismatch in buffers.\n",-2);
+ ?0 x& L9 T; Q( g9 U# v- X  V    if (upp_interrupt_count == 2 && upp_error_count == 0)4 L6 C2 Z' P/ Z
    {
$ b/ f4 B, f( \: B        for (i = 0; i<upp_frame_size; i++). s5 ?1 P. m! r, F9 c9 n. g& K
        {
( S6 Y1 D+ ]# z" p, ^            if (upp_buffer_a != upp_buffer_b)
2 m" N# [% G; n2 z$ q# S: h            {
! r9 X' X: {/ B( @, U                upp_error_count++;
' P- a4 z/ h2 w7 I/ ]            }
+ A0 b1 Z( X" e. c! @        }9 Z8 S( o; l5 S! j
    }
" t" [' U* L4 \; ^$ }3 w- f
6 }/ f# \$ }9 [5 s    /* 报告通信结果*/
. G0 o7 }# Q& {) ~- w, L    if(upp_error_count != 0)8 p0 `' F9 U6 S2 Q% j3 h  ]) t
        UARTprintf( "upp_error_count=%d\n",upp_error_count);. y" p( J8 ]. B7 f* U: q
    else
: s. ~  j' n4 c. l8 @) T( w        UARTPuts("uPP transfers complete!\n",-2);
% f) O3 a$ w/ I
0 [& |" d  A+ K: r6 ~    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* z0 ]2 l6 f0 K9 n4 D
    UARTGets(ch,2);* ^; r; ?, b+ P/ N% Y. t. E
    UARTPuts("\n", -2);
" g/ O/ t9 P% k) `; `- z& i7 }3 J, Y/ D" Z: ^
    if(ch[0] == 'y')4 c- v0 ^9 ~( G( v( e4 Q" h" H. d
    {
) O$ L, j, B# h6 A: @; T# m; _) f        /*打印全部读到的数据*/: q0 G+ D' k* m( e* O0 P
        for(i=0; i<upp_frame_size; )
. l: U6 V+ R% M        {4 E, j- T" W* t: t4 a( U
            for(j=0; j<5; j++); M" l& T1 W7 q) f! J7 y
            {) L& n8 a3 z4 ?7 C( t
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 ^. I' _2 D/ K6 J, q
                i++;
# H# n9 d& V4 o0 m+ W                //if(i >= 4096)
- I( |& ^2 n* m' @8 l  t2 }                //    break;
* i& D4 k! S# \% l6 s/ K& W2 R1 R5 ]1 @( a2 S+ ~. Y
            }7 b/ |) D# Q* K3 g8 X7 E
            UARTPuts("\n",-2);
# N+ C: Z# H' X7 W0 ^        }
+ N2 q$ Y) i2 K, l+ [& C    }8 X4 l$ o3 ^! R3 g3 c( W5 J
# a, L6 }& v- Z: f  f2 i- ]$ S  a! i
}

- {' f, T  Y3 g9 c6 }

, v3 _; O! {- F! t' M
3 P4 w3 c. b2 v$ ~! R0 Z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ z% g& {) q0 [8 A- ?! \

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 m: i  n8 d- V" ]




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