嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. F: F- g  @  |
Void UPP_TASK(Void)) d9 m. t& j# `" ^
{
. C& P& |, {) ?
8 V3 ]! l9 T# ^4 ?) h( e! z    int i,j,k,target_int_count=2;- O/ k1 E, w0 N' {- P( s5 z
    char ch[2];
2 x/ a9 L5 O! p* G) B! t  z' @
& h! C# e7 ~  U  L3 D$ c
( L. e5 j* V# X- U1 e$ i  \7 t4 n5 l  u6 w5 g! R; r6 O3 a* p$ ~+ p  c' ~5 Y2 W
    upp_interrupt_count  = 0;/ |& X' i; ]' _4 E+ @5 X6 Z
    upp_error_count = 0;$ ^5 Q5 v! l9 n. x

$ c6 F/ m* m' ]" k- H$ `# B- [    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, z- F2 m4 y/ J4 \/ a* ]: n/ q    // Initialize data buffers6 |- {+ b& s* Q0 Q  {
    for (i = 0; i < upp_frame_size; i++)
- Y  w* p: `7 F; M    {
2 f, n7 M% n* ?- M, [# L1 i       upp_buffer_b =i;
2 M  F8 [* t, D4 @+ |* X) b# I       upp_buffer_a = 0xDEAD;* k5 ^5 C. C: i
    }
3 B: d& z. X: O, [* F3 d4 \6 A+ Z. ?; f
    //for(i=0;i<1024;i++)+ R& n- J9 _! g$ @# O
    //    temp=0;" q! a2 }- B6 h+ P: N

/ `! {! Y7 O7 o( B5 B    //UPPReset();
6 g6 M! S- J9 x1 i* e! `& ]    /*启动UPP DMA传输*/8 g4 b1 p$ ~( ^
    UARTPuts("upp_prog_dma_i\n",-2);
! D' X2 h" J. ]2 A( @    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& i% L# a' l: T) v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: D) @2 V" Z" A: z8 n4 ~$ m
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 S$ p% D/ i; }0 h" S0 x4 f7 [, H; f2 F
    UARTPuts("upp_prog_dma_i\n",-2);
/ R% p( C5 l* P/ W/ f* e5 e    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; I3 n& g0 Y+ ~8 E+ |! z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! J! ]2 z) J5 E* O  A    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( u; y, d+ `4 D$ R+ ^$ e0 k
$ @7 U0 a1 A5 m) a    /*等待UPP传输完毕*/
7 L- \8 ?1 m% D  Y    //i=0;3 t$ b- r0 Y3 \0 s* r9 X
    //j=0;
% B0 e/ L: x! w! i8 o* [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ C& [0 F9 Y5 I, c8 x& L+ i    {+ u/ O! p) g3 ?+ J9 t% l8 A7 g1 }2 n
        /*  测试UPP传输的同时操作普通DDR数据
9 a4 m- T: R9 O1 _( o# W# ~9 \) K        temp=i;/ Z: p( P, J" V* D( _% w
        i++;
5 `9 I2 K) c: t. f) O        if(i==1024)+ G' c$ N7 t8 q2 t: ^1 U6 k  l
        {
  k: g. g; |. O2 c- w            i=0;
# ~2 L/ ]! P5 A) n+ q3 Y2 a            j++;( b& l3 g2 a0 |& J- p8 T, B
        }% n4 y/ |4 h0 \6 i0 j  a$ e- O, x
        */
, V3 m/ `- J+ R$ B$ o8 L3 O2 O' l9 z* u4 K( {1 ?* J; S! _
       asm(" nop");
! O( h+ b9 Q1 Z, B) g4 W" @3 P1 N. z# K! O, x
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 ^8 i3 K; u0 H& B# \# f
    }- a# k5 h1 t. W
% _. L. B9 [1 n* E2 J9 _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/& l# W8 s) {& K' D
    //UARTprintf( "i=%d\n",i);
) q! ?! K) P3 E$ e    //UARTprintf( "j=%d\n",j);; h6 A4 h. \/ z: K- ]& p
    UARTPuts("Data mismatch in buffers.\n",-2);
2 Y+ @) Q6 F# H( [9 S7 E# e    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 P4 Y0 f  t! L- A  t  m    {# ~. ]* A9 \8 f* b/ w" l4 a
        for (i = 0; i<upp_frame_size; i++)
5 ~8 Q1 @2 p1 i/ u4 p, ^        {
8 Z8 H/ e9 a: L2 L            if (upp_buffer_a != upp_buffer_b)
8 a: z) v4 L5 Y            {$ I3 |9 j' f4 Z& v% I  `7 x
                upp_error_count++;
3 j# K  P8 n# L6 l            }( s( {* V4 K( {! B. m
        }/ R+ H) j; G# X/ l/ R
    }
% Z. u7 y! c1 `' W; V7 r$ k& N. Y6 k5 N) ]+ [! f
    /* 报告通信结果*/
; n- E  I: X. r  |! h8 ?    if(upp_error_count != 0)
# `7 f" c: `- C. K3 F        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 e, Q; e9 G. X    else; _4 r7 p+ }! [' F; M
        UARTPuts("uPP transfers complete!\n",-2);! y! U: T) ^* t+ Z) j/ Z* Y! ?$ h* J
! [( v: h/ M9 S$ t. x4 D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 p$ u* w# J2 _, Q& M9 k, q
    UARTGets(ch,2);9 O/ G0 K/ S1 ~; o) F  O
    UARTPuts("\n", -2);
/ O3 T% M( `$ u2 u; D4 ~& d' V3 }4 H+ x$ C- Q! z
    if(ch[0] == 'y'): y* W3 t' n- X% {+ M
    {: h( i; U; J0 i
        /*打印全部读到的数据*/7 Y- I/ Z; r# j% R
        for(i=0; i<upp_frame_size; )- q. C. o+ d- ?7 m
        {3 ~& w, h4 a0 f4 N# ?
            for(j=0; j<5; j++)
  h. T4 Q3 s, N' l$ Z+ ^            {
  B2 l- J' I4 y. X/ D3 B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 X$ @( H& \+ Z  |% q
                i++;
/ A! k: {( n. K2 g# l: Z7 M                //if(i >= 4096)
. e; q% H  n2 l7 P% q                //    break;; i. L/ f/ Z, y
" N6 ?0 \- Q* p2 `& x
            }
8 |( _$ o  q. _+ z, ^( W( l# Y; q            UARTPuts("\n",-2);
3 t! M2 A9 z# i1 M$ f6 G: ]5 i        }" A# U' o. j: y
    }' H! S2 b+ E0 V& q# a9 Q' T
3 A% l# D, D/ j
}
& E, m7 w- d# p0 u; J% p  J

# w9 n  N/ ]% y
5 t8 B2 a! m0 F; F- e# \
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) ]2 z# O/ \1 [7 ^+ w

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 h: V3 j3 {3 l5 l6 k: @





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