嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% q- A% P  P5 w) C0 J* D, |
Void UPP_TASK(Void)1 F1 p! H7 M0 G) B' v* h. S
{
! A: N0 x& H: W6 J+ a# k1 f. ~  x7 P' s; t3 [
    int i,j,k,target_int_count=2;
  A3 {, O7 o6 A6 s# C7 L8 p! M2 [5 j    char ch[2];' I# `! T0 I1 V: G' G

8 \8 W" F( G0 g0 z3 T/ z" e9 R- [* O- L/ x- A. p/ [- h
4 T: C. y9 o. x4 W5 H5 h
    upp_interrupt_count  = 0;, L* }/ ?' W" t, G1 |' f
    upp_error_count = 0;) N3 J8 X7 r7 ]5 ^8 X& z" m. K

- W# x0 Q2 n! m+ j0 i4 l    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ ]; e( \* T+ f8 G4 I8 r2 Z& o1 @    // Initialize data buffers1 I" J% \/ T- L) i( c: E4 D2 P3 X
    for (i = 0; i < upp_frame_size; i++), a: v" b$ Y4 g0 i* ~! h! |
    {
: g; F$ m2 e# ]$ n% c; D       upp_buffer_b =i;
: s) q, S+ i, Y: m$ m  z9 A2 X       upp_buffer_a = 0xDEAD;" X1 H# `) t5 F8 }
    }
1 c& v, G7 A( n
: |4 Z3 {' @- q& I    //for(i=0;i<1024;i++)
2 Z4 O+ N8 W0 g- j8 L& ~  R( n6 I, y    //    temp=0;( R% N0 Q9 {# [# @4 V

8 r9 @! |* Y1 K! D/ b6 e& @% O    //UPPReset();
& [9 O0 x3 [7 N# O3 U4 }    /*启动UPP DMA传输*/
2 U. I" j: P  K" q2 D    UARTPuts("upp_prog_dma_i\n",-2);" R' r% m# v( q( t6 V* m) h
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. K" z: h4 p  f! t/ Q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 k! Y' Q7 N; Q: v" V) [    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 r& K* F2 K  W) F7 F, D0 ~  L. |% J  w( O
    UARTPuts("upp_prog_dma_i\n",-2);
) w" J6 p4 C$ k# c0 b    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* a4 q5 E) m8 p, n$ [: g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, z' {. |' _% W; U: h: P
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 H, D* I; X& l: @% @6 R
4 C( ?" P8 W/ A+ d( H) V) n
    /*等待UPP传输完毕*/3 M0 _, ?" C5 t- b' i2 C5 T- ]
    //i=0;5 j3 q! C2 m4 V6 ?( Y3 L5 o
    //j=0;
0 x( G9 r0 }" v0 c# l    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& Z/ V/ C/ @( I+ R; K    {8 k2 |, S. Z+ S# e5 ~  ]
        /*  测试UPP传输的同时操作普通DDR数据
3 t; u$ O! p6 `0 K4 R1 b0 L; ^        temp=i;1 @2 _5 Z5 S/ ~4 T2 T- W
        i++;% L% X7 I: i, U, a, Z9 }
        if(i==1024)% F9 G4 ~. B& u- ?1 z
        {
  u. v" k  \( j            i=0;( ]6 G% V& d8 K, y9 t
            j++;6 p6 \9 x. I( y7 q0 G
        }  N2 r/ K3 A+ }! J5 f
        */
7 J$ }4 `3 b& i2 t
! A2 i) ~$ y+ X0 L       asm(" nop");0 V6 K3 J& d! k1 y& T

5 F, {2 `& N; I5 {, i" L- J' M6 X2 I       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& V( S2 r, v! s/ N" b% ^( H( s! |    }
0 K  \. T  F4 t+ i8 z- O" `/ V0 j& m+ t# d
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 y6 B8 U! \/ E) e  y9 k6 z    //UARTprintf( "i=%d\n",i);
0 \+ T$ V  a. g' V& d0 H# L    //UARTprintf( "j=%d\n",j);1 s: {  L" `! s0 {
    UARTPuts("Data mismatch in buffers.\n",-2);+ w- j$ P' Z2 T( |1 X8 I
    if (upp_interrupt_count == 2 && upp_error_count == 0)5 E- O) k8 b  a& j( E
    {7 O8 N  l3 A+ x: x
        for (i = 0; i<upp_frame_size; i++)
7 U: }: e9 ~5 _2 ~0 `+ w        {
% v! R9 q. Y+ J+ t            if (upp_buffer_a != upp_buffer_b)' f! `8 W' s- C' m* \
            {
" F0 m" W; Q# j5 K* e. S                upp_error_count++;
- v  ]& l$ S1 `            }
; |, R2 d; k; W4 ?4 ~) X        }
( W9 n/ R* d" c" Z/ ^$ z    }
, E; u/ r. m6 B  s& p+ f% L1 n9 S- b  ~2 F
    /* 报告通信结果*/; p% @2 _8 j6 w8 ?! H
    if(upp_error_count != 0)
' o3 N# }' O6 F+ ]+ t+ c* R$ U/ _        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 j4 M+ m$ a9 e7 g, Q( Z0 K4 z( P$ K
    else* A4 [& j# i5 ]9 h. q
        UARTPuts("uPP transfers complete!\n",-2);
/ }+ i% \. m% W% F5 j; s- J5 `
5 q) g- V( w4 L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) a6 E* u3 i2 n' S8 V$ M- }    UARTGets(ch,2);* T) O; |3 R& H% H) R. Z) j
    UARTPuts("\n", -2);) p3 t0 y, s% J

' a/ q8 ?0 T8 y' u, N5 `    if(ch[0] == 'y')) e+ D* J0 T3 D$ k
    {
: v$ K$ m$ \' H; {5 U7 s        /*打印全部读到的数据*/
1 f2 a  ]( j$ j- U+ G6 {        for(i=0; i<upp_frame_size; )/ r; ?$ k. F# s' o- P  X3 R
        {; {1 _( ~# d3 J
            for(j=0; j<5; j++)
# Q8 J4 t+ y6 v& Y) ^7 e4 S            {
# E# h  E8 ^- Z/ g2 y5 g                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- {. Q! {2 l2 [                i++;
8 W6 f' K* Q6 P6 u* R9 J$ @                //if(i >= 4096)' t1 z. N- z" i! u. b5 @
                //    break;# v' x! b; \: v" \# m8 b9 f

1 k: S, F0 F  g; ^4 C6 b; X            }3 Y! Z( y( H9 }: T) l
            UARTPuts("\n",-2);
, E; _9 T% B7 @* _" {$ Y- Z        }
/ m# e$ k# x9 |: m9 D    }2 Z* {4 O4 S6 P; M$ V# j

8 Z: ], b; k( x" `$ O7 O9 l}

$ K2 u2 }. I" s) ^4 q

# _8 j+ O+ t2 w( V& N& c- g2 p/ a$ n9 M  a. l  m

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 s1 Y+ u! f$ G4 r
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' ^  b* d; T8 k+ U- n





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