嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ h: c. x8 V3 f" S( j; A# F
Void UPP_TASK(Void); T4 ~9 i* s! E8 {* k
{9 T7 N) c# h) A) L- W
5 ?4 ~4 }) w0 S0 z' x+ s# B5 M
    int i,j,k,target_int_count=2;5 ^: L/ l: P" F3 B
    char ch[2];
2 [7 p5 E: M% g. _% c/ ^" ?) U
7 v6 b! O  c& d* N$ C2 {6 o& U: D. o7 m1 S8 w6 o
7 O2 M9 x5 t" ~+ b) M1 _  \. y
    upp_interrupt_count  = 0;0 H# T) S' }0 j1 R( n( c
    upp_error_count = 0;6 v# A$ h) e8 t. I9 s

3 d( a( P0 Y& s, v" E9 \  F" G    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 s- `8 V8 H  C
    // Initialize data buffers
- M( V1 h, e) P    for (i = 0; i < upp_frame_size; i++)8 F  A( s8 q9 P* B! i
    {) a4 A* T9 {  ]/ B
       upp_buffer_b =i;
3 t8 ]. E) w# [4 N8 a* F/ k/ z+ V       upp_buffer_a = 0xDEAD;  `, E! m4 F2 P/ L' r) v6 F
    }
: _6 p# ]+ n( Z% ]  x
9 E- f( }, [+ ~$ g$ s$ J: l    //for(i=0;i<1024;i++)
$ E2 m* ?; G* S( \- Z- H    //    temp=0;2 d+ D& `! D5 E/ `; m
% P7 w2 X# N$ u( M8 P
    //UPPReset();" K5 K' A! r7 G' t# x: z* V! Q
    /*启动UPP DMA传输*/6 }9 s. {4 G; i. x4 A5 g4 n% Z' X
    UARTPuts("upp_prog_dma_i\n",-2);
, U3 s9 @1 Q2 K; _" f- W    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ C. P* G9 ]! y2 K2 r: l. ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. [& B% y* d& I' F( H8 b! n) M0 I
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# b8 L2 E' q  Q  ?5 [
$ O- E  V3 a9 c# E, |$ n& u
    UARTPuts("upp_prog_dma_i\n",-2);
  d  a9 y$ b5 O6 |/ z    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. h$ h: f: l' ?3 Y* I. |. \    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- F$ w% M" X+ U; w) I6 x
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 w0 g  S+ T" J  \, I) p$ J! ]; N# Q( c

' Z0 l8 m2 W( y$ O( O% @! L; w/ q    /*等待UPP传输完毕*/7 r" _6 F8 \6 X" y! D. G2 p  K; D
    //i=0;
! s$ f) y5 h* {3 p3 t/ m    //j=0;; K  b  B* N" f, j) n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 U3 v" N# @7 t# A9 S
    {4 g9 P3 h6 m& e; u3 s1 @
        /*  测试UPP传输的同时操作普通DDR数据
# l# k* H' r7 M! D* k  u        temp=i;, E, l' _( l& W1 B4 ~8 w% j' ~
        i++;' d8 p7 _5 `9 t! Q
        if(i==1024)
5 G" ]- k! U* k& D        {
: K' M& {8 T: t6 Q7 p            i=0;& J: }4 i; ?& f+ ~( d0 r0 O+ J1 y5 a
            j++;3 M5 M1 i9 Z+ a" @
        }2 n) y! l: \* C- _) k
        */1 q, }: ?3 g% M, k9 M
6 [: w' R1 o6 V2 b  f& j% n  K
       asm(" nop");) n. r( [( g& {! l4 n
% O, ^* Y: {$ i3 F: L( ]* @. S0 G
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, b; z- s  V0 \8 ^, j1 r6 B
    }
' j5 A) Z2 E. G$ P: r2 \0 X
. y+ p6 a  W/ ~0 G+ P) @/ k. C5 k    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% G/ g) Y" l7 V1 }) j# N4 f6 n    //UARTprintf( "i=%d\n",i);
" k  c- S- D! Z' l, d. W7 G    //UARTprintf( "j=%d\n",j);
) C4 U" y% E" E/ q+ p4 J6 R* W$ i    UARTPuts("Data mismatch in buffers.\n",-2);
$ {2 t* u2 u/ r% Z9 a" p7 _4 L- U1 b    if (upp_interrupt_count == 2 && upp_error_count == 0)
, C& O( s4 z( R$ w7 a& A$ g+ d2 z    {
9 {( E2 ^8 N& w) G6 R5 c+ ^8 H        for (i = 0; i<upp_frame_size; i++)  b# ^1 D; M0 Z& S6 T! b
        {
# I" m" t/ B( {* F: Q  S  |            if (upp_buffer_a != upp_buffer_b)
0 K7 V1 i& I5 _2 q            {
" V1 m. c7 ^, _" ?6 x# M( l                upp_error_count++;. r9 ~+ ^4 Y( T, ?7 B6 s' a
            }
& m4 t* C, p2 v, [6 {        }
) {" ]! `8 B, |    }. F" Q$ N1 I; L2 c' w
: `5 \# G/ a1 g6 V; {4 c
    /* 报告通信结果*/. `0 \3 }/ @1 ^- z3 U/ k0 l" D0 P
    if(upp_error_count != 0)
2 k. ]. b3 a6 z" B        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ u5 Z) ?  N  \' s! j2 a* h
    else# H7 g6 u, S+ d8 Z: p9 y
        UARTPuts("uPP transfers complete!\n",-2);  b& \# N% _) ~

2 f) @! {) S7 U4 _- O* l    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 L+ T: a4 ]8 M: n7 T9 s: J    UARTGets(ch,2);
4 a& C- x* S: L& z, e& g! b, @    UARTPuts("\n", -2);
- P4 ~# H5 m7 `
3 ?- V0 b' }; J. ^, l    if(ch[0] == 'y')
) F% S( L+ _, E7 Q9 p- l* u    {
6 J: ]$ g$ q5 v+ Z+ [: M        /*打印全部读到的数据*/
) }0 B! X9 A, d) L  _: y        for(i=0; i<upp_frame_size; )
: V- }: c9 Z5 j2 R# M        {
9 u3 e4 ~. z- l( A, P! H3 N6 T  \            for(j=0; j<5; j++)1 L# O1 x1 f5 `  O8 p% G* y* v) t
            {
* k9 w+ a+ Z0 `$ c+ k+ K+ E6 i5 G                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! a0 a6 S0 ~, H+ ]
                i++;! `' y- j9 W" R8 s3 f" d
                //if(i >= 4096)
) y: |+ I* ]( [# q4 G* r+ G3 I                //    break;
+ Z; Z+ C9 [& A- P4 s4 |) e* {$ b1 K5 s: \% v8 R
            }& }- u! D5 G2 u; _8 \& i/ W" |
            UARTPuts("\n",-2);
; b7 I' b, A3 C8 j        }8 Q9 ^1 o1 f. f  v7 z) ~" B
    }, l4 Z5 I1 J) G2 `

; L( x2 k4 Y! i8 s. C}

0 O* s! v* F4 k
' J0 d: a. u6 J5 Y1 r* T, J
$ N: I8 b1 v& F* ~* H) `% a, M

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 w2 h( V# a+ _9 q% Z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 R! R4 {0 Q1 ^& P, P1 q




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