嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 y" _" e% h% ]3 ?2 d
Void UPP_TASK(Void)% P  `$ I* \% y( |/ ]
{
0 [4 s+ d2 q3 J; g/ q. C
! I2 {& N6 X! v* F- @0 e( h- {    int i,j,k,target_int_count=2;
. `/ I" ^  Q# q# p, q. M" B/ k" L    char ch[2];. K. M+ W8 g$ g( d

; o+ b: S3 N$ }. q& e6 s) C
; G% J; m4 k7 z, U
6 W0 M- @$ f0 R% H: o  I" y    upp_interrupt_count  = 0;
+ o4 A# n6 C1 P    upp_error_count = 0;: x0 A4 ?% r; l2 }6 c8 d2 F
% V% |/ g& O2 M" G
    UARTPuts("\tResetting uPP buffers...\r\n",-2);1 i5 Q4 h% a# M; w, s4 V& N
    // Initialize data buffers
3 A& U" n# X" }4 d8 ]4 z2 r& Y. ?    for (i = 0; i < upp_frame_size; i++)7 l! B4 B4 c/ V0 e1 d' A
    {
3 Y/ r3 C3 C: Q  Q& Z! W! [/ k8 h       upp_buffer_b =i;5 X7 w7 n& A. T) o5 S/ m3 h  i
       upp_buffer_a = 0xDEAD;
: ^' K4 |' I; W4 q. a    }
/ N& z3 ~3 h* R# E3 d! i; ?+ j; U" P6 r; I# f
    //for(i=0;i<1024;i++)
9 V# ~; o$ C- f$ p' B    //    temp=0;* z# c8 i( o) f* t0 L; y/ r; B" u+ g8 n
8 r+ n& C+ }! S5 q
    //UPPReset();
' g8 G  l. l  K' m7 Y( ?    /*启动UPP DMA传输*/
; U. g+ B3 ~( ^0 V& s3 Q    UARTPuts("upp_prog_dma_i\n",-2);+ g# U9 n) H7 {) K+ O+ f  h% E
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% a0 e! s) }" o) h1 E" Z, r2 X
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 K$ l6 Z- `4 z- V$ u* E3 Q" I" Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- s2 u9 E* v0 `2 _# K# x/ W
# C2 \; L3 d6 k. j9 m) o    UARTPuts("upp_prog_dma_i\n",-2);
* V- |( I# \5 U6 D7 A6 r5 D    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ ^. l7 Z5 \& v, P    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 h: r* i! i& ]: F3 v: W! E( E: g    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);' C+ `: j2 _1 |" N& P. Z9 o' b

9 Z) J" j/ P. J: R9 q. |' H* }    /*等待UPP传输完毕*/& `# n  Z  [. v: J
    //i=0;
& p8 {% Z) d. Y/ L    //j=0;1 }- m. `2 u' j6 q" _( ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 f5 E7 `7 |  y% L$ q$ S+ W
    {
/ }2 o+ N4 \$ C! I  O        /*  测试UPP传输的同时操作普通DDR数据. q4 ~1 S" f/ Z
        temp=i;/ |4 c& {+ s) G  t/ Q2 g  `2 N
        i++;( ^( T8 I: z" o: U, H: M& g
        if(i==1024)
3 T% N) d  u6 E        {
3 Z- M# K( c0 O$ S# j3 {            i=0;4 O9 j, u0 t2 N0 E; ?/ q8 P+ n7 Y
            j++;1 ~, k% q7 f4 H9 H+ W
        }* W3 C1 l5 t5 p
        */
3 L# H% x0 ]1 c5 n# L3 \& r& D9 z) h9 V% e' M% G: C' J
       asm(" nop");
/ `$ `% |& o$ ^; N" i; ]) N) [, ?: C3 C
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 E7 y8 s! w+ ?  S! Z" l7 x  q3 l1 i2 k
    }
. A. B! ^7 p! w; E+ f
- y, v1 |' s2 {+ L7 P    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 X' H2 I5 G/ V1 H
    //UARTprintf( "i=%d\n",i);' q/ c/ b' o: L3 L) s
    //UARTprintf( "j=%d\n",j);% _: f) C' k1 z% J; I+ Q% B
    UARTPuts("Data mismatch in buffers.\n",-2);; C4 u: Q( r* p
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 f0 P% @( P  A( W( K    {- }' x. g' T# Y/ r) N
        for (i = 0; i<upp_frame_size; i++)0 A. k" [  ~% e1 F, ]9 v$ z, b
        {/ H# f( x( U; w& P) m: A
            if (upp_buffer_a != upp_buffer_b)
/ z( v! S" P3 U4 P. D- U9 S7 ?$ |            {; W& O# W2 ^+ ^( v6 u( H
                upp_error_count++;$ h" X& E2 t5 n
            }
; p7 y/ r7 _8 G, [  y3 @        }; V( U! f, ]8 g. ~# v  O9 {
    }
  {# e% y* O# R/ O4 D9 d" [3 F$ b; g, t" U" r6 A0 G
    /* 报告通信结果*/
& j' v( O4 f" L. I    if(upp_error_count != 0)! w; n  m% t  M; e/ b
        UARTprintf( "upp_error_count=%d\n",upp_error_count);" `# k0 L: H2 S3 c6 p4 ]# S% t7 M
    else  V3 W7 N- n7 h/ R5 R; x4 f$ c
        UARTPuts("uPP transfers complete!\n",-2);
" ^3 j2 }6 b4 @+ o
* w+ o8 z1 Y. k0 m% a    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 u2 T2 Z& w& S
    UARTGets(ch,2);
+ B" u5 N' J( l' T    UARTPuts("\n", -2);
* ?( [0 X# s) \& _9 r. T, c, B) U6 q
    if(ch[0] == 'y')
  A* I% s, V. i. O' _! x    {
; e# b! W# K0 s3 t" ^        /*打印全部读到的数据*/
" |% n+ d3 F& }' s        for(i=0; i<upp_frame_size; )3 L0 L* H- ?1 g  a: Z1 K8 Z/ U! A, g
        {% V5 H6 G$ x* O# V
            for(j=0; j<5; j++)
# w( D; @' t3 ^4 n" s8 P2 N  f            {
' K; J$ L. R, _                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 ?) K5 I/ f% G. S) [) U                i++;
" A5 S3 ^/ }  Y, j+ v# {7 b                //if(i >= 4096)1 {0 g% \6 T' X4 b* Q
                //    break;
7 s4 E; H$ P% n' a) r: D( f1 J8 c% p8 `
            }- M0 X: [% _0 O
            UARTPuts("\n",-2);& @; [0 s2 E; l/ n/ ]
        }
0 B4 R3 E7 h: N% y3 x' S    }+ m# U1 J: [3 W$ ]) F4 y

5 v; J! ~/ }1 b6 j% D}

$ k; I/ g, N- [& g( R  Z

  M/ V7 j$ _* v  |8 m4 _0 \1 e, m, g& N- ]/ J, R, c7 |

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ }- m0 }& R! t4 [* ]& J

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% y0 U. Z' J7 h9 H





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