嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  h! u6 V+ A7 s( O# z) [9 k
Void UPP_TASK(Void): e  G* K6 |5 w  O! `+ i! e: f
{
! U7 M4 J! ~/ A6 C4 ]* Z9 h/ ^0 H4 o  l. |& G, Q: o; r
    int i,j,k,target_int_count=2;* R) f1 ^( N5 o7 [! n
    char ch[2];) F1 c/ j4 D4 R5 Y" @0 X
  G* w% X0 n+ E  O8 t  ~

+ u" `6 W. R+ l7 R+ V* {
/ ]* U3 U5 S6 M0 ^- @    upp_interrupt_count  = 0;
+ {. n0 G: N1 A4 E    upp_error_count = 0;" w# x- `) N7 f7 z3 [  V
/ s0 J! o& u6 v* t' ^
    UARTPuts("\tResetting uPP buffers...\r\n",-2);$ W( a& C# M( H8 C8 v
    // Initialize data buffers
" Z% f. C# P" A& Q5 h: o; y    for (i = 0; i < upp_frame_size; i++)+ X6 E) A) d- e8 x
    {, ?) \& e3 [- a4 |0 B
       upp_buffer_b =i;
5 o/ E6 W, x% ?$ A- _1 N& H       upp_buffer_a = 0xDEAD;
/ ?4 x& @& Z+ P# T7 e    }
. T6 W. p; ]# m! S- _$ f% f2 o8 X/ O1 N/ C
    //for(i=0;i<1024;i++)8 c9 \& Q- g  P; B7 Q2 S
    //    temp=0;8 e# |) K5 H: \! R( u
$ S% c: I0 S: m8 J- d9 n( X# V
    //UPPReset();
' @9 r! q% F- v/ d3 M8 b    /*启动UPP DMA传输*/+ j) A$ v5 }6 u- w& [# \9 A
    UARTPuts("upp_prog_dma_i\n",-2);
4 L6 k. X: x0 E' i  o+ k0 ]0 a# R( `    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# K' ]( m0 }' W& C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' y7 I* i- @+ T6 j1 O
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, T2 [4 _! s; r  s
$ a! [+ j% _9 T0 F- O1 Q! [9 f- \( t
    UARTPuts("upp_prog_dma_i\n",-2);
+ |9 v: f6 Q3 N7 k    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; s: N/ M0 s5 w" f2 {7 [2 H9 |1 D  N    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- q" n3 L7 H- L% G, G7 W: q. c
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* K: l; ^9 N/ T+ Z" j- i, Q# C0 d$ L
    /*等待UPP传输完毕*/% D; r. M" N' i- V
    //i=0;' a( s  i* k# Q" p! D$ v
    //j=0;7 T' _. T2 \9 d4 \0 ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* v5 N& g9 @2 r    {
" o+ D4 q6 b% u/ e0 E' U1 q2 `        /*  测试UPP传输的同时操作普通DDR数据
+ q9 e. C4 T6 S! H6 p1 V        temp=i;$ |' W/ E2 T( l' ]; B
        i++;# ^% N9 \' v- g7 r# |. R
        if(i==1024)9 f* y3 H+ \2 y" b
        {
  Z4 {+ U3 A. @, g            i=0;
+ J! A, G" R" S9 C: U            j++;
  f; u9 ^( }: F. k% k        }
5 A% u4 g4 v% j# P1 S# R. Y        */
' A2 z8 l" U- [4 I4 |4 S5 j
  ^5 W  Q, T! d0 g' [0 R/ r       asm(" nop");3 m8 a: y7 k; \4 }1 K

+ q" b3 N& y* ^" w% R9 y2 R       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- t% Q6 s9 w' R# B7 `' _- E
    }( k/ D+ X9 z& p- _

6 l' y; w$ |8 Y* Q    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: k7 R' a9 p) p5 K    //UARTprintf( "i=%d\n",i);$ P8 A4 d: F4 M" T
    //UARTprintf( "j=%d\n",j);8 t" \% L# m; G" C: c1 n; V. H, V
    UARTPuts("Data mismatch in buffers.\n",-2);
5 A' ^1 M+ O! y* r    if (upp_interrupt_count == 2 && upp_error_count == 0)
: k* ^) R$ @4 F8 d    {  k  W# B) p. V0 L1 o5 V9 l: v1 z
        for (i = 0; i<upp_frame_size; i++)% y; b) S* F' K% w" W' U
        {3 _+ o& x6 F" p, L$ ]
            if (upp_buffer_a != upp_buffer_b)
: D5 O0 G7 [0 b- c8 C& y% M            {+ _% K' S6 p4 O: R* \# v
                upp_error_count++;
, B  w4 G, y9 {3 |            }
* F& f7 m/ d( p. F, [+ Z        }
8 J; j: m+ c$ ]" ]8 X! F# P    }
7 R2 W# K+ B% U2 d
/ R) X8 I* n# @3 e8 _) ^0 Q. A    /* 报告通信结果*/
" a4 u, F. M2 Z" L3 \3 S* @    if(upp_error_count != 0)
" z3 l7 K; o3 ~* i; J; m  }6 M        UARTprintf( "upp_error_count=%d\n",upp_error_count);* N& ^7 {7 z8 {9 ^% i
    else
: c* \9 k4 @3 Z- r8 q7 l        UARTPuts("uPP transfers complete!\n",-2);
. c0 Z  p$ C  b$ |& ~- \% D5 U1 m  ^8 N( z: p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* E& q& ^/ N7 v    UARTGets(ch,2);/ b' }+ [! Z' O2 o& P+ F
    UARTPuts("\n", -2);0 E$ h' _& z9 v
* Z+ T# B7 \! [. k% Q
    if(ch[0] == 'y')
! b4 P/ o* U) j  N5 u$ o    {& S# E" G5 S/ A! d. x+ }$ b5 f# `
        /*打印全部读到的数据*/& m2 u; e  Q% a6 `+ ^, r1 J# b
        for(i=0; i<upp_frame_size; )! H" u: N/ r. W% h1 o3 p
        {
% l8 Q. \  ^# F            for(j=0; j<5; j++)
; B$ H  \& p1 X- j. c9 J            {
  y2 a' Y9 a5 L+ s8 S                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' m7 p- Z! @0 y1 I
                i++;* ~6 `7 |' w  N& U' S- y/ H
                //if(i >= 4096)/ `7 F& \- j( s
                //    break;/ _7 |( Y& G' W6 T8 j/ ~, a

$ B0 Z, R+ n& [/ z" l            }2 l0 T' Y7 x! z1 t9 O
            UARTPuts("\n",-2);
) u( s7 q9 C1 t" Z% B, L        }$ ~% c* {6 L. E# `' t" m% [, E
    }6 M5 \9 h3 n& n4 t* ?

) j5 ]# ?; ~3 L8 ~}

/ V; L- U( W7 K6 c7 x8 Q: G
6 I! k! }3 I4 `6 `+ m* P4 n
. ~( u9 `8 i" x& B: U# \! n# ]0 ^/ N

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. H. g9 Y; A( l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ r1 c  Z3 O* X7 A  u




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