嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?3 q5 `3 F. `  U5 b+ ^) `; z/ @" j
Void UPP_TASK(Void): R, r- f. u: C, ]' ?2 \
{
/ s: o# u3 I: p) H5 F' O. g1 V3 E, h+ }4 y% I0 L
    int i,j,k,target_int_count=2;
" a+ u# L3 j6 D  e' y! o9 Z1 y    char ch[2];
1 b3 `* ?' T/ c4 z: c
" p  ^7 L: a4 R8 B/ ^2 _' [
# t5 k* N% e) q5 [, w
+ a+ g$ \' L6 o9 y0 H* }    upp_interrupt_count  = 0;
7 \2 U/ b5 \* E& d  G2 b    upp_error_count = 0;
& @* [; h% W# S1 r9 z0 k6 a; K: h9 k( t8 Q' P* }7 Z
    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ D" R: T$ Y) N6 z- q* E
    // Initialize data buffers
1 q5 u3 r0 A: ?5 n8 l$ G    for (i = 0; i < upp_frame_size; i++)6 d, K4 o' H1 p+ G3 ^! c
    {5 E8 O* E. z, u1 z
       upp_buffer_b =i;" @9 r3 r; d8 X' v$ }* ?
       upp_buffer_a = 0xDEAD;
" f. a3 C7 u* {/ S# N& N    }9 m  n; o6 B# q8 i1 ^& u* p7 |
. I; l0 b% R3 t5 t+ V1 D
    //for(i=0;i<1024;i++)
+ E# M( |3 @& y/ H    //    temp=0;
1 G3 Q$ L& R3 u. k: c  R( v- X% \, ^7 K* Y3 b- ?: B' A0 G) {
    //UPPReset();: [1 M+ @1 R9 Y) W! O. t
    /*启动UPP DMA传输*/. U7 w7 }6 ^- c, r/ t
    UARTPuts("upp_prog_dma_i\n",-2);" M/ i8 ^+ Z2 V: C4 V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# U6 e) _5 s3 }5 p( Z& o: ~" f* i    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- B. Y/ m4 r0 r' u2 o- T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: w+ {$ Y3 p; k# ?5 D, k. q& R
1 G+ G; r1 q9 L# a* q
    UARTPuts("upp_prog_dma_i\n",-2);
2 z7 d1 S0 }/ `( e    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. ~7 l4 A! ^( V
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 }  Q3 V# X3 e' ~1 j$ }    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% L! ^2 O: @$ h* N; }
6 \9 {, Y  L; x) M    /*等待UPP传输完毕*/* R8 C1 w5 h7 _8 S; h7 l
    //i=0;
! p6 J8 Q9 ~+ o) s+ P6 P    //j=0;7 v2 E1 _) E' T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" R/ D* z8 @, t% i
    {3 j: {1 @7 C1 C0 y2 A8 B
        /*  测试UPP传输的同时操作普通DDR数据
; K* u2 a4 L) M: a& |* D$ P        temp=i;, p5 n/ _. m5 S: S/ a9 ~
        i++;, `  [5 _/ O: s- J6 P% ~
        if(i==1024)
6 j6 g/ v+ F9 p        {
1 f- v$ E) D/ e            i=0;- K: [* d; _* m  @& D
            j++;
9 J4 y1 b- C* ?# L- t5 J$ P        }1 x, N! z1 T' m/ l- m
        */0 Q& @: Z- o  t1 {  U& S
5 B1 T2 ~# f+ \$ B6 z  {9 e
       asm(" nop");
3 r7 K- d; B# y* U  F7 D: g
6 l% R" P( X7 Z* R$ K& P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 K) ]3 u, H9 C- d7 y' i2 b
    }' U& @! Z$ z# i: T' x
6 x& Z8 L. D7 b! Z# C  t+ l+ t
    /*检查UPP传输的数据是否正确 (loopback modes only)*/' G7 [. ?7 R5 q3 h
    //UARTprintf( "i=%d\n",i);
5 u& [$ k: r8 b& `% _' l, S    //UARTprintf( "j=%d\n",j);
: z- l! d8 z) ^8 ~- {    UARTPuts("Data mismatch in buffers.\n",-2);
+ Z. {# a, H3 p2 I1 k1 v    if (upp_interrupt_count == 2 && upp_error_count == 0)/ c# W% Q. L0 I' g( M
    {. P& o7 ~3 u0 Q8 T8 R4 A
        for (i = 0; i<upp_frame_size; i++)' ^7 |- L8 ?1 j$ _4 F6 F) B
        {
! {" v& f% x$ x) X; J2 a            if (upp_buffer_a != upp_buffer_b)6 z# ^3 j3 N% K8 G
            {
* }& _" e1 W2 S9 U                upp_error_count++;$ }, K3 }5 j1 i6 i  h5 \
            }0 q* |* q' t+ d5 s/ A1 z: \* q
        }
2 m' E  M% Y" k/ `) y    }
: W, D# v, |" ?" R2 }* ^# E, S+ I
2 C4 W+ h7 K6 z, s; U2 L* ?    /* 报告通信结果*/
6 D# o6 g1 j: g  K    if(upp_error_count != 0)
9 b2 u. Z0 G: U  F) K4 _4 u        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 ?4 z+ W( T. ~2 c% s# J    else' E, v& Y; z* @) y9 _# \  \9 V
        UARTPuts("uPP transfers complete!\n",-2);
/ M9 M, J, T: e: d* h9 z
2 e# C; B7 C% F; j, A& S% t  m7 ~    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; \' N8 U1 Z: J' w! f/ n; p    UARTGets(ch,2);& G0 w( G! n/ S+ B  X
    UARTPuts("\n", -2);, A( d' E4 a& N1 D/ Z/ r6 [' r

6 a6 T; `) t6 v1 W- Z4 g( z    if(ch[0] == 'y'), T( X/ v, U4 Q
    {
6 w6 i! p  ~. r( G        /*打印全部读到的数据*/, n5 Q/ [6 Y6 i" t: E% y- [2 q5 J* e
        for(i=0; i<upp_frame_size; )" M8 j' t% W% Y1 M, T
        {; M! N3 i: ?, Y4 q7 t5 g7 l& m
            for(j=0; j<5; j++)/ Q: r( D& O' ^
            {
# b% Q! \& s$ m! ^# `                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
5 s' Y5 u! F* S! I# Q5 o                i++;
% T- x* T/ z/ i: o/ |, _5 \                //if(i >= 4096)$ z) ~! O% ?% j; G9 {
                //    break;% g1 ^( R! _) s# k0 ^  T/ u5 K- c

* {" Z# C9 O- V0 v7 ?2 V0 f/ J            }
$ L' H. I! v: A            UARTPuts("\n",-2);; \! ~! o$ b# w7 @7 K
        }
* u8 B3 `' S$ ~# n: u$ e8 H/ M- S    }/ [6 G7 k# i  W4 b$ E

( |0 J! q# B# M" u! w5 ?7 _9 j}

& i+ C- F1 L3 q1 w* J5 r' i
9 E. P: A% K) |: ~7 N

: ~: T2 h* x: @+ d* b
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" g; G% t5 W) ]$ I2 A4 L1 k) C

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ V1 v  j) A% Z7 o





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