嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* X0 [$ E! G) B. T
Void UPP_TASK(Void), H- \  ~' b* u! d7 P/ d
{# [: p0 M9 V& g9 L5 V- X) h

4 s) |, _/ P& h: v' N    int i,j,k,target_int_count=2;
- u/ n$ i: `3 p$ Z2 S0 O9 O9 F    char ch[2];
6 c, i" T8 W0 V4 B
% Z0 B% i# V2 |5 \9 P& ?
/ I( J) _. |/ V9 I* u# ^- D( T/ O# K
; ^% n9 X" e0 L/ N% n    upp_interrupt_count  = 0;% A% y8 F. X2 _" ]6 P
    upp_error_count = 0;1 M( ^! k2 p. o" C* c3 O- j* D  Y
/ H- `! s& t; F' ~4 ?
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, U, n8 T7 h) @9 C, H5 S( }; A0 k. H
    // Initialize data buffers
1 Z+ C: d7 f; U9 K; g- i    for (i = 0; i < upp_frame_size; i++)3 ~, y! M: `$ |9 j. F' w" W
    {
/ m$ V! s( c* y! ~2 g( z, z7 _* r       upp_buffer_b =i;
/ u' e6 q% K  D4 S. t       upp_buffer_a = 0xDEAD;
4 r4 z  ]1 [) i, v" B2 {    }& s- q- \# W5 Z: n; J! w
' t/ Z+ |  U5 \- k* a0 [
    //for(i=0;i<1024;i++)/ `, I  T! c) g/ R' d
    //    temp=0;
9 X. a3 T0 x/ E- J- u) u) u( h5 p4 D* {
    //UPPReset();; j" n6 z# \! S3 w% p2 q% [$ K0 j
    /*启动UPP DMA传输*/- P. E5 Y- ]% E- O1 A( |1 y6 P' |
    UARTPuts("upp_prog_dma_i\n",-2);
. Q, \! j4 a6 N* G    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& L$ }; [7 ^2 A1 g0 `
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- Q7 N' o+ t+ Q( T" ?# M    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, m. z4 e+ N# K# s5 Y* M

- k9 Y/ D% h. j6 y' N! X+ [    UARTPuts("upp_prog_dma_i\n",-2);( h- i! {: w5 H1 A
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 ]- l8 d8 A4 h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% J4 e! c! P% b0 Y( j' S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% A$ r: i# h. @6 P7 ?
! m  N6 J  z# R3 w
    /*等待UPP传输完毕*/7 f2 ?1 |" O3 E' I
    //i=0;5 S$ {2 N. b( a2 m# W- F$ f6 d3 {0 Q: u$ t
    //j=0;
. X" o1 ?. w8 _) x( y3 N" M    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# ?" s  j' B8 u' O: M
    {
* N3 R! O- |6 V! T, m2 V& _# G4 H6 p        /*  测试UPP传输的同时操作普通DDR数据7 w+ b3 y8 n. ^* ]; v. k2 G
        temp=i;
3 ~2 T4 f2 g* H( c) Y7 n        i++;# @  k* u  I5 z1 M% K) `
        if(i==1024)
0 A) ?' Y& u' F        {
; O/ R5 V3 S# |* \1 r$ d% r" ~            i=0;0 l" |8 H+ Q3 {% x9 x$ u
            j++;
5 ?! k) m5 P, \+ C! P        }9 \+ A* l7 V/ R5 T/ R) G6 M, k
        */
; a: G- f$ Z: c$ n" [( y( X# L
, c: d' J1 x) r! Q9 t6 `       asm(" nop");
# M# Q4 l. }  i+ W
$ K# ?) X8 k# Y+ ?. `       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ c$ p8 i! H( A
    }1 D' B" a% h* e, m& t/ A
, D3 E" S2 c7 e3 v$ |9 d
    /*检查UPP传输的数据是否正确 (loopback modes only)*/. }  F2 N+ r/ I0 W
    //UARTprintf( "i=%d\n",i);2 n8 @; Y$ e* f+ }1 Z1 _8 _
    //UARTprintf( "j=%d\n",j);/ d6 q6 `  G, L1 h+ |1 I
    UARTPuts("Data mismatch in buffers.\n",-2);7 F& V4 h. b& M% n: k0 M# u+ K1 z
    if (upp_interrupt_count == 2 && upp_error_count == 0)" U0 e% h$ a; _% w3 ~" K' w4 r
    {
4 A" ~+ e, o# w        for (i = 0; i<upp_frame_size; i++)
2 V9 ]7 R4 f6 Z2 ?: ~9 ?: I        {  t" X: `' l3 m- a
            if (upp_buffer_a != upp_buffer_b)
7 E: a1 V! K) X            {
" c/ w8 W; o/ S" ?$ \  W                upp_error_count++;$ I& L$ Q2 K0 Y6 N  x
            }
) x# e& h* ^; t8 S$ h- s" D' W' C        }
2 w* Y4 `7 k6 M    }
* p9 u7 w( }1 w2 \; x6 T4 Z) H3 o; [
    /* 报告通信结果*/
) B) b% Y+ O) v; I    if(upp_error_count != 0)7 K2 t4 d; s' R3 M! B( C4 }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);: D; r/ z1 B  K; Q; g
    else6 S; V# w3 t& _# C6 f" w# L* B/ d
        UARTPuts("uPP transfers complete!\n",-2);0 Q' c3 @3 y- q% y0 w9 F5 h% Y) a
: I2 O7 }5 T, \6 f
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 j1 }% C6 j" t  I% v* m1 z- q& z    UARTGets(ch,2);
- Z* Z9 f4 {' ~9 Y) l    UARTPuts("\n", -2);
! t7 m" e% I3 c6 b5 O
; C) ?( I( c5 c% `( M    if(ch[0] == 'y')
8 r9 W6 U: l* R0 }    {
' [! _: c) V2 u9 o- h* ~- c: E        /*打印全部读到的数据*/
" ^* Q' I. ?+ @) g  z: h0 a$ M# U        for(i=0; i<upp_frame_size; ); `  I4 r5 V, g3 \4 j8 @' j9 F! o; i( _
        {3 k3 L6 x& V/ L  x/ k2 X. t9 T
            for(j=0; j<5; j++)
2 ~0 H6 }4 p0 R" r            {3 R2 H9 T$ _) O' Q8 |4 g- |4 e+ j
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* s1 \% B0 c# N" r/ c3 y                i++;) m, [! F6 A3 P4 n5 K! j1 ?
                //if(i >= 4096)
0 q  h" H0 Z- u5 S: A) e" z                //    break;
, p- c  K5 _3 i8 [+ n- L, K$ p9 P, `7 ]5 Q
            }1 L% H2 b8 Y1 h
            UARTPuts("\n",-2);7 \  P8 @  K4 M
        }
4 r" ]+ _0 M+ a- x    }
9 y' \$ x5 J! H! d4 k. v- S! ?& V) o% A, R/ u
}

* J4 D' c5 a4 P
, b) [9 N1 t( u% Z: z, v8 {9 o
$ A9 V8 {6 h! s9 }

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ @( e9 R  N8 h. Z1 q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 M9 `  N8 w: V+ u5 o# \# b





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