嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) \% ~5 I. O7 n! y
Void UPP_TASK(Void)
! |( ~' I, \* A8 L' x8 X2 b  L* p{
( u% [/ J8 x' e2 E+ B: @) C$ h8 m% ~- ?% D+ g- J: T
    int i,j,k,target_int_count=2;
9 S$ S5 Q5 [! x( }8 [" K/ q    char ch[2];
8 h% l2 o" I) z2 b4 O- G
, A! O" p9 G/ l6 _- C  j! l! i# d2 ?5 c' r
+ T( D! p) E+ ~+ n5 C; I
    upp_interrupt_count  = 0;# T8 O; P! x6 q0 w! Q; q" h
    upp_error_count = 0;* k4 c+ v9 m4 r* Q

  j. E" P2 F9 `4 K5 j  P+ Z    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 u/ {# g( n- _2 p
    // Initialize data buffers
/ M& f0 e$ D2 W6 W! i# K    for (i = 0; i < upp_frame_size; i++)
* g! S7 z% Z0 ], Q. ?4 b) ~4 |3 k! k    {; _( @& V7 X, r3 U+ O$ f8 ?5 s3 {
       upp_buffer_b =i;
9 _4 J, Q5 Q$ P: T' t" P( c       upp_buffer_a = 0xDEAD;& b/ i( M% m/ m7 q
    }
' z+ D. F/ r) h. P2 Z0 \. b: y
    //for(i=0;i<1024;i++); E: `7 w8 N& G6 A; r
    //    temp=0;  u% O! h& A, B* D# C" @6 q4 `
7 l$ R5 G$ Q+ ?6 [
    //UPPReset();
3 J5 Z& W  T) J# I0 X  G    /*启动UPP DMA传输*/
$ z9 [9 R( h6 E: q* K- k    UARTPuts("upp_prog_dma_i\n",-2);& G- j) N, g" m+ J; y! {  W
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: _0 l) P6 ]2 V) ^    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ T  A$ i0 V; H  I- k0 J
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- z: T8 J' l7 Y4 a7 `# s

5 f2 ]; p& A8 Z6 X/ ~    UARTPuts("upp_prog_dma_i\n",-2);
* I9 ^" B* O+ @- J  c9 }: u    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; z0 P5 t1 R0 f' M
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 ^4 M) z2 F- _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# w1 h3 B! C+ Z" J% q% v; \% _* J) [) l% ?' ^6 B7 ~- |
    /*等待UPP传输完毕*/% N1 U7 m) c7 T# p9 T6 I, o2 M6 o
    //i=0;
4 E3 s2 d  ~9 h    //j=0;) C' u9 _0 c; \' z) s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# T" _1 B& k% ~- E( A6 _9 B- \    {) V9 d, c- {! h/ b: B
        /*  测试UPP传输的同时操作普通DDR数据
$ Y9 d# j! X" g' ~. ~+ n        temp=i;* o% E& U1 w1 B  g2 X+ \9 T/ m
        i++;, a! K; E9 u9 Q
        if(i==1024). A# y) I' Y+ C1 O; g: d5 `
        {
6 ~3 K+ T5 x7 U2 \, x3 h1 }            i=0;3 l5 p0 x7 m9 r5 s8 O  ^
            j++;
& ^. l- H5 N' I; d/ ~        }+ x7 M; J4 ?- ~$ f/ c: p
        */9 Z: o5 u* Z* W) e" T
9 p' a+ a' ~+ H% q) y% b! Z
       asm(" nop");4 T5 J9 i/ Z+ t4 B

( o9 f1 S7 |6 b       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. G4 D8 B/ |8 n2 E( ^' a% S! _  Y    }
+ A9 Y! x0 Q, F! O0 p7 s8 g7 o; @
) D, v& P& ~3 X) L$ b# L8 ^& |* n8 c4 g    /*检查UPP传输的数据是否正确 (loopback modes only)*/) e2 }+ s- K  D# t
    //UARTprintf( "i=%d\n",i);& N3 j  g# C7 X/ Y4 ~8 t; r
    //UARTprintf( "j=%d\n",j);, [! X% E- ?% Z1 i* f
    UARTPuts("Data mismatch in buffers.\n",-2);
$ i, m/ w) t7 n7 W9 E9 P    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ y+ J! [7 z& z- Y' \5 X' Q    {
5 h1 i0 _* P) _* H/ {6 S7 t0 n        for (i = 0; i<upp_frame_size; i++)
# `4 `5 Q: Q' J! C+ [        {
7 m& o0 J8 B) u7 s            if (upp_buffer_a != upp_buffer_b)
8 w8 n& y+ \/ ]* @; E            {
: t+ o3 S" Z3 K' v7 e# }1 k% I                upp_error_count++;
$ P/ f6 N8 Q9 c7 v/ q            }7 P  g2 A& h/ b: Z/ ~
        }
+ N( m2 V+ m& `7 q5 X, Q    }
2 L2 `; q. Q, }( j- e! O+ r2 K9 T8 y/ p4 L1 K, }0 v' o: ~
    /* 报告通信结果*/
5 W  N6 W% g4 L2 v    if(upp_error_count != 0)
% M/ q9 t: u; o* W        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ W( n- U% D5 M
    else7 m% t/ W- v! K$ {2 t/ Q
        UARTPuts("uPP transfers complete!\n",-2);
. n& @8 T- E  C8 A# d  y) `7 _& M( P/ {# ?
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: C" s" q+ V# |
    UARTGets(ch,2);
" t3 ^8 M9 U4 Y+ O2 A- D) U    UARTPuts("\n", -2);3 }( {$ y8 G5 H& _
4 J8 H2 `; X$ X$ N
    if(ch[0] == 'y')
  t; t( t% g: v$ u& F    {
5 U, j; }# I, s0 i1 t" W3 {        /*打印全部读到的数据*/
, Q* \3 g7 v# X5 D        for(i=0; i<upp_frame_size; )
1 |$ q3 i/ \( N2 Q8 k        {0 t1 A2 U% r5 n: `4 Z: b$ ]5 a
            for(j=0; j<5; j++)' g' A0 Y) J# f7 v: ]- L
            {9 M1 b5 F$ r3 k" c( H7 k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ J1 u( |1 G, \1 m& S                i++;
- I; }: G7 |/ D                //if(i >= 4096)5 }0 E. g2 O* j6 l
                //    break;) u3 d* p& a# d! X: `& ?
% Z  c! g4 g0 e$ k& T. H  {
            }0 o( q, H+ r) q5 |5 X
            UARTPuts("\n",-2);3 B/ G5 U& z( g7 x/ K# B+ R4 `
        }; m. x* G; A8 r$ T3 I! M5 E4 k) [
    }
+ F2 b( F7 B! z/ O, k' d; Q5 B
6 {+ \7 {3 Z5 @8 J}

/ W- ^  u1 K7 f4 y8 P3 G2 Z+ e- E

% s; ?- B- M  M
# {4 j' ~* a, Q6 _
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: G& s1 K% v6 N' Q
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 P6 x; O; R/ G) H! B





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