嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& y# [( }4 n8 J) q7 u5 U: r
Void UPP_TASK(Void)5 b  ]. Z) B) M$ I
{; \5 Z/ [7 f3 L6 {" v

* S6 s4 H# s. A  A  f# Q1 d    int i,j,k,target_int_count=2;6 U+ P1 P, q) x$ m+ T
    char ch[2];3 V2 A+ D9 \- n9 `2 q
1 H9 |+ u) A6 X- W+ \3 q8 T5 F: I
2 A3 i" s6 m( P+ D

% b0 V9 _- n0 E( Q2 z% r) E    upp_interrupt_count  = 0;6 j; Q- d! Z$ z5 i% n& I, O
    upp_error_count = 0;2 y% X+ c! L$ P( ]8 ~
# s* Z! F$ ]" E" w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);& ~- B" k: i: a' }; r) h$ i
    // Initialize data buffers
/ |6 U2 Y5 ]4 q  m5 c    for (i = 0; i < upp_frame_size; i++). B; f; ?- f5 T4 ?. ^' V: P! o
    {% k, R0 ^- Z' @2 y; z* K
       upp_buffer_b =i;# t8 p# J1 G% A' b' @1 g+ y- I; t
       upp_buffer_a = 0xDEAD;
6 i9 f6 K' p; u& \& b9 f    }
- j7 j& v/ M4 R/ _9 P$ J2 k+ n; N) Y; C- f& E" P( ]" J
    //for(i=0;i<1024;i++)
5 g! N) l4 B7 e! x9 Z, p    //    temp=0;- c# K) _1 x4 t/ S* g! d+ u! h  B6 h
3 `0 s8 z  r& m( D, G
    //UPPReset();
" {: N1 ^& f, G' w5 F+ I1 u1 ?    /*启动UPP DMA传输*/
4 r6 x3 G4 B4 B; d' e    UARTPuts("upp_prog_dma_i\n",-2);
7 ~) o* M$ |% a- F- A, {    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 z; {; e: b, J& ~; R4 ]& ^    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: X  n9 O7 s- L% [3 [# L3 X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) p( O! B8 `! R6 E7 t* _  y- \

* F: B9 h  L0 g# o: G9 I    UARTPuts("upp_prog_dma_i\n",-2);
6 a; F: x. _6 F" b' v! B0 t: J    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 t& z, s; q+ z: o9 j8 X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 U0 n/ q; C9 }% g; ~5 a! @4 H
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: L* ]1 K- P, p, [0 _4 e9 l& W+ i$ r0 X$ v% {4 F3 ^, u- n5 l9 r
    /*等待UPP传输完毕*/
( _% Q9 H. J, D  v9 ]    //i=0;7 Q/ v: ~3 D: J! w
    //j=0;
8 Q- S/ q/ g$ N. V+ K  w* i" g/ G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 E, v+ t4 A0 R1 Z
    {
2 H( Q3 K( s4 j: ]! b- h7 S        /*  测试UPP传输的同时操作普通DDR数据. W- c5 }0 `2 e, N- M; J0 R
        temp=i;4 W5 M* W$ {/ o8 k: v
        i++;; C, @" o' F+ h' n! q) q
        if(i==1024)
4 O" S4 C3 ^# A; @& n        {
, }8 X5 f. E% p0 O" |1 t4 O            i=0;0 k* j) I/ q) h4 L$ [& t( `
            j++;
. g# \& g4 i$ @8 `) h        }+ Z8 G3 \& E8 ]* h; y
        */% L; E7 _% G. {( U! T: y
1 V' q% d9 K; U4 U8 p
       asm(" nop");
9 Q6 G* Q# C' q" y
* P% E" w9 a# |+ f% U" F- j% k       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. T* G# }/ E, K7 _4 s+ m2 n9 E" ]    }, B4 c& ~. t# K
/ e, y! I7 A* b' h; E1 s' v, z; m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ O* o+ ~) w) Q; P( E" i' ?. i$ }- N& e
    //UARTprintf( "i=%d\n",i);
' g1 j; l) o' x% U- n1 }/ \+ h    //UARTprintf( "j=%d\n",j);
5 @% A# c3 r( N2 u1 c    UARTPuts("Data mismatch in buffers.\n",-2);6 m# n# E* V, O  A
    if (upp_interrupt_count == 2 && upp_error_count == 0)
% V, `9 h1 ~+ g  y6 J    {7 d4 w  S' C$ f. @7 ~
        for (i = 0; i<upp_frame_size; i++)$ }# E6 j8 a" H
        {' ]  L: g+ W( |: r& ^
            if (upp_buffer_a != upp_buffer_b)
/ ~& {5 `' {; d& S  i2 y            {
4 y5 y% O1 y! w# s6 p                upp_error_count++;
; R9 x1 m0 ~1 f  c: |; \            }. {: I, F9 \2 ^
        }
0 R' [$ q3 h; [+ Y    }" G! W: E% `$ y
0 Q& g7 M, f$ P5 R9 R! [# x
    /* 报告通信结果*/
0 x. B( `" s- [9 O4 E% z- N& b    if(upp_error_count != 0)
6 G+ q# ^0 Z  C" S2 e5 I! c        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 t% z7 C0 C1 P! |% N
    else$ f/ ]+ l* x, @, S) t
        UARTPuts("uPP transfers complete!\n",-2);# N6 G1 g9 L. A4 i6 t& S' {( S% F

( `+ t- H% G* c! a6 \! N+ i    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 O# @. c7 A3 q1 `
    UARTGets(ch,2);) h9 O* P. W; @/ {6 R' M8 Y
    UARTPuts("\n", -2);: ~# ~2 p" r* D

7 N# w% T  G, K2 G: `; _    if(ch[0] == 'y')
* i+ j6 |" b2 d/ }2 z3 R3 P  P, x    {) v( f, ?2 k1 T% ]6 I. G) v, g
        /*打印全部读到的数据*/
# m$ Z/ R% o, [: u        for(i=0; i<upp_frame_size; ); u+ {6 \% b3 q0 h5 n; [
        {
* p. p, N6 z  Q" x2 z& R& b+ z            for(j=0; j<5; j++)
+ h3 Y( T  t: Z, s! I            {0 L- p( B% y* r! P7 k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- N8 I* I$ i% C) M                i++;
. k  \$ a* m+ o1 R6 H* p1 j                //if(i >= 4096)  \: N* d5 }1 f" J! |# }6 z5 ^2 S
                //    break;
4 p- {: X5 G4 M8 x$ q) R# a8 t1 T  V3 |9 j" Q& B+ |
            }. m$ A3 _, E: L, b
            UARTPuts("\n",-2);
9 ]" G) ^! o$ \8 L* T5 a% v        }* u1 g( @0 v: D6 m; j
    }. _; N. `& s, N# n. u1 K7 t
* ^4 j) m/ T0 w$ [; M) r
}
) i/ S7 V; O4 N7 @5 u
& x) U3 |( y5 a% R0 `. k

9 `: {! G# k' K- p) f/ P4 U
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 L3 ?# `# q: P
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! Q( a7 F6 k; S) B: T% O





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