嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 G' M0 E% I* b% S7 ?2 N$ ?8 d. I
Void UPP_TASK(Void)
" D; Y6 E% G' Z4 G/ i/ u3 M( U5 j{. ?7 T  o* `. W
( p5 ^, J! U8 \  R
    int i,j,k,target_int_count=2;: R3 o# }2 h+ L& c
    char ch[2];* s- z$ B& a9 `
/ S8 \0 }- z  N: B5 b# |/ S
! x+ t. R- `5 u3 I/ Q
5 O; G" g* e  v+ F; _- r
    upp_interrupt_count  = 0;
3 y/ o+ W, f7 O2 N; `+ i9 a& K" g    upp_error_count = 0;* }# }, R+ {' F9 o# E% q1 D6 ?

/ W8 E# w# O/ t8 m    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 B8 c( a  y. ]3 |9 B$ K- o    // Initialize data buffers
4 C- ?% ^& e0 q' g3 R& G    for (i = 0; i < upp_frame_size; i++)- N9 r4 }& d! i# e
    {
3 `0 s' R- O, H- q4 d# Y       upp_buffer_b =i;
+ U* z, N; l  U9 p* }+ {       upp_buffer_a = 0xDEAD;! z3 u( ^7 Y4 P, k% F8 ~
    }* z  @7 D2 F* @  n2 j

! S' s! E' U  `! g    //for(i=0;i<1024;i++)" O8 q: Z7 j, w) b$ g; P
    //    temp=0;
; w$ w9 ?# q% s& c
' P- n" P- z$ u7 \    //UPPReset();7 J1 H, b) e; A  x. N/ u
    /*启动UPP DMA传输*/, u0 X, [' W; I* J) t& ?
    UARTPuts("upp_prog_dma_i\n",-2);, R/ m+ P. g' N, C0 T
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# e/ b9 o' w" l' Z    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 f2 {+ q9 Q' n% W6 g7 w; g
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 a$ \  @  |$ J: @# T8 `* ?% q

4 D! c' l- K: P6 u* t0 j    UARTPuts("upp_prog_dma_i\n",-2);
; _7 `1 E1 |9 t+ C- L    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' g( J! c/ ^3 r8 o
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; A9 ?; m. L5 k8 n( v. \, `. v    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ t6 C+ }9 c- W1 X6 ^. D! ~* w
& w5 I& _0 {/ }& ]4 N  u' E    /*等待UPP传输完毕*/
' E2 m# \7 Y3 o, o" e$ X    //i=0;% l+ Y5 ?& |% H
    //j=0;
" m, s: Y% n5 i4 Y- ?6 X! ~9 w    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 ~" E- ^3 k& ^6 f    {( \  i) D( j8 b& s7 B9 ^
        /*  测试UPP传输的同时操作普通DDR数据
  K/ C7 X" ]; n( ]# U        temp=i;
0 J  L! _+ k' @3 W        i++;' H1 b- C* I) h' i8 \% d
        if(i==1024)+ o* s3 Z7 w0 c% ?! _( p% b8 N
        {
% q- z% Y: Y' n. X7 T! o4 h  [1 u            i=0;
4 C* v  B% x7 e# D) w- Q2 N; N            j++;) P) ]% [0 r" {! l! y+ m! x: X
        }
5 [3 d7 o  y& z" L( p2 V        *// S9 T7 N% q; h8 Q% k* a* C
& O. M# l/ q( ?% c3 I/ p
       asm(" nop");
: G+ q3 x2 Y; n0 b5 r2 Z/ v7 b; K# g# r, d7 D6 d$ D1 w
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  ~* w& u( }# }# K    }
0 O2 y- Y: W- I& d: {/ ]8 p1 y$ Y( q# N2 a$ n- }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( y3 i# l. D8 X" j' ?  ~
    //UARTprintf( "i=%d\n",i);; W; z8 J$ b2 H" |. z
    //UARTprintf( "j=%d\n",j);' Y1 E2 E- z4 g5 }
    UARTPuts("Data mismatch in buffers.\n",-2);* I! _" P" p' R5 }/ }
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 f+ Y! k' }! K! k. C( w
    {- F3 L+ `! z1 b& i, C
        for (i = 0; i<upp_frame_size; i++)' i4 I; u1 ?  x/ @" T, O, V
        {% O8 V' C/ s  X
            if (upp_buffer_a != upp_buffer_b)2 u" ?5 F7 F7 k& a0 c
            {6 f5 U0 d: Z/ n* v- N
                upp_error_count++;
4 H2 ?/ P0 Z5 G9 u* `            }1 C  ]6 p  ?, ?: U' q5 P7 I
        }
6 F9 @7 K, }6 g' j' Z/ Y    }$ ]! f& r/ P% b1 S$ b
. U# g; `9 \. Z3 ?. d1 I( {- `+ X
    /* 报告通信结果*/- r4 g$ y$ p+ v: V
    if(upp_error_count != 0)
# Z. k; ~! w5 K+ T        UARTprintf( "upp_error_count=%d\n",upp_error_count);& t1 R# Y. e5 R
    else1 s: \7 _4 ^( R3 V
        UARTPuts("uPP transfers complete!\n",-2);1 K( d2 T, y( Y& M" e# J- R

/ v0 d9 d. X/ B' l    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 T6 C* [) z9 G) w7 e3 h    UARTGets(ch,2);
, i: f1 u1 k# s' u# A. h1 d& s# x9 @4 }    UARTPuts("\n", -2);& Z- w6 T9 z+ U* n
$ O7 A, H) w+ R' r$ c  l8 W
    if(ch[0] == 'y')
& D5 F7 `( D- g1 e3 S    {5 q! Y& q* `8 l; b: p- }7 f* d" k2 }
        /*打印全部读到的数据*/
' {" T, y( z$ t1 C, }        for(i=0; i<upp_frame_size; )
% d; {2 b4 d% R        {) w  ]7 j' u: s, r; g3 n
            for(j=0; j<5; j++)% \5 V8 p6 J9 }9 _+ p' T) ^
            {
+ I' b0 c: T6 Q                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);# [7 c9 t3 w0 V1 f- A
                i++;6 J. ^2 E- D8 [( B$ L
                //if(i >= 4096)" M  k1 I2 G( T# P( p- L& C# h
                //    break;
1 P; W/ x9 s% T* f2 B
, W) G2 G& v  F" V            }
9 C0 L8 ~/ j& H# C2 Z/ r$ _  u& o            UARTPuts("\n",-2);( _5 Z, e& Y5 z$ O* F( j
        }
  E, S6 y3 M6 l1 m: I5 u    }: y7 x' m1 o' W, @; n5 t
/ m) Y8 V6 E! l" U) s1 T6 ^
}
! j" ~0 p( M! ^; C( g; y/ |% ]

; O" [4 ~( h! ]5 J7 I; p2 {
# H- v6 u" _: ^& B
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 F# Q! N6 m; _+ w8 `( w3 l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: d! B/ g0 z# L+ q





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