嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# C5 F% Z; a9 h" {% U# J
Void UPP_TASK(Void). ^/ B/ C/ {& `0 D
{
$ B, U2 y" U$ `6 |! Y1 G6 v/ l9 S5 f$ K7 q1 D$ g# U
    int i,j,k,target_int_count=2;" V! i' B/ C  [
    char ch[2];
8 r/ [3 H& U0 K6 x+ t' l- T9 m  M0 I# h$ B; M

  A; f( e& O* |2 N* Z3 E
) A" G: |2 A/ |, G5 b: W3 Z    upp_interrupt_count  = 0;
% F. M9 @; }  y: D6 z    upp_error_count = 0;
- X& g/ G, e) A7 p% ~) N2 u$ X* X5 D! _# [2 U% @& s' m# S: d% ~
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 l4 v' Y' f. [+ I+ K6 A6 r; N
    // Initialize data buffers6 g, x6 a9 T8 z: l9 v5 j5 T& [
    for (i = 0; i < upp_frame_size; i++)3 Q% Q. e; {( ?2 ~% f
    {
, n1 y2 |, ]2 b$ r2 n& ]8 H: L5 H       upp_buffer_b =i;
1 N/ Z8 ?  B  P  G! m0 r       upp_buffer_a = 0xDEAD;
2 a, k3 W9 v; [3 b/ h* e: v    }. ~1 B6 l) ^# z5 J0 S
' B8 ?* U2 |2 K$ U7 N2 l
    //for(i=0;i<1024;i++)0 A5 o, l8 N) G- H
    //    temp=0;+ t3 a$ I' n" Q

+ a* p0 s- P$ D; Y    //UPPReset();
. x; i& ]' `* K* Q    /*启动UPP DMA传输*/  w" y! X1 Q( E) v
    UARTPuts("upp_prog_dma_i\n",-2);7 K% V# ^  Y7 Z# h' {0 D
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ L6 p3 G' X) w0 y! H+ d    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 O! `$ x# t3 E# p    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# Q* m$ E9 @+ ?( f- v
4 N) y4 N# A9 p  V& a  F; H$ F
    UARTPuts("upp_prog_dma_i\n",-2);
1 w0 Z9 p' v! v3 `: ~; G& x; B    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; \# {2 I1 k& d, Q" [
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 O; e" P+ T# \$ K- y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# `( Y  R$ M$ Z: W7 t! k1 h7 U. i9 g8 H- x0 B
    /*等待UPP传输完毕*/
! ]# L7 E9 z& v6 M% N" Z+ m' U7 P5 T3 `    //i=0;" |4 L( s+ I* P" F5 M
    //j=0;) x) T; b% ]4 I# _4 U3 B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 b4 T* o. V6 F; S- n    {
5 t* N1 G6 y1 Y1 P5 l        /*  测试UPP传输的同时操作普通DDR数据
) ~, |  k9 E1 n3 a  |        temp=i;
) b9 d; V7 O4 M4 U" U5 Q: v( ]        i++;$ {" t/ S4 W5 `% V/ Z: `% z% y) R
        if(i==1024)& d  w; J* z! x
        {5 c8 E+ _8 F  [( |* R- G- C( H0 m
            i=0;
& p8 ^  c# A8 D" O, B) d            j++;
( e- P; W! C: c  r" I- O8 f        }
' ~7 G  Y6 a* p1 z7 T        */
  X0 m+ D8 N3 r1 E. t. w" H" ~- h% a/ }5 k' A4 H! W2 s+ x# a
       asm(" nop");9 `$ K/ J3 v2 M: Q7 V) K! \
  t& i  L8 t6 I* D
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 r; U0 h( a. e9 c/ m    }
4 }# a& n- \( u* N
) L6 ]9 B, \; d, Y# p: w. I' o    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 s# q" c* c8 N
    //UARTprintf( "i=%d\n",i);
' k6 t+ d+ D9 o5 W# Z- f5 e    //UARTprintf( "j=%d\n",j);/ l2 g+ m3 b: k" g5 v. R# k* n
    UARTPuts("Data mismatch in buffers.\n",-2);# V  E, Q! R, a  H
    if (upp_interrupt_count == 2 && upp_error_count == 0), L# u/ `) {8 O
    {4 ]( E3 I* I) m6 T9 W6 n/ n+ |
        for (i = 0; i<upp_frame_size; i++)& S% K* }/ J2 ^& [
        {
3 |/ k+ d+ ?+ Q( H! j  ~            if (upp_buffer_a != upp_buffer_b)) P7 L5 L! e9 r7 A, u# O/ z+ G7 {- \
            {4 A( x" h6 N7 L. z+ J- @: W9 e* z% k9 M
                upp_error_count++;
- ~! ^9 n4 y7 F7 p% }# o' T            }
* c5 {$ Z6 U5 o; W/ N- d        }
* Y* n/ J& [2 c) G) ^9 X    }; T; t- Y4 h6 _! g! T

$ q/ S, M9 I. ^) `0 B- _+ ^$ T    /* 报告通信结果*/
, q2 H3 I/ ?7 S, w+ A; K% w( d+ ]    if(upp_error_count != 0)8 J  k1 N1 M1 u8 q0 u+ y9 i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- a" W9 x+ ]4 s7 w) S" ~    else' Z$ A& _$ |1 U
        UARTPuts("uPP transfers complete!\n",-2);
1 j( \5 a1 Z2 z, p
3 b. N$ j# s+ o4 k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( C: q, b5 F# m
    UARTGets(ch,2);
8 T2 @0 H7 l7 P# R& ?' j    UARTPuts("\n", -2);
  ^3 j5 ^' B7 }3 }
% d4 c6 d) n* Z5 Y; l    if(ch[0] == 'y')" T: h( r9 v% ?. I/ C& G
    {
! [3 U, S! d+ F' W& z        /*打印全部读到的数据*/
* R  V, w2 O. r7 k4 t3 k8 j) z        for(i=0; i<upp_frame_size; )
! k/ K$ C& D/ l: t$ \        {. r* u/ A0 i4 o' V5 z. T9 W+ l
            for(j=0; j<5; j++)
" }! u! `0 w/ }$ E: q( c. S* H            {
3 N3 u1 a. t/ A5 e0 C: N3 W9 N  ~                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
& U( a1 b. D1 [- G3 L9 _                i++;
" U# ?! E$ ?+ T9 s. X$ s                //if(i >= 4096)0 K4 L7 B8 G) m
                //    break;1 I, q! [% |! P! ~# I
  ]2 c, u" _: ?: N
            }
9 O& B! I) E2 B+ ]: _            UARTPuts("\n",-2);* U: U+ s. s+ }
        }- n6 K9 d6 H( c
    }
! k9 R  D5 r: U% B3 ^* Q
7 S2 a5 k% W, ?# q+ W; B}
* r8 v& ^2 |* x
; l& p0 z+ W- S5 b

* a" w, R! z  W
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  I# B/ X& P0 S4 x6 U# h3 D

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" z0 a' T* k" H! H/ r# i. H! k  m




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