嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: [6 c7 o3 y0 M; _5 m' X5 }, b
Void UPP_TASK(Void): h* p- `- Z9 p
{
8 p3 n- D4 `+ @- I2 ]* G2 |% D3 m3 T
    int i,j,k,target_int_count=2;
4 ]5 d6 F9 K( c0 i- A* S    char ch[2];
3 l8 n& w; {1 c- ]  @* I
4 w/ G  \' }  P# c6 s9 S! t& S- U  I$ \  v
1 ?$ H' e6 t" _; z8 I
    upp_interrupt_count  = 0;
2 i. k3 e. h8 F' z1 {' J: ?0 `! X8 z: `    upp_error_count = 0;
3 z* @- }4 e; @, a
, d3 `  t5 T! N, i  J( F    UARTPuts("\tResetting uPP buffers...\r\n",-2);) C( r) `) d. {4 c
    // Initialize data buffers  O. H% @, B. d% {0 l! {7 x3 F
    for (i = 0; i < upp_frame_size; i++): \& p; L- n6 _' P: J5 K- d% `' t
    {
! V2 m( K: [3 c" N# ]$ M       upp_buffer_b =i;
, z8 {) X# i2 W' e       upp_buffer_a = 0xDEAD;
7 U3 c! z9 v3 `" j' N) o; ?    }
6 R6 i/ B  ]* D* M+ v
0 b3 C" e1 e. F    //for(i=0;i<1024;i++)/ q; d1 |2 ^, J1 p' _8 I; \
    //    temp=0;. Q' d8 O9 p8 F( f0 a0 T

: b- {2 l3 U$ G4 X' z# J    //UPPReset();) I  h% Z+ F* F1 e) q# x
    /*启动UPP DMA传输*/
" [( |! b- t* S; E  n2 N/ R3 C    UARTPuts("upp_prog_dma_i\n",-2);
6 u: v* B9 e  v/ A5 W    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& a+ c" R3 K& Z! G$ z3 ?" j3 D
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 Y; n& z3 F, F' [9 |& _% A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ }, K/ G  v! r# D8 y/ P0 [& b3 Z. D) f" `2 G6 w. L2 R
    UARTPuts("upp_prog_dma_i\n",-2);
8 E. {) P# ?9 I. L    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 U+ U& d* x7 a. C& M& C: ~5 j( ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( m8 f, X# i  B5 l% F: ?! }* n" f    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" Z1 w1 q  V3 [. N  \: J$ g; L8 @* b# G7 d
    /*等待UPP传输完毕*/
+ G6 P6 O/ A9 a- L    //i=0;) K4 i  M6 r' G# j
    //j=0;
* b9 o# g2 V3 x; I5 i+ _* p    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 K4 T% R  n( y) P4 V2 Y9 q' `' m    {, f' u! s/ g5 c$ J
        /*  测试UPP传输的同时操作普通DDR数据0 Z2 }$ }) U. [8 o
        temp=i;
! {- v/ K" }2 G1 O! a& X% {        i++;7 _# `7 @* K# g, O
        if(i==1024)* z4 n2 p% q- d0 l% L
        {
. L( p, m7 M. m, |# D+ ^4 v            i=0;
+ v! j0 h: y' p( ?' @. A! f            j++;
; ^1 w$ `2 ~" I' M6 M        }: r/ G  N6 p' W- i
        */
9 L+ F( L# u& O- u7 y; a9 v4 l7 U: W8 Z& f8 i
       asm(" nop");
1 \0 J9 i- z( c) u2 K; K6 n! h: k$ Q& ]3 r1 _
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 p9 C. D# O+ k. t2 ~  e; W# I8 E
    }5 F. \% u; c" @9 R% j9 q

, l9 C- C+ f* k" ?% N9 D% V# ~    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: {% u5 R2 k; ~4 X# w* T! i    //UARTprintf( "i=%d\n",i);
3 h6 {( T* w5 f; x9 W& R    //UARTprintf( "j=%d\n",j);
" ?: ]" _: D- A& {, Y    UARTPuts("Data mismatch in buffers.\n",-2);
, I9 D8 J0 g! W    if (upp_interrupt_count == 2 && upp_error_count == 0)
! I- k! P: R% r2 I+ p    {! k# Y: v/ }6 p) B& X: Q, Y
        for (i = 0; i<upp_frame_size; i++)
; s3 Q# [8 u% |1 J        {5 y& W0 X; q5 t8 h  |
            if (upp_buffer_a != upp_buffer_b)! g/ ]3 d4 B# y- R. B; K& W1 r+ Y( P
            {
) |! E0 y' C% Q; s( x                upp_error_count++;8 z! Y0 W  i0 U) f! @
            }9 j+ j2 c! h6 E6 m5 Q, T
        }% H( z. `! t' ]2 G# q) Y' K) E0 p+ @
    }1 I; ~, z% E! [5 i& |& U
6 e; n% o+ f# Y- x2 S# B1 p1 i
    /* 报告通信结果*/
5 }/ h. K# E; B* H    if(upp_error_count != 0), Q8 R. o) y+ W2 e
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# k1 a% |3 `9 [3 `3 g    else9 g- E4 ^2 x+ G# I
        UARTPuts("uPP transfers complete!\n",-2);
# y8 G# C% a/ k7 j" q' b! [  h- R. \. M# {5 d+ p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 Z, X" Q# R: N; r9 G
    UARTGets(ch,2);
3 M, p$ z& h% U8 X8 u+ c+ r7 z* A" P4 _    UARTPuts("\n", -2);; X9 l) U" `# w( C8 d- {: B

9 u# g1 f! \: ?1 E# t- z# U+ V    if(ch[0] == 'y')
0 `) r! g* j" g! m; F# r    {
4 H" T* K* ~, X, J6 x        /*打印全部读到的数据*/6 Z) N* B& ^4 i5 R. |
        for(i=0; i<upp_frame_size; )
0 A6 m( g) U% ^. c  q        {
/ e0 {# \' S) m6 K8 x' N# G& o            for(j=0; j<5; j++)8 T' X1 F5 C1 R& ]# z: x
            {
5 P3 e  Q/ `" @. N& b- s9 s                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  j9 Q: ~  `% D                i++;
, A* L1 k7 g# F                //if(i >= 4096)% [1 l4 r4 T2 m
                //    break;7 {" k$ V/ R0 l2 E. \
# S( V$ a7 f4 J5 L2 ^7 M
            }
' p/ ^1 x: s& o+ X# {" T            UARTPuts("\n",-2);3 f: Q' e; \& h+ ^/ A8 \. Z) l! M' e
        }
4 G* M' W( O& [3 J6 j6 t) B    }  F4 |4 r5 I& N4 t0 ^7 C

7 D# M* N; U8 T% ?: q8 y5 J}

# K" K- s$ ]( y2 Z* m2 [  h* C+ `

. N, _* M6 j. f+ r7 I) f
$ i5 p. L  k% w  s2 Z6 s  G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 s+ k& Y4 ^9 D+ }# d" y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" ~) Q, S* x& t+ r




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