嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 M( P8 n9 o" O5 R7 Y
Void UPP_TASK(Void)
' P+ F- V- F1 }7 m2 I0 y6 T{% P: Y: ~- M) O- w

: O2 T3 o  r* F2 i/ }) r# K7 v) w9 |    int i,j,k,target_int_count=2;
! |! R4 Q; ]6 U    char ch[2];2 n: B# B- _# L1 `5 D
& m" P$ D: N3 Y* ^1 \+ v
$ ^; q) Q" d6 L7 t# f
! o3 F: K$ a  |* m- S) o0 ^
    upp_interrupt_count  = 0;, u- u: H$ ~+ k  _
    upp_error_count = 0;4 M# U* F5 m- t3 d

( U4 S0 l( h: V    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ d* v( ^. B. t# n    // Initialize data buffers
' b/ e% e- `- d3 m2 U9 H    for (i = 0; i < upp_frame_size; i++)- Y4 `) O2 I* g+ m8 |8 n) W
    {
$ A6 g1 b7 c; R' @2 v) T4 y       upp_buffer_b =i;5 ~2 K3 L* W( K( i8 q) J. |3 H4 U
       upp_buffer_a = 0xDEAD;
% @: ^" v; o/ H    }
- n! k1 n, d" I, ]5 x! u' d. T8 @! h( a% ^6 R. i
    //for(i=0;i<1024;i++)
6 @" B+ w+ d+ _- f+ l# f    //    temp=0;. G9 b0 c& P% V1 {7 h" f) r
( Z! S' \. i! E9 A- u
    //UPPReset();
. J" u1 C8 c+ b( q/ p    /*启动UPP DMA传输*/
3 ^2 Z3 u: L' U- J$ b+ F4 X; d/ r    UARTPuts("upp_prog_dma_i\n",-2);2 w+ ?- N" t8 q
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: m' f% d7 w8 g
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  m1 y5 u6 f& }2 I2 v5 x) I
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ C- o8 ?6 z! g5 c$ i
+ f- ^: ^; q% E( G5 r; v) U    UARTPuts("upp_prog_dma_i\n",-2);8 S3 V3 ?# v  y5 h
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  S; p& X. [5 b( |
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' c" M5 P- K( K; ^+ P+ h    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ z' D  m5 a5 A! u7 ~) h" r! y

. o2 u* @9 m) L2 a5 z    /*等待UPP传输完毕*/
+ e" a3 ~) y& m6 @9 `% }    //i=0;
# t* V7 _& q1 H8 X) H0 |    //j=0;
" d9 N- r9 U) K6 h' G' G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! B/ l+ k- a: j9 l/ S6 D    {: e& o% Y6 s; ^# L3 }
        /*  测试UPP传输的同时操作普通DDR数据% y$ f( A' O6 i; E- W% U1 w; g8 r
        temp=i;6 m! o1 Y( \/ V
        i++;
2 e% i0 L* j$ H        if(i==1024)
5 F! m' x+ Q( s, P$ j8 S, h9 S        {
9 I) _2 `: m3 b            i=0;  ]: S! g: E9 y% Y/ ?
            j++;
/ [6 M, d5 x/ g9 J5 G        }
) V+ p9 V, r, A) D, d" d0 P* c        */
' [# a$ Y- L" A" q& V% j& [3 z+ H8 E+ }+ i6 |# Z6 v2 k
       asm(" nop");% t( F( y4 K# @, c
! p2 q' L7 a+ W% B- e! z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 T$ m; Y" f! u! P    }
, G2 d' s- B4 a% `' T! ~+ p1 S9 v8 b: c$ ~8 s
    /*检查UPP传输的数据是否正确 (loopback modes only)*/) u7 n  r# L( [- t3 k
    //UARTprintf( "i=%d\n",i);
' t/ T3 @% S7 z. m. L    //UARTprintf( "j=%d\n",j);
* {0 }  Q& p' d% W0 o    UARTPuts("Data mismatch in buffers.\n",-2);
% c' p0 i# `' y* A    if (upp_interrupt_count == 2 && upp_error_count == 0)
% D; T  ^* A% d9 L    {
- h# g& y8 Y/ W  m5 _; I        for (i = 0; i<upp_frame_size; i++)
- Y' c, w2 r7 Z0 [: f0 D4 {        {
2 n, L6 r* K5 r& ~            if (upp_buffer_a != upp_buffer_b); v! ?6 h  |; x- u
            {
4 L) S# ^/ ?+ I* m6 t7 F                upp_error_count++;
% A& q" K; e/ E  w. `9 U            }6 ~1 p9 |5 G# b% t
        }6 x( v/ f3 Z) y5 N/ ^
    }
1 l* w/ H" Y' @  F0 S" u8 V1 h9 H2 {! c9 a% V" h, a
    /* 报告通信结果*/
! W& h2 r* w/ d9 C    if(upp_error_count != 0)
- W) U/ n! x! j: o        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- w3 Y8 y! @  B' ?6 L- k    else
3 o$ @& u- k$ j/ T0 E, L        UARTPuts("uPP transfers complete!\n",-2);
3 ?* d* t1 J/ p: p0 b  U2 d, |3 P) \( p- h7 x# N  z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ ~. b9 x3 H" k" N! E    UARTGets(ch,2);
: y7 m; S( {2 i0 m4 f7 M, x5 N7 U    UARTPuts("\n", -2);
8 t$ v2 d* j8 d# r8 K
7 L. }# G  m3 Y/ P' q- R    if(ch[0] == 'y')3 i4 j3 O7 s' Z0 f1 ]* l( {
    {
2 [, ~. H0 J- k; r, m        /*打印全部读到的数据*/  \. b! L! P" ?; i% U
        for(i=0; i<upp_frame_size; )& v% z( [9 a2 y8 ~8 k
        {4 h3 g( p' \0 u- Q4 F8 C, |
            for(j=0; j<5; j++)
5 Q, H; R( P8 M- i            {3 ?) f& w" d7 l; v
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! h2 n! @: c8 B+ M
                i++;
6 r1 Y+ M* `9 U6 \! L0 m3 e  m                //if(i >= 4096)
! f- t4 T, X4 k+ P                //    break;; O7 G% g) F/ w' J/ h

; c: t$ U  R( C" X  K            }, T: u- f4 z$ g. b1 d+ N* i8 F
            UARTPuts("\n",-2);0 i6 L3 j. Q9 |, E) g
        }/ g; Y0 i! D6 b4 {6 K* s
    }- }# a. T* L! l

* k; m" W0 ?# X, b% ]* C/ l8 F}
, i9 O2 k6 o$ z

# ]8 x0 \1 V/ f# t7 `9 s' u, }3 O2 F% R/ L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ r) W7 }3 P' _/ u  _4 `4 c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 J# F7 n" d1 x9 N( x& E




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