嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  K9 a7 ?8 X+ U; Z, v% @. H" c
Void UPP_TASK(Void)
! h4 Y* p( o& S4 ?{
7 |# @) S7 D4 N/ O! N" q
$ Q/ S) e% A% w9 e$ ?9 n3 {    int i,j,k,target_int_count=2;
* d0 S. l: S4 W- P! _3 S% c' Y9 y; H( w    char ch[2];
$ N# l* I( h0 H3 ?; [. c/ k# G6 ^2 z$ y3 m( N

& }. N2 ?: L$ U, E0 O$ Q9 w" E- E" j# }$ ]/ A/ ?7 S, E
    upp_interrupt_count  = 0;
5 ]5 L0 L; r# O& f% Y! d9 A8 j8 m0 I  d    upp_error_count = 0;- ?( w: W( `1 V* P. p
8 p. y  M, ?; s- u3 ?3 a
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' r$ j' x4 i  m% R1 c+ |& L+ r    // Initialize data buffers
/ ~  f1 j# n4 ^- e& g* x    for (i = 0; i < upp_frame_size; i++)) s. U1 d* _( J. Q- o7 m
    {0 {* v1 b3 U" Q3 z
       upp_buffer_b =i;" _' j$ r: t3 x0 }6 c0 ~
       upp_buffer_a = 0xDEAD;- F( `$ o. [  v% q
    }( G- k5 ~; P" {; C/ Q
, p0 {. S6 u9 E7 O' E" L
    //for(i=0;i<1024;i++)
5 t/ I" M6 I/ w" o9 \0 d# ]    //    temp=0;
( |+ r% g% @0 Q& {$ v# ^
/ Q/ v8 s  Z/ i/ r  P' w# N    //UPPReset();* h3 E( l6 a* G+ {5 M
    /*启动UPP DMA传输*/6 a& p+ r5 |8 N
    UARTPuts("upp_prog_dma_i\n",-2);
/ e. j) y0 p) r. s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* k+ S4 w- l- F  u
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 g+ W0 z* N0 Y6 F5 z- Q3 H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ P& E# A/ N2 [- y

0 m' S. G' |1 G    UARTPuts("upp_prog_dma_i\n",-2);
4 M. s  r! y2 O" p: q    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, J) d0 H$ s6 p0 y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% G1 b0 v, D6 [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ {6 j6 B! V7 U4 ^0 L$ w
6 j% d2 a: _' G; S7 h
    /*等待UPP传输完毕*/
/ k, B4 S) I/ G) l( c( g$ U& q' P0 X    //i=0;
0 K* W- j# a! O# X5 h    //j=0;! q$ V2 v2 n5 U( x( a
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 `( ]" h- h  d    {3 X) N' \+ G5 h, S" D
        /*  测试UPP传输的同时操作普通DDR数据% K8 Q, J- I+ P
        temp=i;( }" ^4 V2 h! K
        i++;
: X6 ~' v7 _. Z: K1 _        if(i==1024): ]8 ~5 |  r' _4 c% p9 a  ?) ^
        {, V; Q. D7 d2 Z6 Q. b
            i=0;
: r6 @) h: P0 U+ b; v            j++;
" |; H. Q3 l  o        }. o5 }+ o' n9 T" i  m
        */% {3 c" S8 j0 I( H# |6 u

( f4 b7 L9 J/ L, @% S6 o- C7 n5 ~! |) u       asm(" nop");
6 m/ j* ?6 @, l  W7 `8 E+ ^
+ V/ W( |3 N( Z8 U* x; f/ f8 a       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 }6 K# x; _, @" M$ X+ B    }
* {0 E( H" A$ L* _' X, B) V1 B6 l! S4 Z! J/ `
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& N2 K# B5 p$ T: O3 E( V  U( Z    //UARTprintf( "i=%d\n",i);
6 s1 O! r% t  h5 G. I% x  u    //UARTprintf( "j=%d\n",j);2 B7 p- Q3 Y% y- \. f9 C2 h
    UARTPuts("Data mismatch in buffers.\n",-2);
0 l0 {& E! V- a! ]! W    if (upp_interrupt_count == 2 && upp_error_count == 0); n/ i  T  Q" z2 t4 Z
    {$ R% E5 G, l. U& z
        for (i = 0; i<upp_frame_size; i++)
5 C/ q3 M# ^4 }4 L. R        {
+ h- ~) D: J1 b4 J            if (upp_buffer_a != upp_buffer_b)
8 {2 y& G  K1 r% n, [            {/ f: R5 x% X6 E. _& ^7 a
                upp_error_count++;0 y7 d4 D, ^$ I: O* Q
            }$ m+ J+ E' P* ^5 j5 e8 P
        }) N. x+ w% X: r% z6 c; `
    }2 t. q- y6 _$ e3 x

: L- s) r3 h: _7 ?( ?    /* 报告通信结果*/$ D/ y% E9 D! q* k4 i
    if(upp_error_count != 0)
. C) e, }0 P$ P8 v, B2 b/ O/ f        UARTprintf( "upp_error_count=%d\n",upp_error_count);% m: z1 v% [# R7 t: t% s
    else- t9 q. G4 W. P
        UARTPuts("uPP transfers complete!\n",-2);0 Z- g9 I1 c6 E3 _
- k2 R1 _6 V& C% |
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; M! S& J( ~* ]2 e1 J/ J    UARTGets(ch,2);
4 q* t, `  m1 \3 n8 R* q    UARTPuts("\n", -2);1 A  W5 k1 e  d3 w( t
( z& V! Q1 E  o% [4 `
    if(ch[0] == 'y')
0 v$ E! l  ?8 F  H    {
3 A  k9 c- B3 X1 K: f        /*打印全部读到的数据*/
; w* A; P, M. p% @( V: ^1 [1 I        for(i=0; i<upp_frame_size; )
+ p3 s0 A- z* ~5 g3 _        {
3 ]4 g( @& E2 w5 \  V            for(j=0; j<5; j++)& u9 A& c+ l1 C3 q
            {5 d2 U- W1 K2 G+ U' F7 g7 f4 g. x; J
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. T$ d  K! `/ }7 I! I                i++;$ V  m( E  I0 O; d  G6 Z$ d( R5 J( ^
                //if(i >= 4096)9 k6 h- ]8 l# g+ X$ G# t. v) B
                //    break;
4 m: _0 L: U  Q3 Y
0 P2 C2 y" {. b- A( K- p            }9 m; w) [: H/ y9 d+ r7 a! L5 i
            UARTPuts("\n",-2);
* ]! t0 N1 z8 {) h- Z        }$ C8 T0 o! ]2 S8 a
    }
* S7 R; X9 {: x- R
3 C& H7 ~' K6 ?* \% t}
8 j: p9 [: K6 h
3 R- }+ K( u6 O+ a
5 y9 g# Y: x; y6 k

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) t$ @- D/ w, H0 o  K8 N% R! N

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ J1 U3 I; T  c  u7 A





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