嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 W" h' L6 W# p* N( M# Z+ T
Void UPP_TASK(Void)
) o: l" c( T1 p+ m' f2 \; K{' I8 a; u) |' _1 n+ v. j" r

( f; ^9 a5 o; B; E+ X3 U; O    int i,j,k,target_int_count=2;6 N& ~& v0 V  g3 W& H4 O
    char ch[2];
$ j/ G$ V' a, Z  b, i/ |# D3 v7 Y  h: a% R2 n0 `, s
1 s+ s( w3 {* y3 g! R3 P3 X

( M8 i; G' R/ J+ U4 }    upp_interrupt_count  = 0;
( w- E0 {9 J7 R$ t  ?" d    upp_error_count = 0;
: f" Y' R4 S8 W. N: @
: G) i/ ^; K, ]9 o    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 Y( H! |7 u! b' J
    // Initialize data buffers4 f8 ^% F0 k  t$ ]) J+ B7 \
    for (i = 0; i < upp_frame_size; i++)
$ W# [. A) G. O3 {    {! q2 ~6 \6 v0 D. J, R$ a
       upp_buffer_b =i;
7 s) s$ f# {* Y       upp_buffer_a = 0xDEAD;
. p: X9 O4 P- n. r- ^: k    }2 b& a4 A9 D# g* [

9 w6 p" O8 Z4 F& _- f    //for(i=0;i<1024;i++)
, b% Q0 Z: E  l4 R: S$ z    //    temp=0;, Q2 [: D" x: R6 z* h) W5 `) v* k

# x6 H: R& L. Z    //UPPReset();7 _6 n) n' O: @5 D- o0 E" s* B
    /*启动UPP DMA传输*/
9 u! s# s, _: L* j; o3 H5 O$ k3 _6 I    UARTPuts("upp_prog_dma_i\n",-2);% {! f" L* E0 W+ V) h( O
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& ^8 @6 W6 {4 W) d0 j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# n$ a  ^4 ^8 `/ @( r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 A9 P% @0 |. F7 e. }( [' a! B1 Z4 l! Z6 {' o" \. C& K" l9 S' q' b- F
    UARTPuts("upp_prog_dma_i\n",-2);5 \4 k& T1 t9 y% J1 T
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" c! I* s1 V1 Q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 w7 v# h, t% e8 J1 d  M
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);2 m' w/ O9 O6 z
( t( Z/ A+ j  d2 L' S
    /*等待UPP传输完毕*/0 j2 D- R4 S  R3 ?% J, S
    //i=0;
7 i3 }0 ^) T: I5 n    //j=0;
+ Y4 p- |. R& ?9 P. d/ e$ w6 _$ u    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! n# j/ ^5 W; u) W7 u
    {
  ~+ d7 G# t! P8 @        /*  测试UPP传输的同时操作普通DDR数据
5 S- {. P8 [: r8 z" |        temp=i;
8 D; x  L4 ~' @4 |8 g        i++;* N  ?) _0 H% ~% p2 ~2 o1 l  d: w
        if(i==1024)
' v5 j+ R( W$ `5 f        {5 T# Q4 l' i& c2 S; r$ A
            i=0;* C9 Q& |. Z$ t: k
            j++;. ~% ~& m6 Z5 e* j% W3 r
        }! a; N7 m- v: H* |! y
        */0 [0 l" C1 c8 F( S
# E/ C1 U6 j& D7 Z5 H+ z( x
       asm(" nop");. u3 D2 z% a. L. u, N

. R$ O/ J- _  U% i       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, z  h% I; y' c. W& `. y% s    }3 R/ E9 i2 e1 b

2 ^9 j( M) p9 R# W    /*检查UPP传输的数据是否正确 (loopback modes only)*/' M$ j( G5 P0 x- R
    //UARTprintf( "i=%d\n",i);
# Y5 l3 G( H- C% y1 d0 ]+ Y    //UARTprintf( "j=%d\n",j);; a  D% V1 B3 Z2 o: \* L" J
    UARTPuts("Data mismatch in buffers.\n",-2);4 S2 V. ^8 P3 p2 b8 b" h  {% }3 C
    if (upp_interrupt_count == 2 && upp_error_count == 0): J; {3 m# e- Q; h) w
    {/ B# ?0 L+ p* |, ?6 I& |
        for (i = 0; i<upp_frame_size; i++)  b- y' K, w2 I. ~
        {
, S' \* Z& s7 {( d) x0 K            if (upp_buffer_a != upp_buffer_b)9 }& @$ p8 w: S
            {
  F" T6 {( ?+ Y                upp_error_count++;9 \4 m% W4 ]6 k
            }
. a: B; C* X5 ~" O3 ]2 a- m4 R        }
( x8 r6 p* a. `4 ]* p" @    }
! p0 i# W1 y0 \$ J  |1 i* O0 n- `0 [/ ~/ o* D* R
    /* 报告通信结果*/% F* D! o+ n) S+ Y' s
    if(upp_error_count != 0)
' k/ I; b9 R8 L. A0 t        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ ^2 C0 L+ o& |1 B    else
! n& q/ D9 g+ I5 D+ u        UARTPuts("uPP transfers complete!\n",-2);
" `, J' T/ t- H" G# C" z1 ]4 l& r$ p' B5 d) I% n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 K! p. f) O8 V    UARTGets(ch,2);
' P: r+ Q6 a1 X/ w6 S! T1 B6 q; Y    UARTPuts("\n", -2);
, Q* s7 o6 D% n. d7 k) Q4 x* Z- O1 p
    if(ch[0] == 'y')& M/ z* e# v* x7 Q6 {9 _
    {
' E. ]8 X1 v% W  c1 y        /*打印全部读到的数据*/: T. [8 j9 y  Z: {
        for(i=0; i<upp_frame_size; )
9 X  R" e% [+ E1 l/ P% |) q: _        {
4 O( B4 O5 X+ W9 x6 Z% o            for(j=0; j<5; j++)
' a$ }% s( Z( g; C0 ~7 N            {( l9 }) Y2 n1 J$ }4 @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% B( W* O. }0 l4 K- ?/ s9 z                i++;! O) v% ?6 z; x# K& ?3 q0 l  d
                //if(i >= 4096)4 t) W; I* r9 h' g
                //    break;; h; o) w, b5 _/ U0 C# \( i- T

; ]7 O9 ]) `9 ]- Z            }
/ ^  ]9 t0 e9 \7 z, {) o8 F0 d            UARTPuts("\n",-2);
: B8 \0 e/ P6 E        }
( ?' V2 h& V( M    }8 [4 `7 N) H) V% c

1 {8 v) n4 z1 n4 u2 ?4 I2 n6 @}

% U! I  K  D/ }% O5 G
. O: t7 V4 W5 b3 C( M  @9 m4 y1 A% s. e
4 N% U0 ?5 Q: L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, `  h) I, J0 ?3 c% R
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" t; m  l  L: u





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