嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ G% {4 Y1 h0 [0 ]6 h* H1 d
Void UPP_TASK(Void)* |) M7 J6 @( r: q3 i2 Y
{8 N- j$ Y/ {. [/ H5 F$ j9 N
: p3 o$ M( I1 i, K8 F  N" ]
    int i,j,k,target_int_count=2;
  S5 D' W7 w/ {    char ch[2];2 v+ m& `; t' v5 v% Q* `
" l+ c/ X6 W& d' u# v, }2 U9 }
$ N' u- A$ N( v0 x+ L( v; u
- P: j9 \+ i' ^) P8 p4 E  L
    upp_interrupt_count  = 0;% U2 {1 y6 A* i8 Y9 {7 P
    upp_error_count = 0;0 D2 `7 G6 u$ j3 T2 J$ ]

% e" \. f4 d) P  ^    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 q  D+ Q' y" l: n    // Initialize data buffers, K) t7 t* u" |% X4 Q: g: K
    for (i = 0; i < upp_frame_size; i++)
3 u9 A5 a% x+ T: Y0 v( s" }    {
& \2 ~4 N/ Q" P       upp_buffer_b =i;
4 k8 A& ^8 g" }9 z2 m0 E. g% h       upp_buffer_a = 0xDEAD;. `& O0 c5 F$ q+ ^" t/ z- H
    }/ {1 o0 l( K) Q0 ~

# U- @' d2 F  R  Y3 Y/ _    //for(i=0;i<1024;i++)- a: I8 D, ^* `$ P0 t  ^; W
    //    temp=0;7 ^& o! p3 K, y  R% J$ }2 H
/ c7 f+ @. v* C
    //UPPReset();% r8 g* _2 F  F( a" [1 A
    /*启动UPP DMA传输*/
" b# A3 b. ^& r9 z3 d$ R0 C5 a    UARTPuts("upp_prog_dma_i\n",-2);
5 ?3 _4 t, R/ \. y9 P    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, p# I7 _! n! X# p3 m, s8 V$ @$ x: I
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  z: k7 d! |: d/ ]% g( [    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 r8 g6 B2 ~1 `
+ G- S  P6 S7 @, O+ A! Q% T9 M
    UARTPuts("upp_prog_dma_i\n",-2);
8 ?3 `/ J) E5 U: E' M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& s; z6 v  R) h$ ~# @9 r
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) o/ v+ `7 n1 h$ P/ y+ F  x# q& l    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# G1 ~; C" A7 q0 P& B/ H  v
9 g# y/ M! c0 k" X! Q
    /*等待UPP传输完毕*/: d7 }9 a; p3 N
    //i=0;5 T7 ?) _1 f: c& F' M
    //j=0;. t; s% U/ @; I, m5 _1 _
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* J& X; {8 s+ W7 U
    {8 k& ^* W9 P& I9 o$ ^. |: Q, t. g( F
        /*  测试UPP传输的同时操作普通DDR数据& v9 J/ Z( k+ t
        temp=i;% I. \( K6 }+ @
        i++;
5 C5 n9 P7 {+ `, E, o- n; M- S        if(i==1024): X. \0 l$ H* u  W1 S) c) \
        {/ O( k% j! i/ Z0 v
            i=0;9 m; G( }6 C$ n. e# ^
            j++;6 T' }8 H  l  B! E. `3 b: k$ l( R
        }( ^! f9 O# e+ ?* y1 x1 z8 N
        */) r5 P/ c4 ~5 n+ T% Y  F: b
5 x. E3 a4 ^% ]* o5 A) k
       asm(" nop");
) \0 n3 ?" ]' Z- V: U, x2 h
, u2 I* q0 C$ W8 S) q; }       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 }! w1 h6 y& Y    }
- X( I$ ~( m: i. @1 f# w! G$ k9 t- e4 ~6 B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" j3 H% A9 r% v, X3 t4 m- Q    //UARTprintf( "i=%d\n",i);* ?& o1 f* M2 a# V/ [
    //UARTprintf( "j=%d\n",j);* O( A5 R1 I  h9 u5 E8 X3 k
    UARTPuts("Data mismatch in buffers.\n",-2);# l& S# O/ |9 m; G1 l5 ~6 m9 ^
    if (upp_interrupt_count == 2 && upp_error_count == 0)* i: m" ?3 l' j, d
    {
- \+ f% |! W$ N( m; E$ ?  |        for (i = 0; i<upp_frame_size; i++)$ v2 D. }% s; U3 b1 }" X! J( a# _3 z
        {
7 A% }0 u6 |4 h- Y5 S2 e& ]$ y            if (upp_buffer_a != upp_buffer_b)
; e, |+ [; z* ?1 y            {
3 `1 O" o8 z6 ~& g( B                upp_error_count++;
8 w8 m" h% w0 m3 G, f8 h0 g3 k" U$ m            }3 D: G& X9 H4 Q7 S$ G
        }
. q$ J8 u/ E2 y1 W+ i# V: H8 C    }+ Q9 e! f" u: |" K" {. @" Q

4 q; b1 |! U9 V# Z- n    /* 报告通信结果*/% h& C, P( Z, W% \. A6 G
    if(upp_error_count != 0)
" p" {5 G! o0 k/ K6 _. v        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# V: p* R2 Y2 A9 h    else
/ l% p) k, ^8 ^( G: @0 T        UARTPuts("uPP transfers complete!\n",-2);
" T0 P; C/ u( L0 P2 B7 f: b* l3 o8 E  L- w2 Z' K5 M" ?
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ G0 ~% }/ H* \1 N1 h
    UARTGets(ch,2);
* P3 ~6 \- Y/ L5 ?+ H7 N    UARTPuts("\n", -2);% J5 \8 f* i/ l% q

8 a  R* }. k* k8 o  Y3 a    if(ch[0] == 'y')
3 |  R/ Q2 p, U$ t    {$ j$ u* w* ?" D) t+ u
        /*打印全部读到的数据*/9 w7 d. B. M. a) P  t
        for(i=0; i<upp_frame_size; )2 L' P& S9 d6 f2 H
        {
5 C2 r- H9 J+ ~3 ^1 R) y/ w( X3 J            for(j=0; j<5; j++)0 L# C  d2 |0 G% Y. m: K. m8 b  i& A
            {
$ Y: |; a0 G. {, v                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% \1 H, I( w! Y/ o, n
                i++;
" k. C- c( }- G                //if(i >= 4096)
! }8 i" h& [- b$ g! A                //    break;) C& h0 K3 c* ^

$ z: P3 X! F; z6 o5 _% D            }
& ^  H$ L7 k& |" }+ F            UARTPuts("\n",-2);
3 i( Q0 f, {, ^  r# ]# d        }; `9 I* R# ]5 m2 j, ]* W2 O* x
    }" m/ \1 ]4 `, d. x7 ?# P

: r' n# U- ]. M$ H! s  o1 h}

, M, t3 Z- y" k7 m

* b! i5 ~4 {0 m  ~6 Z1 K6 o
( R# O2 d3 l! ^
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 p6 z2 N+ r8 }4 t4 g+ K) x
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 T& C' a& o0 f# I& }





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