嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 A  C& a- l" W: P8 J+ w
Void UPP_TASK(Void)/ U# I  ?7 B9 d+ X$ v
{
) D: Q5 f3 {1 b1 h# Q. J0 j* p3 k3 @
    int i,j,k,target_int_count=2;
/ {: K& X( Y- U8 Q( [$ [    char ch[2];
' w8 O; _5 g6 f) k& |" h6 [8 `6 N
( S+ W5 @; w5 i" O0 b
6 c. Q- [# X+ a9 b" G3 X- C; ~/ ?3 D- U% T+ h6 }
    upp_interrupt_count  = 0;
5 a3 U. Z( }0 U0 @  Y5 L    upp_error_count = 0;# R0 u- D: B3 m- ?

0 d8 _1 u+ z( B$ @: u1 h& b    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 s  R. ~$ Q  a2 Q    // Initialize data buffers
! C1 E5 V& P$ R* }" q    for (i = 0; i < upp_frame_size; i++)1 s8 }6 s/ l' s1 ], T' [- S
    {. W/ G0 s4 H7 y5 p8 \5 h" x% V/ d
       upp_buffer_b =i;
5 E+ {$ h# N8 Q' Z! A% c       upp_buffer_a = 0xDEAD;
5 }/ I& J0 T4 }# f    }
/ W9 z* r$ |& w' F8 S) [3 N- G# p, c9 d8 O* ^
    //for(i=0;i<1024;i++)
( T. g; Y/ Y% ^' }9 j2 |5 F. T    //    temp=0;
, u" M3 l4 S% j9 F7 O5 \/ W" W$ }  B& `" m" d1 x, S
    //UPPReset();
+ N; x0 G$ x! H    /*启动UPP DMA传输*/$ x- G1 ]9 @( Q4 d2 I$ B
    UARTPuts("upp_prog_dma_i\n",-2);
% S7 H4 z/ ^0 ?, C) H$ P6 C6 ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 _( _" e, ]7 t* T    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 _; ~  \: w. z. l) J, ?5 g- p9 Q/ A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) c% h# k, [# g" {
8 a# O; u, S, u+ w: z* K; y2 D( s
    UARTPuts("upp_prog_dma_i\n",-2);
- f+ J$ e* T7 N2 s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ D2 \/ r+ U6 {) u5 y    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  T7 t. Q4 T# E) q1 W1 P- r3 S8 ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);+ @0 Q/ w' n$ Z2 w" x+ s; U

, Y: H2 Y9 u/ n% k4 {( C    /*等待UPP传输完毕*/) ?. t8 d- o' I8 j! u& V, s5 B
    //i=0;
1 o  q1 \% z; `6 C9 f0 r. f9 h    //j=0;: P6 D+ [# |' r& ^$ ?; B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 {6 P- W3 g. R1 ~$ s    {
9 ^$ i# q8 k- E: U7 L        /*  测试UPP传输的同时操作普通DDR数据
" o+ x7 n: j5 C6 \. S        temp=i;
; H' d9 j( ]4 |5 D6 c. j        i++;
/ r; F4 X, V: i2 w        if(i==1024)
7 z- P7 U6 w6 Y- B0 F3 x6 ~( s        {
* b1 K4 Z0 Z$ h            i=0;9 V4 X3 u5 w! `, S
            j++;# @+ ]: S+ \( ?8 o( [
        }, u% v+ V2 ^, Z9 e
        */
9 ~- B6 Y) m$ o' L5 T' n) M5 O! F
( [8 O. ]: ?: g8 i       asm(" nop");2 W" f9 O0 ^$ F

4 s1 z8 }' k1 u$ }+ H! I( j       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ `2 K: c+ ^  t) o( g' ^    }5 E1 R, E, [% P! Y5 L5 S

, p+ n, s4 c: X9 J5 c8 T, x, I( |( H" q    /*检查UPP传输的数据是否正确 (loopback modes only)*/' {1 g$ ]  |6 H# {
    //UARTprintf( "i=%d\n",i);$ R  @2 n, t0 ]5 j: K- d
    //UARTprintf( "j=%d\n",j);
6 {$ b2 p5 f3 X; ]0 Z! y( N- d    UARTPuts("Data mismatch in buffers.\n",-2);( F: o& \$ d* |: P
    if (upp_interrupt_count == 2 && upp_error_count == 0)! S- z4 g4 ~' r
    {
6 ?$ H* L' Q$ O- w( A7 s        for (i = 0; i<upp_frame_size; i++)
4 r, ?# |, X) a' |' n# g1 E4 Y5 A        {/ G7 i0 J  X- R8 c" X5 f
            if (upp_buffer_a != upp_buffer_b)
1 d  a# B; G9 P* S. Y1 N* [            {7 m8 n& A' ]" Q! x$ q+ G3 q% ?
                upp_error_count++;8 [% m) F, w3 d) Z9 p3 A
            }: N8 w) y9 r& Z0 P" k" Y1 N
        }
, L9 \0 E0 H0 H  W' s+ D, \2 @; g    }6 T) r5 @' }! @7 x
1 e/ _( ?  ^! w! c; O: ^1 U
    /* 报告通信结果*/
" F# U$ r9 v# I5 P    if(upp_error_count != 0)1 P! s4 `2 ?$ Q2 q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);* g  V! `+ B% T
    else7 R' O" `& @$ n7 h8 d
        UARTPuts("uPP transfers complete!\n",-2);
6 R/ P$ ]; a' g# p/ E/ e- y
- H8 L& |0 C  L, f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 ]+ F/ ]2 g/ I* U, v    UARTGets(ch,2);! T8 C% o6 f0 b7 a- p$ I# s
    UARTPuts("\n", -2);7 K+ ?- m: r- G" v' `8 Y

; ?, q& B! v! {$ v5 _+ \0 S1 `2 Y    if(ch[0] == 'y'), l, a" T  W6 S2 q6 x& m
    {
# L8 G6 t9 [+ Z* O1 a! k        /*打印全部读到的数据*/" F8 v9 g) e8 h* j$ T, Y6 d7 w
        for(i=0; i<upp_frame_size; ). ?) k$ n# V3 e3 [' f8 v
        {
- }( ]$ q9 o+ a" @# P! w8 X            for(j=0; j<5; j++)
: I+ i) j( I9 i, s6 {3 Y            {
# g( ?7 A" c" u5 o, ]! C                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 O% g1 e- g7 _# o                i++;6 {. w" p" R0 B1 j* {& ]$ [$ `* y
                //if(i >= 4096)1 E) z1 D1 F9 ~6 a7 ~. Q  D
                //    break;
8 r" G2 {; u. p! W+ R/ }/ X, ]8 @% {, o/ T% y+ H6 z' ~& L7 D% ~
            }
- e# p5 I. c  B5 L  V8 I7 j            UARTPuts("\n",-2);
! ]: c" j* J0 d4 F4 A        }
- @4 y, j' H( O+ m8 C# \. ]1 f! N    }
) [0 {2 m3 C( ~
/ B4 [1 g/ p0 [$ s" @/ [! \}
! o: p2 e( W- S! q+ t
5 S3 d1 c- X; g6 G5 k

5 b; A9 O- q* c$ A
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 d: t" f" Z, U, `
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 N1 T) A8 B/ ^' _' g# f: K8 M




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