嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 U* J$ D! P' C# z: M% s
Void UPP_TASK(Void)
. R. u# }5 O3 a{
6 ^( m" C, \7 H  B- y1 E; i" F9 f6 u* f9 M5 O7 ]7 _
    int i,j,k,target_int_count=2;0 W7 g3 i9 x" I# B2 g8 F. V
    char ch[2];8 C3 O. K' g& ?1 N. A7 H

" j8 z$ `; F+ k" {
: _4 }8 c6 l  G" X. }' O- l3 w
7 s$ d7 I' T+ \$ M* j* d8 |* _9 M    upp_interrupt_count  = 0;
" R; Z: b7 {# ]$ C* E( W+ G0 \, r9 M    upp_error_count = 0;% h: j/ B5 i+ R; a9 D% O+ p

/ d" e' D' s0 e! V- B! o    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* T5 }8 m( e9 P; d, Z    // Initialize data buffers
0 V9 h3 B/ B" C  t# G3 Z    for (i = 0; i < upp_frame_size; i++)0 a! ^* X3 \) k) |9 e; l
    {; O' N% D# }+ P  A: }: |
       upp_buffer_b =i;9 ^* a- l& h3 _% t* b4 _
       upp_buffer_a = 0xDEAD;
- H0 i4 t* A/ U) ^    }; x7 P4 a1 T  Q! K! m8 k8 s6 M# W
2 v- @+ `8 R7 x9 G- ]. J
    //for(i=0;i<1024;i++)  B2 n) ]9 w- U+ q. Y* U
    //    temp=0;
; w: |0 t+ j# m* o) W& K( A# E
0 P: y, x( A& N8 P* y. W    //UPPReset();
* [; G# y  u6 J2 P2 P% M/ ]" N    /*启动UPP DMA传输*/
' K& |! L0 u- r  |' D2 \    UARTPuts("upp_prog_dma_i\n",-2);6 e: P$ V1 a+ C; J( [
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" g+ B  V% S* v& ?, N    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( v, C3 i. a1 _+ a
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" q  m, p( q$ z% y1 R

; F5 i  x$ i# t  E1 r3 E: {    UARTPuts("upp_prog_dma_i\n",-2);
. h8 _! P8 Q' c# a" }, X7 e, v    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! c% ?2 v5 a0 f# d; h* u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ P2 I' S2 U0 f( z' O) [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! t6 p! @4 A. [9 c2 Z* H
6 @# x! ]1 r8 P! s) H: S3 O
    /*等待UPP传输完毕*/- h8 ]& j5 R# Z; u0 U7 E. e
    //i=0;
+ a' M3 i! {9 V$ g4 Q; _    //j=0;
1 X" a8 P. `: a4 ~. t2 @    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' ~1 s: \2 E+ r+ w# [    {8 W" O( p2 n0 {7 f: _8 c) [+ \  n# |- R
        /*  测试UPP传输的同时操作普通DDR数据
3 Q1 k# z3 x: t$ l9 c        temp=i;
$ Y6 ~) g. z3 O        i++;
& |8 i' _7 z7 `1 ?        if(i==1024)
6 |/ X: I( _" O  M6 H- f        {# g; Y" y$ _3 [9 T
            i=0;, B1 W! N) I# j$ u0 ]- X$ s
            j++;6 N8 W( e; l5 \
        }% n: s3 R5 T% A+ K. |; P6 c- i; a
        */& {# b5 j' u. l) w/ s$ H
) j9 v8 Z: ^% H3 W! U" I, ]) Y! X" @
       asm(" nop");
! p; Y# P4 w. u5 Y  Y9 b5 l- a
* U7 _- Q( G# ?$ {+ g( Z9 l8 r) Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 Y4 R0 R. H4 y+ s0 l, ^
    }
5 D+ U7 b9 J; A" c2 o8 L
* U: S% ?# D$ t    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ R/ v. y# |. H( b+ z6 g4 w    //UARTprintf( "i=%d\n",i);' e2 y. e: C& ?' y. r' z
    //UARTprintf( "j=%d\n",j);7 Z# M3 P8 y( r0 z% ~' L: }) j; ~
    UARTPuts("Data mismatch in buffers.\n",-2);
3 I1 B* g4 }* ^8 f1 o8 q6 A7 R    if (upp_interrupt_count == 2 && upp_error_count == 0): H# x. O1 t* U8 Q3 P( M, H
    {/ ]9 o9 W% k# E6 A
        for (i = 0; i<upp_frame_size; i++)
( e2 X5 q6 o% d& K        {
8 |/ x: K& g, c4 x            if (upp_buffer_a != upp_buffer_b)) l& n4 v) U$ c' V; L
            {: C6 O& [# n6 q: T0 I
                upp_error_count++;
7 p5 D1 h* y( M, U* m; H' I            }
2 E8 [/ P" m) h        }
+ P1 \5 s; h6 V, L, A$ y% k    }3 M6 E( K7 |3 S  @
8 l- v, \4 R9 N' X" ~
    /* 报告通信结果*/
/ m1 N7 O6 m0 ]    if(upp_error_count != 0)
& X- @, o, L, j: {, s        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ P3 R. O) x1 X& C7 C7 T; t1 q
    else- g6 ?6 `. s" Q% ]
        UARTPuts("uPP transfers complete!\n",-2);1 }# F1 c% e. x7 Z9 e# p7 g* v) J4 E
3 l" Y% v1 Q6 M$ z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: k6 N4 g# W; Q5 k. I4 u( V' d. Q9 c    UARTGets(ch,2);  r  p- }) e6 q' M. g  I4 _
    UARTPuts("\n", -2);( l: T  |7 m0 @( Z( s

4 {5 B# W& O  T: T) |0 Y' r    if(ch[0] == 'y')
% C+ u3 w+ b5 N3 P, H* n1 u" |    {8 K% [2 @+ |$ W$ a
        /*打印全部读到的数据*/7 Q, H& O; p- Z8 |% D: p' t
        for(i=0; i<upp_frame_size; )
& |, ~4 S4 E5 A6 u& V        {
1 r) `: \$ l. ?+ d$ ]3 O            for(j=0; j<5; j++)
2 D- N- X" T4 E) S8 _            {) ?% F- {) [3 M, m
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 W" _6 ~) z5 F+ [- {# E" s+ g
                i++;& ^/ J( M. K8 l$ M& n
                //if(i >= 4096)/ J$ I+ v0 {' G( `
                //    break;
+ P' }. c* H; J; i0 |+ @. y- b1 Y7 i& m1 Z4 ~4 R  r
            }
8 w8 d" u& t  F, M6 w! F9 p            UARTPuts("\n",-2);) T+ N! q: K2 h, a( o( v8 @
        }7 O0 _$ T" E: X8 m
    }2 v5 L8 ~' X' r- S' b& J
# b6 O  z+ O8 H" H0 M5 Z
}
1 A8 c8 O, Y/ P  b% {% ]$ Y

4 T# O% h/ ]) i* ]2 }: `' K) Q3 c( j. \9 [

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% P  v; j6 B4 b
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& t2 f6 p. n; X/ j2 D2 g




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