嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( W+ t' B  X$ v# s1 V+ a) C
Void UPP_TASK(Void)5 o2 T5 L5 ~/ G0 ?0 z
{
$ X/ l5 h( \, M* l
; b0 b2 J3 [2 l    int i,j,k,target_int_count=2;
7 W3 G, k. w2 u0 z. W    char ch[2];
8 a3 p6 \1 c- i$ ^8 T! ]5 {/ j; R+ r- U; |

6 Y$ R/ a9 _5 q! Y0 y. @, y& i' z) @
    upp_interrupt_count  = 0;
/ f; [/ _- @+ T  E6 v    upp_error_count = 0;
* g9 K+ Y6 P% r5 U) Z2 v+ J" c) W, C7 E: Y1 P
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 `3 Z* D7 U3 c    // Initialize data buffers) K0 B+ p6 l; X/ R$ J
    for (i = 0; i < upp_frame_size; i++)
2 ^- ?* R( b& }: \! u: Q2 w' }    {) ?, w5 ~0 h' ^2 n) Z" `. y% P
       upp_buffer_b =i;* V; I7 ~4 Z  o( o; k! a( ^
       upp_buffer_a = 0xDEAD;
% d' O, U$ N* g' b. ]$ Z7 l    }1 ?; K/ M1 `, o$ K/ l9 C4 S8 O4 H
; @3 @+ S6 Z3 k2 _
    //for(i=0;i<1024;i++); h: z8 x1 D! n4 q: O4 w6 _
    //    temp=0;% ]: q+ x% w6 d2 p' F) v
/ W) ?: G7 y1 O! K" p
    //UPPReset();
! t" r/ e+ d9 s" [/ `# k    /*启动UPP DMA传输*/
* m; r. k8 p4 E  U    UARTPuts("upp_prog_dma_i\n",-2);" Y! S( M) n9 p, R5 d) Z, n
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 e$ x- t7 @. E6 m/ ], ]% o9 E. {    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 I; p" |- t. u  m* L! d    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ u7 B6 P5 v& k4 g5 P
" B. @0 d4 Z* r* U6 e
    UARTPuts("upp_prog_dma_i\n",-2);
6 L% K& I, d7 P$ |+ {, t    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 u" n* c) n  X! g% {    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ L9 _3 @$ Q6 Q6 ?0 S+ `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. P; D0 a; Z, J' B9 k4 n, a6 D) L5 _: v
    /*等待UPP传输完毕*/& v/ z' v7 s1 K; k4 p* F% u4 z
    //i=0;
! x% O" S8 J3 l* i2 n+ x    //j=0;$ z# ?/ d4 c7 Y  g1 u! B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! W. n0 b; y* h% x/ c, c% Y
    {
4 F2 @+ j1 g( t        /*  测试UPP传输的同时操作普通DDR数据
0 q$ n/ ]5 A0 [0 J+ `7 e  @        temp=i;
  s5 s8 x8 {* _$ P        i++;8 T8 Y- u: M* F
        if(i==1024)
  {$ i+ ~2 N1 P. A* u! _2 q: Z        {
* G. i  M9 ~) g( g# k4 E! {" M            i=0;" T- J# c* J1 Y7 u. e+ I7 m
            j++;: O7 u" K1 h% z0 L4 y, I' M2 e
        }
( X1 |" S4 M$ [- Q4 B: ~% y7 T        */
. ?6 \1 b2 i; b
4 @  d5 y$ l3 j# X& t) _8 a% V5 ~       asm(" nop");4 I$ B( a8 l. T

2 a7 U. {' V; N4 ^1 B       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' W& e" h+ z8 I& A% u0 Y    }
4 _  x. K7 Q) A+ K# c" W) o9 k( ^# s; z/ E0 @# c
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% G  G2 W$ A* `6 X0 V( I    //UARTprintf( "i=%d\n",i);
4 z  f  _1 W  t* f4 x3 K" G3 I" `    //UARTprintf( "j=%d\n",j);
% n- D( Z+ A, D0 M. v: o9 t8 E1 U    UARTPuts("Data mismatch in buffers.\n",-2);9 D8 U# x) a5 p- b  C
    if (upp_interrupt_count == 2 && upp_error_count == 0)
  C" T' y5 H$ M0 K    {
4 i/ O' _# H4 e- {        for (i = 0; i<upp_frame_size; i++)* z2 u8 I3 {. I' |4 i2 ], o
        {
2 J; Q; Y, o  W/ z. V            if (upp_buffer_a != upp_buffer_b)
0 h' O1 c) Y; W            {
! f$ y0 ]% {' F/ y                upp_error_count++;
* A) v1 {2 Y; T            }
' w$ H7 x, w/ X        }4 ]5 Z& l$ D9 K* Q
    }
. o5 I+ D- s) }+ F; r  M1 H: X$ t0 p  k; A: G, }
    /* 报告通信结果*/8 c4 D" i# T+ L6 Z7 x1 D9 C
    if(upp_error_count != 0)
  r9 t# O! E1 J! l        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 k2 @( g) n4 P/ N3 X' W/ J
    else9 i9 s+ }9 s: f3 z0 m
        UARTPuts("uPP transfers complete!\n",-2);1 g; ~; u2 ]* F3 ]
2 u5 U8 d* v  m
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 L- A9 x0 b0 G/ p% h% |& l
    UARTGets(ch,2);, d" i- I+ o' h2 t* f& p& y* s
    UARTPuts("\n", -2);
5 b+ C! E$ d0 n( u+ {' j
7 c1 [. @  G5 q+ \; ~; M0 u, V    if(ch[0] == 'y')6 ]7 p5 ]1 t: i3 `2 _# \
    {2 d. q' q8 T: |7 I# ]
        /*打印全部读到的数据*/
; g. `2 j0 s& h) F        for(i=0; i<upp_frame_size; )
) E9 k/ o9 R1 w0 i; t        {% f* D# Q# ^, n. L# x0 s8 y+ [
            for(j=0; j<5; j++)
0 I0 z) m0 R# w            {  ~! i6 V4 M5 A" H; t
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 b) M# `( s  }4 @                i++;
! {, M' D+ b1 h- d4 X( W* O, j! r                //if(i >= 4096)5 m5 @! A8 m4 \7 g, r$ O
                //    break;
% n9 n$ U. t) u- {2 F, T; E' M+ f( r5 V, f8 c
            }
+ [4 O- W; a" e) Z            UARTPuts("\n",-2);% F, R6 \% z3 |. w
        }, `: q# E- Q' d/ Q
    }
% D$ K9 ^& c! R4 `
) z+ V- d6 A2 F' f( [" q}
1 I; @9 }; x4 `: f( ~! g

) `3 b) Y1 i1 ~" S2 @" H3 {( }  |6 ]9 _3 l: U& C- v, x7 ?7 w0 A* `

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& }& y* [& A  r

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 o1 {: y; p% t0 B; o& h





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