嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" f( K  o3 l; V7 P3 w# c6 K1 ~0 n
Void UPP_TASK(Void)" @6 d" }9 `5 v
{  L& j: T, R( V% p% l

, g4 x' U" c' ?1 G) A    int i,j,k,target_int_count=2;
5 m3 T1 p7 N7 _4 g* C$ c    char ch[2];# Z" b, q& [  \9 I

2 ?; I: E: I7 J& u2 d4 A3 g8 F' n/ P( H3 ~( c6 q

1 W, d. X0 s  }1 c& d$ {    upp_interrupt_count  = 0;6 C& k( b+ p) h( m
    upp_error_count = 0;
5 |# e3 {, o+ ^+ H
/ r; I* p  M" \    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  q0 _6 ~% Z4 ~3 [    // Initialize data buffers* t9 v" r3 y: S5 o. X
    for (i = 0; i < upp_frame_size; i++)
2 y1 X8 w2 p- K3 ?& @" C    {5 S# O% |: W' `# ^
       upp_buffer_b =i;
- I2 J' V. D8 N* [; h' @       upp_buffer_a = 0xDEAD;
5 o# P8 {6 Z" g- p    }
: S* V% q- v+ U, |' \4 H4 J7 D5 g4 @, a; k: H. U
    //for(i=0;i<1024;i++)
0 e! B6 E" L1 h    //    temp=0;
% c; R) t- R, i/ [8 ?% F+ w# g2 D) C" i+ O. f
    //UPPReset();
- a9 `: g- F) v% m" ?$ s    /*启动UPP DMA传输*/
; E9 u9 o6 r7 Y2 z    UARTPuts("upp_prog_dma_i\n",-2);5 i/ }1 W6 L0 G3 d
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% Y% a* b; I9 n    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 A/ f, e0 N7 p* p2 a: o, r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 @: w" f. f9 h7 j
1 l; @; D* L* Y( V. P
    UARTPuts("upp_prog_dma_i\n",-2);
/ F9 J3 J$ N( ?8 j5 k  t$ e    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 f1 h4 i4 {8 E
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% m( q4 b, y4 g7 Y% d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- n  H4 }/ m  u1 M# m+ k# o+ n/ ]1 R# P- L( C6 y  ]
    /*等待UPP传输完毕*/( `. J5 h. g4 a6 F$ \! g
    //i=0;3 J" [1 N1 ?7 A+ k. i+ l9 ?
    //j=0;
" z. H- o6 v* L3 J% K. w# [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ }7 N% j  n3 X6 x    {
9 ]. o$ L1 V1 m" x/ _        /*  测试UPP传输的同时操作普通DDR数据
" p. \0 Y2 y$ B( ]  A        temp=i;1 u5 s) R! @, v# E( i9 `6 k
        i++;( L3 \& M0 j/ k$ r" H2 [
        if(i==1024)
( T- i' Z8 S# z7 g        {- b1 b, G. N: t' U- k
            i=0;
! J2 a0 v- J0 B- j' W  i            j++;
7 e% N* e5 d1 a: b        }
2 N# m% k3 S7 d1 a8 {        */
6 |# Y' r$ T7 _
! Q7 U6 N( S+ |6 `: o7 A       asm(" nop");
- ]# `- f) f; j, K
7 o" O! `+ B$ B! Y: c( [       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ l3 X, x3 Y0 h' A5 H7 D
    }
: ~5 U: I  T* @& E) U$ W
& G( X+ `, o3 b, J# x5 p: W. ^    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; \% l$ J) a* r; B4 X) Y. j    //UARTprintf( "i=%d\n",i);
" m0 |; P* ?& p+ i! ^    //UARTprintf( "j=%d\n",j);
  K. S7 i) N/ Y; v! Y6 _4 J    UARTPuts("Data mismatch in buffers.\n",-2);
3 A9 ]7 M! Z! R    if (upp_interrupt_count == 2 && upp_error_count == 0)$ v' @- G/ r# K
    {( D( P; m/ D( T- o$ G1 i/ `
        for (i = 0; i<upp_frame_size; i++)* z( d2 X3 J2 z! H5 t. ?
        {
/ m* J' }$ Y  a' m3 A4 ^            if (upp_buffer_a != upp_buffer_b)3 Y! y" S+ y5 ]/ A& j1 P
            {
& k, @% a$ ?+ B7 A5 a6 }/ I. n8 o3 K                upp_error_count++;
: O$ q" b+ X; k- ]+ ~9 D            }
& r; i, c: V) v        }( K. G- G  e: Z: t
    }
4 }# u- R1 S# B
, V+ D: i, S2 z& l    /* 报告通信结果*/4 M- X; Q% ?( _2 x3 A9 m6 I
    if(upp_error_count != 0)2 B3 g9 W7 t' ]' X
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  X* |- f7 H" ^. v, @3 D
    else( j" A% T3 ]$ G$ D: Z; Y- w
        UARTPuts("uPP transfers complete!\n",-2);1 ?* N! s" \  p1 e. N5 Y. Z( h' M

% L' A& _4 k6 i1 Q. A    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# ~# X2 w- X$ J) J4 t    UARTGets(ch,2);
8 S3 E: j  K  J" V* Q  d( l- _    UARTPuts("\n", -2);3 E/ T! B7 r3 b3 R) t6 J3 Z
& _. U% `8 ?& p
    if(ch[0] == 'y')
% ~" |  e; s9 _0 X' W$ d3 W    {
+ N& Z: K+ }$ b( j2 C6 }5 m        /*打印全部读到的数据*/0 ?: I, O! `2 r( b: {2 `. H! b
        for(i=0; i<upp_frame_size; )
" a: w3 M  v- }, g        {
" t6 s& s5 I  f) k0 d' E. |            for(j=0; j<5; j++)& X( w0 a! s. T0 o; M+ X
            {" J4 Y0 H; R* _, e2 @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ l' Y% B. b* B7 X1 _/ @- E/ E7 `! W                i++;4 P6 _! F/ G* U. j" [
                //if(i >= 4096)2 S! m) k& N( D$ `
                //    break;
. l4 X1 @! J6 g" M) {8 Z# x2 s- k0 C; `2 ^8 T' X1 J. J# x  A) [- r
            }
% ~% d% D2 [$ {0 P& r, Q+ |            UARTPuts("\n",-2);$ N. j/ R1 k# i; x: W6 Z
        }
7 \9 _5 s+ u" ?5 D0 A7 f/ Z    }( p# _1 C3 a; c

6 F2 I. P. i$ v# p. E& \) S}

/ u0 U: a1 G2 R$ e2 Q: }
. W+ b9 h/ D, Z- {6 f- Q. k2 b

3 N: G: d! r. ]( {  s: ^% X3 o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& L  z$ d$ d' Q, D& d( U
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ v0 `7 W5 Z$ v" J





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