嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 m( D; G7 ^$ x( q" q8 F
Void UPP_TASK(Void)! H! b$ [4 m( `- \6 \9 c
{) v, j7 H. r: A% O* L* I& n
' z$ o. b. c) q4 v+ t+ U
    int i,j,k,target_int_count=2;
( J3 P% Z/ f; n3 e' U% ?    char ch[2];) d. `, L" L& j8 k: Y, _8 Q8 r$ V
3 b2 P7 d9 l: M* L" q# O

* W. d) b$ u! B; I  p+ ?
  |/ F3 C/ R; C- ]0 @# w    upp_interrupt_count  = 0;0 C0 n4 O. ~  H+ A1 Q
    upp_error_count = 0;
' [; `$ d8 k; r: b% U" z5 r* r3 k  K' Y
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 s; v8 a' V* z4 C9 k0 `    // Initialize data buffers7 u( a: E2 l9 [
    for (i = 0; i < upp_frame_size; i++)
+ l# c( K( i+ h9 }3 h& W" A    {
/ U( h' Y) ^- g* z" W. x1 k9 `8 J       upp_buffer_b =i;( g, e7 s8 W) J. H
       upp_buffer_a = 0xDEAD;
$ p4 k: g# z6 |+ b6 C) b% _4 K    }2 u4 X+ ~4 S+ S$ U6 }. f2 L& X

( m+ ^$ o( ^- E+ @& B0 y# n    //for(i=0;i<1024;i++)
. C2 m9 B3 b6 T  o: e3 _7 k    //    temp=0;% d, N+ g& @% S

% f* s/ T# C& ^; V; Q    //UPPReset();
, p  W7 }- N6 {& k    /*启动UPP DMA传输*/- _5 b7 Q. \' a2 y
    UARTPuts("upp_prog_dma_i\n",-2);- Z0 ]7 C. ~  a6 C# ^9 D
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( d1 o6 G& L& o3 u; U# Q7 F
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 W! G7 z2 W: u) o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 \; k( D' H+ E/ l2 `
6 i+ q/ I" j6 h/ ?    UARTPuts("upp_prog_dma_i\n",-2);
' y* S! v8 f4 x+ H- Z& }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# A/ u" O5 b0 p  q/ c  E    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 H- Y6 j& L) {, v( |* p1 x8 Y7 u8 u
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# j+ U) ?3 @7 F0 z' s

- ]1 M0 V2 B  Z, x& D/ e    /*等待UPP传输完毕*/
0 T/ l7 y  }* H4 y- I    //i=0;2 `$ }' B, n) p# J" H' n2 }
    //j=0;) S+ j6 K: P5 m& `  u
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ b" |" S( a! K4 ]
    {1 q( z2 B) b) m* T# o/ ?7 {
        /*  测试UPP传输的同时操作普通DDR数据# L* E/ ]; j- |: z. w0 k3 t
        temp=i;
) ?) o" S8 t* G+ x/ D; l6 @' B7 X        i++;/ Q1 G  \, ~7 n. h2 a: f
        if(i==1024)
$ p8 Q, o+ c) z* i0 d, w9 `        {. E7 B) q8 `. w4 C- Z2 O
            i=0;$ ^" u$ [& i5 e- R, K: Z" y2 R
            j++;+ J2 I8 X0 P6 k8 m; \) O
        }) H( k9 V* b7 P6 U! p2 i
        */
% @: N* G: D) g* L2 m% r% e% \+ w6 A2 O
       asm(" nop");. _; t5 v# x6 O3 C5 Q1 j, F6 h
3 }9 \& y2 n* @) l$ Y# {: I0 |
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' v; x; m  t2 ~* j
    }
( {/ u8 m, I( W5 S) F: e& K, X% C2 A( J9 n6 b; \4 i
    /*检查UPP传输的数据是否正确 (loopback modes only)*/" a- P! w0 q9 [. S  X8 ]* k/ N
    //UARTprintf( "i=%d\n",i);) o7 ?8 C8 i; h, ]8 M  ?
    //UARTprintf( "j=%d\n",j);' q5 B+ U/ z% e3 B$ C
    UARTPuts("Data mismatch in buffers.\n",-2);
9 Q; x& Z$ X% ?: k# r" ^1 L    if (upp_interrupt_count == 2 && upp_error_count == 0)6 y& t" M( @1 w5 |4 w
    {
* a/ Q7 n3 a% [  [! L% w# o: y        for (i = 0; i<upp_frame_size; i++)
& a4 v# M5 e. q/ o        {
- T8 x. {8 V) Z, }6 [1 |; M            if (upp_buffer_a != upp_buffer_b)
% P1 O& c9 U0 {" U5 D            {' ]1 o0 N3 h: ?+ g# P
                upp_error_count++;
' i% `, ?7 s2 r2 W% v            }6 A! x6 i. f: ^/ w) U
        }# N( Y+ d# U1 b* ]& F9 f
    }% `+ T4 `$ `" V; u' ^: F0 y
  W  h7 A- U3 x; P* w
    /* 报告通信结果*/1 A: [& c$ T# |) D. ~( `9 s$ l
    if(upp_error_count != 0)
$ D8 `  b  N9 Y8 {$ W) K        UARTprintf( "upp_error_count=%d\n",upp_error_count);" d6 t5 `+ n/ h' }
    else
* d: K# A3 b: b/ X* S        UARTPuts("uPP transfers complete!\n",-2);+ M! v; s' e- [. H. G
  F: v6 Y5 t: D! j% r7 v: N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& {8 w4 F) V( N
    UARTGets(ch,2);
0 o0 L; U0 I+ ^6 d$ M$ ^    UARTPuts("\n", -2);  O) H0 Z, f2 ?$ E
) d- E( y, o$ w0 c0 P2 x, ^
    if(ch[0] == 'y')" ?" h; q0 r/ ]& V$ {8 b+ R
    {% N, _- a- L/ H3 _4 B* q
        /*打印全部读到的数据*/! i  N+ k& ~, j8 ]6 o5 b
        for(i=0; i<upp_frame_size; )2 K) S5 v# T$ a
        {
  P1 n1 w" H# M3 {# [. o+ H            for(j=0; j<5; j++)
% T. P9 l2 A, _& a$ r, Z            {
1 m$ q0 ^; c, @+ k/ P/ |                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( `1 r0 c+ G+ j; |) I( z- P* u
                i++;" V" {+ _9 ?0 ^  E8 `
                //if(i >= 4096)( m" K: l: D7 Q0 ]
                //    break;8 {0 Y: D, [& B, r4 d: j: g
1 v, i7 z$ ?5 L5 |5 u0 w2 ~
            }
: E2 J; N. W5 F0 t/ A/ U* S2 \3 b; Z            UARTPuts("\n",-2);
! ~0 |, u$ F2 o3 Q7 U0 h) v        }
) R5 O4 v6 ~4 n6 p. _( y/ e    }& r8 x+ `! F4 n$ h% F4 A  J  N/ A
4 m- Q9 [( e6 u  Y& E
}
2 k  ~; [! o1 U8 ~' W2 W# u. V
3 F1 }( b% h& r3 A5 _$ @/ H% y

# ^+ }- S, Q8 j: j6 j- O7 m
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 @' e" Z8 G5 S( }- y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) [- G2 N  F: `




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