嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 N" e: V% u& J0 T
Void UPP_TASK(Void)
8 T. W/ Z5 l  M# Q* j. `{+ d/ M8 w5 }$ Q! u

/ c- z. F% |' s- p  u    int i,j,k,target_int_count=2;
& N( ^/ P0 Q, R. i- A7 C/ ~    char ch[2];+ E  x9 k4 n7 }' ~, O( z7 L) ]# }. ?
, b& H/ ^+ h4 @
. n6 i' X+ E, @. R  ]
  h+ P( F. u7 A( K4 d
    upp_interrupt_count  = 0;4 I' Y; f4 Z) k+ t9 ?7 I8 K
    upp_error_count = 0;
5 p& M0 L* D$ W. A; h* |$ ]
& p- Y" R' E3 m9 w6 f' ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ y/ ?0 q4 M" U% P3 m) C    // Initialize data buffers
9 N% X$ H; Y8 W$ k5 o* I+ ?2 o    for (i = 0; i < upp_frame_size; i++)
( |1 {  I0 B  @5 V# K    {- }0 K7 ^, D$ E
       upp_buffer_b =i;
& \1 R2 s; Y( _: \3 K4 w; ?+ I$ \       upp_buffer_a = 0xDEAD;
3 [# C% @1 M, U$ A1 g8 B# D5 y6 }" @    }
- @% f! @8 ^; `. Q! |$ |# A, o* n$ g2 i& i" R
    //for(i=0;i<1024;i++)
0 {% m, V& H4 t- y4 q5 h; N* W; y    //    temp=0;
" n; s' {2 Z( G8 b4 T3 ?. U# {; Y+ o. N
6 r/ B% h' d& q9 ^2 K* w9 D    //UPPReset();5 D: w' g5 E$ }2 u' ?' ~
    /*启动UPP DMA传输*/1 I& o. d- {* E) W+ \- T( u2 Q
    UARTPuts("upp_prog_dma_i\n",-2);* ~1 Y& o0 I3 C8 g4 R5 O  i/ b
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 T+ Z8 V$ V- w" J: n( e& v5 T6 L; g
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  |+ k5 R7 W' g5 r
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) F! n% `' V; y5 n4 q6 U
3 j! R2 u- l  a4 ?: t2 M
    UARTPuts("upp_prog_dma_i\n",-2);
! l- l2 y  B) H- G0 c5 U' C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  c/ z1 D2 S3 i2 S7 ~    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* O' B% m3 _1 P* ?7 S1 ?% o    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; u0 W, p* O2 q% U- P/ q; N* ]# b( Q" ?: \; B  S3 p( g: H
    /*等待UPP传输完毕*/
" N& A  w/ I9 P2 H: m/ Z    //i=0;
  N- Y" M) l3 x    //j=0;5 x# l- j0 H# T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' f9 P$ r- p, H/ v, T  ~$ ]' @    {
4 q" n0 [+ S7 r: U  o* D        /*  测试UPP传输的同时操作普通DDR数据
0 y7 P3 A7 o( u        temp=i;
) k! {! o8 ~2 }6 M( G" Z        i++;
( o- `. [: t4 S        if(i==1024)
$ J% E% P- [/ B        {3 j4 M& x! ]( `+ G
            i=0;+ o) e# \( X' W" _+ Q
            j++;: @! R' o5 ~# `
        }
$ L7 K& L6 R; x7 t, s# J        */& x  a1 N9 B$ E
3 A& n+ S1 J) g  I& E3 f' j) {
       asm(" nop");- l/ @$ t; Z, p2 F; q: ?2 M. }

/ E" T( T9 l, \% }6 M  h8 c1 V       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! _. [  A. a: |
    }
0 O9 J4 Z9 k3 i! G$ h" u5 u; l0 E0 g* z$ @
    /*检查UPP传输的数据是否正确 (loopback modes only)*/& [. ~/ ~! e3 g* C
    //UARTprintf( "i=%d\n",i);( e1 w; d1 k' s5 Z2 H
    //UARTprintf( "j=%d\n",j);
; h- x' |! Q' |( D6 _    UARTPuts("Data mismatch in buffers.\n",-2);: L& J9 L$ X' M4 m6 T- Z- S! m$ c
    if (upp_interrupt_count == 2 && upp_error_count == 0)) k2 K4 }1 ?; y$ L, y" j1 j6 x
    {
4 J1 p( @. N8 I/ `3 C& B        for (i = 0; i<upp_frame_size; i++)/ C; s2 a3 j8 V! e8 ~8 J/ O0 ?: F
        {! A, Z3 W, A9 |$ f. i# k$ g
            if (upp_buffer_a != upp_buffer_b)
  I3 v+ T" q) U8 T( T& @0 l            {
* [, ~9 W  \! A; {$ U3 K! o                upp_error_count++;
: q7 D8 D3 A- x  O( O            }
( n; g: Y1 _- k, E$ E+ O7 {/ c        }/ N0 Y- d% Y5 r( B
    }* k8 N8 K  E4 v- \+ D- |3 u' C, N" c

0 t( X4 j# k$ `1 |    /* 报告通信结果*/. p& q; N1 \+ X" H+ e
    if(upp_error_count != 0)+ k1 h6 T( v7 N4 L# v4 X
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 q6 v0 H! F# W' R/ S/ a/ t    else
8 ]3 l. k+ w' k" J        UARTPuts("uPP transfers complete!\n",-2);9 K. R) y4 ]# N) a" e: |
7 h  B* m* H& i0 s. B$ w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& W0 x$ |) s, h6 R3 A- Y
    UARTGets(ch,2);, y2 \4 p$ D4 m* c
    UARTPuts("\n", -2);  K. G& m* S7 Z% }1 v0 x" f

" R6 \6 o) g$ w. {. e    if(ch[0] == 'y')8 y5 C! \. H) \6 L* l" V
    {
3 C7 k; p" Z* V8 P! I; |& x3 R0 i7 e* [        /*打印全部读到的数据*/0 T3 J6 S- }7 c5 n# ~  l! N8 F4 b+ P
        for(i=0; i<upp_frame_size; )4 f) s5 G+ I4 v8 g- X% W/ g
        {
/ \/ A% z! L0 F            for(j=0; j<5; j++)1 v. ^5 e! i5 j' T2 K) b# q
            {2 V& J2 s. j" \+ d! V
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 n$ o# e' t: s; F5 O% N5 o% G
                i++;8 G' U/ {+ e' I7 I
                //if(i >= 4096)7 D' i; R$ E0 D+ F
                //    break;
3 S; o" K/ C2 E  W7 A
$ b& W' h( E9 W7 F2 x            }
" w! J! e8 \" F: Q' Q, d            UARTPuts("\n",-2);
% h+ D" }6 b7 b  e# ^        }
2 d% d" a6 G  i0 e    }
% E+ ?8 |' h! |# g8 ^. U7 H9 i
- j& q9 @9 s' z+ c}
' s3 v7 b3 U: w& \, `

; N* J9 T: O  u& h; Q9 c; T
" B! w# D4 W3 }' [5 ~. K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。7 m3 K/ T( c1 y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' w& Z3 S, |4 J" `





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