嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: C& }+ D; ?3 L6 i9 O0 Q
Void UPP_TASK(Void)
: G; T& w1 }) h{
7 h% t+ W. ]2 L# w) B' i" N; ^& q, q- g0 p( P8 B
    int i,j,k,target_int_count=2;2 w4 N, s7 G1 z0 l* v
    char ch[2];
. C7 R" @$ H% D' S8 \$ C6 G
7 M+ ?+ X, Y4 O1 t! b+ H% s" y' ?3 ?4 Z' Y6 o$ \# G
: |# [+ r  y+ Q& ^$ _4 M& l
    upp_interrupt_count  = 0;
! P9 b; l5 \# j2 V5 _  G  l    upp_error_count = 0;5 T! ~7 E# }' q" u7 U# s- J! G' Q
' r% O8 f( [% M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);; N8 R7 u& z; U  G% M4 D' Q
    // Initialize data buffers
. w) {+ y& R' F) b/ b0 {( H    for (i = 0; i < upp_frame_size; i++)
7 ?. j7 w3 ?; a" R4 i  S. T    {( n0 K6 y( [) y( U! L
       upp_buffer_b =i;
2 _7 }* [; I" V4 a2 @+ @4 s       upp_buffer_a = 0xDEAD;" F6 W+ c* W* ]3 L
    }
( y5 f6 D& j4 J- f  D7 i% b
9 H( C. o3 P# f% w4 n" d8 K, ?    //for(i=0;i<1024;i++)- @% d$ a1 L8 a, ?1 D
    //    temp=0;
) v  B- d3 ?: F2 z) p' L8 {
, ^) X( q  A  |& a8 F5 z    //UPPReset();
2 F, q, [/ B" Y- X; `* \    /*启动UPP DMA传输*/
; a; k) q) g9 P, a    UARTPuts("upp_prog_dma_i\n",-2);9 N( D$ R6 R5 I3 ?: x$ Y) D
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* o2 J7 ]+ r3 p1 h. g% ~    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ x! J7 N4 Y  N& ^/ r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ o+ w/ l, Y! c# O

8 i5 k& ^' ]9 Q& [- ]    UARTPuts("upp_prog_dma_i\n",-2);9 A9 N' L( i' R
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; ]3 O! h% M6 J. @- T' f8 G) `    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& f4 k/ x1 B7 i% l/ S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: D, {: e5 b* j5 w) T8 }- Q- X  n& c4 j( u
    /*等待UPP传输完毕*/# T- O9 v; s  d4 x4 {/ V& L1 M( S
    //i=0;$ \+ V: X" C# O0 R/ \
    //j=0;
) y, H& \/ c1 x    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 J* R! a+ x3 E/ C4 ?    {
0 D9 y+ {' B: N8 q, k        /*  测试UPP传输的同时操作普通DDR数据
( X1 A* N; q; h+ l4 R( x) f: _( p        temp=i;; T) Y1 m/ ~9 U+ Z1 B: Q6 @9 [# O- I. P
        i++;
! n6 t" v$ R+ X        if(i==1024)3 H, s. D+ o; ~2 W) I( w2 o# s
        {
# \; [+ v9 P4 r+ ~. ~! A            i=0;
& U2 u; i  d. I; X2 Z0 F9 Q* b' ]            j++;; o7 c7 e, d- o, b
        }
1 x$ E  v& V4 l: `8 d. ]1 h        */
& b6 ]2 S# k+ ~+ Y/ [- c
# F* l6 W: M! e6 y       asm(" nop");  z8 Y  V$ [% X# \, h
8 `4 e* j7 L7 h2 @' X  z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( z% x( C4 ]4 s/ b" h7 t    }
* H% I2 O1 K7 ^( p* b4 j
4 V/ Q: V# _5 m) l5 ^    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 S2 g3 P3 D, o1 E$ e7 X
    //UARTprintf( "i=%d\n",i);2 l' y3 w, K+ O4 S. k; }) q' g5 G
    //UARTprintf( "j=%d\n",j);
  {  a+ u1 u" B, i2 a    UARTPuts("Data mismatch in buffers.\n",-2);
* g9 G  b$ F& P! e% ~8 K    if (upp_interrupt_count == 2 && upp_error_count == 0)1 z( g' @7 J6 g; X+ \, M! {4 i, C
    {( W* e$ B& x0 H
        for (i = 0; i<upp_frame_size; i++)
5 K# J! t1 @! Z% Z; ~2 ?        {
: @  K+ h' y+ n5 |( A            if (upp_buffer_a != upp_buffer_b)0 Z+ W9 C& t# K, B0 h
            {' h# q, {/ t& R' f' V5 B* v& G
                upp_error_count++;
& y; R0 F7 e3 }9 S7 H0 [+ R3 M            }- _1 ]  |! k6 f% f. F5 D! N
        }# E4 F0 p+ S" T9 D. ?
    }
0 E! }8 @( ~: B, D& e6 ~) h" s( S
    /* 报告通信结果*/+ Y1 B* H9 O0 d" `' }! h4 c' s
    if(upp_error_count != 0)- A/ f, s4 ~. N. s7 l8 _' E0 p
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 J0 m4 c& v1 W  h; @2 m: V    else
8 ]) `0 i1 t5 d9 {/ L5 E" n; o        UARTPuts("uPP transfers complete!\n",-2);; F( v( H; ~# S. F* Z! T
9 K8 Y; ?, `! j! E! m
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 ^6 b8 T' ~* Y" Z: g' m    UARTGets(ch,2);$ J  t: b8 _) |" b* N
    UARTPuts("\n", -2);- X% C+ `0 c- q0 F! m$ ?6 L  N

" C8 |+ W1 C2 H3 v    if(ch[0] == 'y')2 T, D7 L# r4 K
    {
" ~) L; M  C8 a        /*打印全部读到的数据*/- v! P8 x- q: G7 j3 c
        for(i=0; i<upp_frame_size; )
. r' W6 @0 J; L! O        {
% e, H, [5 G8 Z            for(j=0; j<5; j++)% ^  x" Y4 ]+ c6 F
            {7 ~2 n5 r4 T9 `, [9 j
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! ^4 [4 K( r1 ?; U9 \" V
                i++;  \8 P  R' J+ d  \# x; F
                //if(i >= 4096)' B7 \- @& W1 k& _' t/ U8 _
                //    break;& u3 T% W/ \5 C  [& l5 |
; y0 o$ M8 R2 P  ]5 \
            }
2 p3 ]8 T1 e. ^- [1 ?            UARTPuts("\n",-2);! y$ n% n6 ?$ g3 T% F+ l
        }) s- ], m1 o' j. k- W9 @8 C
    }* X7 L+ V' n! E( ~) }1 F0 q; l

% Y( X. e2 Q* o' q9 u$ U}

- W( d* Z* f8 m) `
8 H* O) U+ g8 Y* r& A' l2 ~

( D$ ^6 F6 C' `" x' h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% x6 O' b# R" d! o, q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 d. a  I8 A9 r% ~% f$ y7 n; D




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