嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: s3 @; P9 ~2 j7 w7 p
Void UPP_TASK(Void)
8 r8 _* T* S: \9 C4 F: ^{
, f$ j2 f* K* N1 J2 a- k
- _. ]0 F# y0 k1 r$ y    int i,j,k,target_int_count=2;2 m( o4 ^3 t' D) i2 u+ ~
    char ch[2];. O& o9 o: R8 i8 R4 f, N0 D
" j" S& W; V$ r. M, [# k

7 f: b" p9 v: _' X, u5 u" Z" l/ R! D
$ J* u5 R" A5 R3 W: f$ l    upp_interrupt_count  = 0;
. }; S% u7 o! l! `2 d    upp_error_count = 0;' ?+ w- k  P, |* d8 ?

- s7 F, j, j2 P9 h$ h/ v    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% b; a. T$ t/ ]- f1 n: I+ V    // Initialize data buffers
7 B5 J& G0 Q: w6 W; g    for (i = 0; i < upp_frame_size; i++). x* v6 n- ~4 Z! R1 ^
    {
0 @) b- N& I% ~' ]1 E% |       upp_buffer_b =i;' |3 s* w/ I0 }1 b, ]% V" G
       upp_buffer_a = 0xDEAD;! ]8 L6 p5 c9 k+ X: a1 w9 i: A
    }7 F7 {# `+ l: ?5 C

  R6 x8 s3 m( x) G% M7 e    //for(i=0;i<1024;i++)
: ]4 \  q; Z0 A. O" k5 V. t0 e* R    //    temp=0;
- k4 L# k+ N; n$ @. R2 _
; D' Y7 O6 k2 K( e. K5 e    //UPPReset();
  u% Z6 U% ~$ Z    /*启动UPP DMA传输*/
  T  n1 ?6 k( H    UARTPuts("upp_prog_dma_i\n",-2);- f/ T2 ]" q9 M$ t9 B7 s4 @
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 H. i7 Q: R+ S7 y- T5 M
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 G2 ^" G9 `: o7 V0 ^7 ]& O3 q  q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 u% q+ ~1 n& C! L$ G, u# R* l

; s/ G( m6 h. C# z% l5 U    UARTPuts("upp_prog_dma_i\n",-2);
& I9 i$ I" q" h( E+ i    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ D7 p) M, ?. x9 a3 I    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: L! Y7 R6 M% T# C( P0 `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  W) C  @' k* ^2 ^# F/ }% A

) }1 @+ W/ [  z8 q9 j    /*等待UPP传输完毕*/
6 S  ?" V- ?- Y1 U' J: c    //i=0;/ ^+ v9 P) y+ r# d' e
    //j=0;
7 ]3 `6 z( M3 T; |; g: u    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- T7 K# A- G4 v; U- H    {% L/ ^+ h9 E7 ~% K  L* q( ?
        /*  测试UPP传输的同时操作普通DDR数据' U/ v  Q* j4 t
        temp=i;
* H- I  j/ \" D, g) [        i++;' t, T$ q5 e6 W: E4 L0 n, ^& L
        if(i==1024)6 r: F7 r& R! H7 G3 L- c
        {
& [* `% _& T% s& @            i=0;' g6 i* P# @7 R% }, ^' Z: l! k
            j++;: ], @2 n% {" P& {+ d7 p
        }
7 q, E4 a0 `6 Z- d        */
% p7 n& H8 \! q# ]
7 d0 {4 G/ a# T, _* n0 c/ \       asm(" nop");% {5 {" N0 w' i9 z- S9 H/ J. D
/ l# A- {0 _8 j( f8 {0 t
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" ?' G7 I3 Z2 g    }
/ ^4 {7 b9 b- Y. r* ]; ^/ D' s" s9 h( I9 V9 |0 r( K1 T
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 @8 v( m9 ^2 P' S/ j- G    //UARTprintf( "i=%d\n",i);9 P6 d& P  U4 E$ u% E
    //UARTprintf( "j=%d\n",j);# H9 D2 A: N4 d
    UARTPuts("Data mismatch in buffers.\n",-2);
* \: \0 m; N1 \$ J; k    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 r3 F6 V  [" {    {2 J  {; x+ Y! S- H
        for (i = 0; i<upp_frame_size; i++)" A% n9 \! I9 Q: `
        {6 p/ ~5 ^1 x" X2 v& o
            if (upp_buffer_a != upp_buffer_b)
. g  J0 p8 K8 B0 c1 j            {
  [. {0 ^; k# B* i8 b1 H8 u3 j4 Q                upp_error_count++;/ M2 W2 Y  D4 U# W- M0 E: G
            }
6 r( `7 N5 Z5 K5 V' [; i9 V        }
+ ?. ?5 P" Z3 h' _9 X    }
# J# p5 P& i3 l6 [: C  z4 D/ R- G* G6 D* h
    /* 报告通信结果*/
' ^6 j2 V7 A) S+ v- w" B# R: }% k- M    if(upp_error_count != 0)
' c3 ?; z6 I+ U1 H        UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 k1 ^( i' Z; i8 y0 d7 d& A    else, F- n1 @* M1 Z& c1 g. w8 E2 @1 ]1 B
        UARTPuts("uPP transfers complete!\n",-2);" s: c% W  C/ P, Y' R1 g" H

6 c% a- E4 z& F1 N# E' N    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' v5 o. y4 C, G  w9 D, U    UARTGets(ch,2);
* j/ A8 g4 y+ g; }& R: H& a1 n    UARTPuts("\n", -2);
$ _$ Q3 g8 m* Z' @4 u2 R! {' l) S$ [& I
    if(ch[0] == 'y')
: T* j* _/ A) I; j9 g# o    {8 G, X" k! V2 x" R
        /*打印全部读到的数据*/0 h3 g  r3 q/ T( n
        for(i=0; i<upp_frame_size; )
+ J: l/ H+ p! H: Y- z8 q4 _- v* m        {
( W" _- q# p! x  F# y            for(j=0; j<5; j++)
4 |+ Y6 Q) x7 i$ {            {
& T5 O7 T# X6 |/ w8 \                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 O5 ~$ X+ W- x  Y6 r                i++;8 Q. Z2 \; p  I/ N$ N! N
                //if(i >= 4096)3 D" b$ [. M4 E! p* q/ b
                //    break;1 g/ Y' l0 \2 {3 j3 I
# J, |3 Q/ H* H6 ~: B
            }
$ Z6 X- R+ @+ |; a1 z" ^            UARTPuts("\n",-2);
3 P  O; X/ U+ D; ^        }
! S" b0 Z' w3 w* p4 v$ ^    }4 p0 g; `) @2 P9 Z% z' C! a
1 T; u$ q& Z2 n- G5 \
}

* }# n- t- ^; ?" R
; s; S% ^% n( w; o! G- }- U9 V5 ^. x2 ^

4 {9 w( I* M) R1 y+ S
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 L- [4 M1 W# [* L
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ u' x; F" @3 z* f# k- v




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