嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! W+ `* M4 Z* l" `/ t" ]: h
Void UPP_TASK(Void)
$ P# C* D/ i5 E' `+ J9 }{
( F$ e2 Z9 [' s) q/ I, ~0 v( R' g7 o7 x6 n4 m
    int i,j,k,target_int_count=2;
: Q  O8 u5 O# R    char ch[2];
" I* J2 P$ y4 Q. V; @/ s& e9 S
8 u" R6 s+ `  L$ l9 w; K, x, {5 v# X' t! x1 F3 _% T/ _+ r! `9 j

+ C! K6 `6 a  g: z# \    upp_interrupt_count  = 0;  p8 g0 A# [1 O* o6 }
    upp_error_count = 0;
# c! K- Z1 V; K# g! L2 r! ^6 x' z* b0 s0 n
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ G5 z% }, \+ V7 ^    // Initialize data buffers4 L& v$ E2 i* |4 b
    for (i = 0; i < upp_frame_size; i++)4 v1 P" q# p& M3 w  J( K
    {
7 }7 |2 h8 v8 [$ V* a- g       upp_buffer_b =i;
2 T/ J: _" g' c       upp_buffer_a = 0xDEAD;( I+ O8 ]* t8 l* b, R
    }
* |% v  p# E. g) B7 T7 f3 M8 y; ~: D7 T# N+ \6 E2 O0 T9 q4 P
    //for(i=0;i<1024;i++): X2 G. H) {8 I8 d4 V
    //    temp=0;# ~! B$ L0 n  ~! H  k+ M- E
7 |$ z- |& y0 o  q
    //UPPReset();
0 _+ j# x, n. e" @    /*启动UPP DMA传输*/  u* g- b6 G3 @' W  O3 M/ l
    UARTPuts("upp_prog_dma_i\n",-2);
* a; `/ w$ q' ~! e! X' {5 p    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 c. q' z8 C- J% a
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ E: |& M- X! A, D    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 J# m" e. i9 @5 z9 V$ H
. F6 n/ s9 D9 v/ z9 v1 A. O5 F    UARTPuts("upp_prog_dma_i\n",-2);1 U/ Y4 j; F: Y1 h% T, s# n: Q* f
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! v/ ^3 B- e4 ]6 ]/ o) H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: z/ e1 E1 }% l4 d3 N$ S# H4 o- ^
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 o* k4 r% c5 _2 t5 t9 g. P# F. H
$ n4 y5 H& [4 |6 J: ~    /*等待UPP传输完毕*/
8 U6 h5 j" h9 x5 t    //i=0;
( y2 P+ v: N, M" ]' |. {! h9 J    //j=0;" l( s0 j5 V; [/ D7 v, \9 d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( j1 g9 N0 d) A7 X    {" j% n8 m/ s0 u4 N: r
        /*  测试UPP传输的同时操作普通DDR数据, G6 L- Q! ]* p9 E' c
        temp=i;
7 X' ]! K+ [7 Y0 v" `9 E# u: v        i++;& L; y6 @$ F* W+ p% _. {, D$ ^
        if(i==1024)
1 {  ^# @! i/ @8 ~' m3 d. U        {+ _6 y, ^! u1 E0 c" }3 ?4 Q7 d
            i=0;
* G4 M; x/ K, s9 i            j++;
2 P+ a4 c* Y" h        }) R, U- G0 L) g! Q* g9 t
        */0 N8 o; ]- r9 \& X1 _# F
8 ~, B% v% P" C. c! {
       asm(" nop");6 t1 I( `' W! _, J8 o4 q9 N

" E: H: [6 n7 r/ m( `. X4 p2 v" C* }       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# p- J4 _- R, @3 W& `5 N1 F! x
    }( j0 q: K/ n8 |/ @; R* s

' i& X  ^' g+ r& X& `. `. z# A" c    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 ^1 T) a8 G5 S# |- z$ [6 k
    //UARTprintf( "i=%d\n",i);! a0 S% c. }/ V0 G) t
    //UARTprintf( "j=%d\n",j);
$ b2 l) m. O2 X" n) w    UARTPuts("Data mismatch in buffers.\n",-2);. G. ]7 Z. Z  M! H7 l+ I
    if (upp_interrupt_count == 2 && upp_error_count == 0)
: \4 ^- E5 d+ S. m/ w% r! x, W- x    {
% t' Z+ A" l" H* z        for (i = 0; i<upp_frame_size; i++)
: B+ C8 O4 J9 q% K) {( T% y        {* Y8 N1 R4 {: C, @+ B/ O2 D
            if (upp_buffer_a != upp_buffer_b)1 O& u! R; I# k: S: U  y
            {" [$ t. D& S* Z9 A! ]
                upp_error_count++;
7 W- o4 O" X# b: d3 ]& {            }
' C6 z$ s( P) ]3 a+ l% ]) N3 ~        }) ^8 Z! x7 j: n8 W
    }' b" [6 a/ ?  a# u+ |6 e5 _

8 Z" {0 E4 L7 u    /* 报告通信结果*/
, a4 h; X$ |2 i* k    if(upp_error_count != 0)& \0 L- }8 ?4 Q! H0 o8 Z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 A' o0 Z: D- D' I
    else- o# Y' f- t6 c9 `3 u$ j
        UARTPuts("uPP transfers complete!\n",-2);& V9 z4 ], Q2 E  \
9 E7 j' ]8 L" ^7 k- l( {) c
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ q" p1 K. b/ V! X9 d5 }& Z7 q. t* f    UARTGets(ch,2);
% N/ Y' `1 ]: B; `0 ]- h: p    UARTPuts("\n", -2);6 \  U* \) V' n# w5 r! N- M

# k5 y) ^4 {5 V& `    if(ch[0] == 'y')
" v! n: b# D1 o    {
4 p" I2 w+ Y$ C' N  |+ G        /*打印全部读到的数据*/; V5 v: {# r4 h* |' m0 l, h  e
        for(i=0; i<upp_frame_size; )
( |3 p" h$ R1 B3 x! o4 N        {
! v. l0 @7 ?7 o% S' i            for(j=0; j<5; j++)) a: N2 q8 L# r# A( }' Z' Q2 i
            {
6 B. ]) [; ~* R* n! ^. J# L! m0 C                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ d' U" ~% K: }3 V8 n  J/ c
                i++;
& e- E$ a6 C$ i                //if(i >= 4096)" {/ W( z( ~7 R7 r3 p1 i! y; y6 R
                //    break;2 E9 ]% m+ L' G' z. o1 W0 A
( j# f1 A. a+ q
            }
- i  S: \' p# {( K            UARTPuts("\n",-2);
( n5 y3 a- h  B% ?" B% I        }
' M: x& \5 U6 Z- [    }: [& L3 V* d! z( n# j; W: d
4 S/ k* C2 K8 t+ u" s
}

! V0 @# C" C$ s9 \
& a* @, {6 J- i" t! t* |5 R7 b9 k
. G8 G( g+ P8 g

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! A2 e/ A8 D: P" K9 M' Z) x

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 h* y3 _) K6 X





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