嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 Y; _1 @9 d* v/ @
Void UPP_TASK(Void)
" _8 N) d# z$ m% E( I# {( \- D{5 i2 p4 J7 E( I8 R* [6 `+ L

) R" @( G8 \! ]% U' g3 L4 M) A    int i,j,k,target_int_count=2;, k* d) R+ x4 M6 X- L' [, g
    char ch[2];) x$ ]6 X! y' A+ |5 \  S
. o. i: J, `7 o/ ~* C% k: K

+ B& M* |: q" `4 d: F& c4 O! P6 i: ^. W+ X9 R' K
    upp_interrupt_count  = 0;
6 i: d, g9 I& W/ o* A    upp_error_count = 0;( S+ f6 S0 w# P( P. Z

  H2 `2 |1 A' }3 v# h    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 Y% G. P/ Q$ p+ j
    // Initialize data buffers3 d( \5 u( ?9 D, a
    for (i = 0; i < upp_frame_size; i++)2 m# O. y2 P8 O* G
    {
9 w4 i8 S  d! _8 ~       upp_buffer_b =i;* ?$ L+ [! _, {8 Z) |$ h+ J5 F& ^# A
       upp_buffer_a = 0xDEAD;. J" Q5 I9 y) b& P$ c9 |
    }
; F# i1 a4 ~3 i
) t% {& V5 L8 v) P8 k. E2 B# h    //for(i=0;i<1024;i++)
4 v7 N) c& ^( X0 W" v. ]9 V    //    temp=0;0 k7 b# U8 E2 H+ p* t
- D  {$ M" _9 P: R6 \  e7 L0 [+ P
    //UPPReset();9 k2 J2 [" F0 ~
    /*启动UPP DMA传输*/
7 B: m) p; u5 W    UARTPuts("upp_prog_dma_i\n",-2);- a) |2 P' u) k+ y+ V' W
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( _9 O0 n3 t0 Z4 }
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ]9 f, O* Y5 x    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: D# u# B* C3 @1 j1 r& y9 i- r0 ~8 q4 Z  l% Z
    UARTPuts("upp_prog_dma_i\n",-2);, B$ \5 H9 Z* C8 K- N! z8 O+ p
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. f3 U2 A# l  J6 m& Q$ v5 D* I5 P
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 B& ~7 Z, w  {" O* o5 d5 L. R
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, @! `# z3 t) a; ~0 S8 [
* w' ~9 k* T/ r# N8 L' U$ }- a    /*等待UPP传输完毕*/  y, {9 J$ c9 }
    //i=0;3 m3 j) O) Y; @" p
    //j=0;
% K- q3 j  ]3 Z. N% U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# M7 N2 K; w3 q    {
1 H! {# C; h5 G) l1 G# e        /*  测试UPP传输的同时操作普通DDR数据' i( D, [. e0 e: M6 J" C: F
        temp=i;
2 X8 w2 Y5 i+ d0 u        i++;+ h+ W9 n( k- b! w# X2 D
        if(i==1024)
0 z" G+ n- i& Z3 T        {7 l- y" i, @9 C7 k' \! t- ?
            i=0;; I. d/ I) D- ~. X! J# Y
            j++;
% q4 @: z0 ]; H8 Z        }
- y2 f; d" V( ~9 y        */
8 M6 B2 W4 D" ?* g( o5 K2 _+ f0 d1 ~! X. @- d
       asm(" nop");
" c5 f  \5 {, C8 d, s
2 `/ e6 P$ \, s0 n, T" B# ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; s  J# i6 v* J) V. F
    }
! s, O# T* @% Z- E7 i
0 P9 P; P  S. ?9 I0 b    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 b1 ~- G( L5 _2 p* C7 a- ]
    //UARTprintf( "i=%d\n",i);2 `& S$ k( O9 C+ s) ?
    //UARTprintf( "j=%d\n",j);
+ g# ^6 I- x3 I& z, x$ R$ a5 k    UARTPuts("Data mismatch in buffers.\n",-2);
% B; z+ X% ^+ k    if (upp_interrupt_count == 2 && upp_error_count == 0)* I0 F3 \5 C# G1 U4 {3 `5 j
    {+ Z9 ]: O! p7 I* A
        for (i = 0; i<upp_frame_size; i++)/ ^' \: B: ~+ ?5 T/ B
        {9 E; B( q* H% t8 j( C
            if (upp_buffer_a != upp_buffer_b)
& q9 ~& l$ o  P  O! y0 Y% D5 `            {
/ F% q- D: m( B! f  `" n8 l                upp_error_count++;6 ~" b1 {- g9 m5 e# j. F
            }3 K; l7 t: g" l) M
        }/ }3 U/ S  t# Q! L
    }8 E: C1 N; _! F. M

* Y" d: j4 l$ B& ~! a. D    /* 报告通信结果*/, a, o7 c: C2 {; K: ^: Z0 {
    if(upp_error_count != 0)1 m7 D* P' V9 \5 D" a. v2 F
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' n$ {) H$ u4 }  S2 d0 ]* N6 I
    else
$ K  u  [( T9 q2 |5 i. f" a5 ]        UARTPuts("uPP transfers complete!\n",-2);
8 n; S* J& Y" n7 y0 I! a5 K% h
8 z9 n2 u& E8 \6 `    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& J! i! \% `5 F2 X+ P2 J    UARTGets(ch,2);
( p, H' T% ^" `9 T6 ~7 B0 e8 M    UARTPuts("\n", -2);
5 \0 b- }; {( o: N5 K  s1 t, q! x4 ~% d- M% O9 _: b$ j
    if(ch[0] == 'y')
8 B. f. O& W5 K( y/ z    {
9 H2 c& p; u1 Q8 n2 M        /*打印全部读到的数据*/
* k1 K" e- h6 T* Z& x        for(i=0; i<upp_frame_size; )
6 n( N  V8 A$ U. \( D7 ]        {
4 x4 y# Y0 l3 U4 O            for(j=0; j<5; j++)
! k* `. M* Y; I  D# o8 k( v            {
/ ^, e5 C& W7 ]/ W4 l- \$ d. y' R                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. U* y/ g- M! t: D
                i++;7 L# b8 z7 D' B. @: ]
                //if(i >= 4096)' {2 ^- Z1 t: x) d3 M  X6 p
                //    break;
& c4 @- X% X' ^8 |$ z7 F1 _3 [2 w2 w* ?5 D1 @
            }/ h2 |& a3 A; _4 {1 [' y$ y1 |
            UARTPuts("\n",-2);) ?$ n+ H, `' D7 F$ b
        }
4 r: g5 W4 t4 Z, I7 g    }% a* r5 @0 e$ ]. j% s

' w4 F$ j$ t6 J}
, F0 C: D- P' p( ?

9 R, }* U! @) e6 B! K# u* u* G- f7 B" d( x/ p4 s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. z* o6 p5 T% W3 \; x8 A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 U) D3 V* a% m8 ~, E" v  q




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