嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" k3 u& o: }& X* E  P6 f, f
Void UPP_TASK(Void)+ N) F8 K" L! D/ @
{: z) Z2 H$ h1 ~% S

& ^" O& n, ]: s+ l; Y    int i,j,k,target_int_count=2;  e) e& c! a7 F. \
    char ch[2];
5 B0 G/ o/ E! q! |4 ?& F
3 [# w- x$ O- E/ z0 k" |. J6 {* a. y. W. R1 v( s
: z' m3 ^) V/ g! Y  @) ], N* n
    upp_interrupt_count  = 0;5 B1 D, G, o: P% V
    upp_error_count = 0;
# @- j( H5 d+ g1 D, b: d# s, J$ [/ c9 c1 [2 m, {
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% Q2 y; Q0 ^  t6 B* g1 [6 q# u7 A" \    // Initialize data buffers" l/ r$ g& J' u
    for (i = 0; i < upp_frame_size; i++)/ V* J. f9 n. Q8 Y
    {3 \) U) \; F; s5 ?% H2 E' d% {( Z
       upp_buffer_b =i;" ^. \# b$ K& A- P+ V0 s5 v
       upp_buffer_a = 0xDEAD;, Z# u* v2 Q  q8 d" f" Z$ w" {
    }
! k$ V' E' ?; m  X
* {$ e% t7 A! O2 ^2 |    //for(i=0;i<1024;i++)# x9 K: W, I- q  B
    //    temp=0;
8 L2 a) g' E% h; W* ]
- y$ C& H+ i$ k    //UPPReset();
- Q' W5 L& k9 X$ B7 u4 N    /*启动UPP DMA传输*/
4 U$ b  t4 V. s$ B' T4 O. @  d7 D5 B    UARTPuts("upp_prog_dma_i\n",-2);1 O% A2 ~8 z0 a3 J$ N6 |+ ^
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ e( O6 \) i* x4 h- ~3 L) G- @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# @' _3 M6 Z# ~7 N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% l& f8 o, c: F% U5 y6 ?+ j
( g$ U  |5 H1 P: A6 K; V    UARTPuts("upp_prog_dma_i\n",-2);7 H6 O; X3 J+ O3 \! N( @1 r" g4 ^
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ r# Q- r( a3 H9 d* B8 ]; O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 @; o0 W; Z# ~8 U! D4 L    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( z8 [2 Y' i& n5 ]9 H9 H

% d+ s/ x6 _2 b' R2 x    /*等待UPP传输完毕*/6 ^% r& L) s3 P) U
    //i=0;
9 O+ d  ^( j% e6 r. ^    //j=0;
* R: z3 N1 s5 F6 Y% m4 X  Z7 s    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" U% O0 G  p& c2 p& x) [    {
5 U! N6 o9 O% J3 T9 G4 }/ \        /*  测试UPP传输的同时操作普通DDR数据3 L3 i9 Y) o0 T. @
        temp=i;; T" L4 z1 S& a- G, s1 O8 L
        i++;
; q' \& t' U1 E4 A; F  T        if(i==1024)
3 v0 V! B2 F' _, K4 M( |& y2 T        {
2 H" A4 _$ N+ C/ L, j            i=0;' p+ `* N* _; a! N$ b- n% `2 t8 t
            j++;
( M( X4 u4 q# L6 b' J7 p        }8 S6 f; m1 q3 r0 g) `
        */+ M, P" A% l; _, k3 }" \- ]

# ~! v! y1 t( [4 q* v2 D" i       asm(" nop");( W, W2 {( |! Y

; V4 o" r! G! S. A       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ m: o9 S6 u- k5 [$ j    }4 y% {" H, h  P# M2 b4 i
% b5 `2 n% n) W! N; h/ h+ Z: E9 y. S
    /*检查UPP传输的数据是否正确 (loopback modes only)*// _0 Y/ j: V& q0 S& f
    //UARTprintf( "i=%d\n",i);  v5 F3 J. Q9 c  b; ?
    //UARTprintf( "j=%d\n",j);
" _2 \+ n. X, ~' f    UARTPuts("Data mismatch in buffers.\n",-2);
1 {. q$ R( f9 s, w! t0 I5 R    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ H) P$ Q" S4 U0 x7 V    {) p8 A. f% B7 _1 y' a" L" b
        for (i = 0; i<upp_frame_size; i++)" \6 ~! M6 h) U. ^$ v
        {
( f! t1 u9 g6 B& s: Z$ D            if (upp_buffer_a != upp_buffer_b)
1 z9 t* d7 a' l1 C& y1 G/ ^4 }            {
5 D% O7 k  T' d0 @6 U; t                upp_error_count++;) h7 D# k+ V8 w4 b
            }% R$ A) f" a3 w8 T! U) L
        }5 f( R5 a5 `/ m1 g0 B( {/ g
    }- w3 T# U% i8 K

+ I/ I/ Z! Q: f$ C# k    /* 报告通信结果*/
# D1 k  I! |/ [! X0 ]    if(upp_error_count != 0)
% q7 c; z! C1 }9 v: y' q8 {% E        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 A0 s& Z1 a" k" Q7 A8 \5 _3 X    else
" O# |/ R% y5 l. X* O        UARTPuts("uPP transfers complete!\n",-2);
1 e. r! z5 V2 j& Z4 I# u# @+ k% Q# `& Y6 Z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' m, c' K4 B! Z: t$ j* J& r    UARTGets(ch,2);# y( w3 W9 }2 F+ `3 ^. e' ~. R
    UARTPuts("\n", -2);
) Z) T1 J, W+ z- k, u2 O0 \, U
& m7 f6 D7 c0 D" u7 V3 H: {    if(ch[0] == 'y')
8 M. [8 D" r' X/ Q% E# z! H    {: N  m0 ]* e1 g5 X$ U) b
        /*打印全部读到的数据*/8 L9 f2 P9 z# P; |5 W8 n/ @6 Y* F
        for(i=0; i<upp_frame_size; )
) v3 f+ P1 g5 Y" D. J5 N7 q        {
- }& v; Q1 @$ D            for(j=0; j<5; j++)0 {8 Z/ |" ]3 M0 m  i9 O
            {
9 y7 c% }- `6 U1 }6 k                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ D7 ~6 p0 A; i6 D: G                i++;! V& |/ O  }! G. a
                //if(i >= 4096)* S, }$ @0 _- I5 p! B. A6 `
                //    break;
9 C% a" d  H% g/ [9 j6 F: y6 c# n9 z( J, z: {; u
            }% ~( O0 y+ S1 W9 _. G) g0 J
            UARTPuts("\n",-2);
: {) e9 C& w: n" ^' o% z        }! d9 B' P7 ~0 n% H* Q# t5 [
    }+ q* `; r. S; v' a3 ]+ ~0 D- A
& w' `3 v' s- A4 [
}
3 K. B' L8 Q/ ?/ u5 q; S, F7 ~( I

+ n+ e  j! J- k8 b$ t- ?% |& E+ n. |) p. E, r5 ^0 }% K( [

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。3 F( u% z' Y; C7 q8 b* I- E

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ R7 D8 J. n8 ?8 n% [; V





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