嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. Z% ], Z% z$ L  b6 l( A
Void UPP_TASK(Void)
" k3 V* L6 g5 ^7 S$ U{
' p% z& Q6 O% v- Y; B) a4 U3 W- x
3 X( M7 l; O" b: c    int i,j,k,target_int_count=2;
) h- R9 Y- k1 [6 H    char ch[2];( z0 T: r- K1 b; w4 n5 l6 L' B, ^
; p8 ]$ M* Y  M1 k, w

4 H* w7 v* ]5 l9 G6 h( K0 z% P5 Q6 Y, D0 ?
    upp_interrupt_count  = 0;/ A5 a* Y  R$ _$ P4 U8 p
    upp_error_count = 0;, A8 ~9 s4 |$ T8 g! u6 g% j
+ G( B) P9 q0 _; U" ?( F  |5 f" {
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, L" l/ a5 B3 u: r* b
    // Initialize data buffers) d. Y2 H9 _; ^% x; f6 P
    for (i = 0; i < upp_frame_size; i++)* h% Y" y* R. Q# l/ P7 Z. d
    {, w; D: m# V2 H! m" J: p5 L
       upp_buffer_b =i;, g: T! x7 ~, y  F" D. J0 u
       upp_buffer_a = 0xDEAD;
( H% ?9 T& ~7 L( f: W$ w0 ?    }8 h$ U! n- G! R2 m% [+ L; q
& E. W8 @- H/ R6 F
    //for(i=0;i<1024;i++)
% v8 ?- d  K& n1 Q9 R    //    temp=0;
& z  U; n! |. `& \/ e# M% [* L: C3 o  j2 ]9 n' @
    //UPPReset();, {- N  _8 P" a0 G
    /*启动UPP DMA传输*/8 n3 z8 a2 j; V0 h& h8 T
    UARTPuts("upp_prog_dma_i\n",-2);  p2 G% ?, L: T0 R
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 d. s6 _5 [7 Q7 i0 t    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 [9 w, v6 m) e% ?) l1 C2 H1 z
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% U7 p7 r) N$ X8 O% J) o
0 T6 v0 B4 `( f! U* J, P    UARTPuts("upp_prog_dma_i\n",-2);7 W/ s8 ~/ ~2 f+ B  N6 d
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" G- l, k/ M3 r1 ~; H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! Y, i1 {1 [6 r% W+ X    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% K/ @$ W1 T7 t* S6 O4 x* N! ^

- O. v( P) w: y  J    /*等待UPP传输完毕*/1 ~2 a4 x# m: n5 q
    //i=0;
) M7 y' ]8 l( o    //j=0;
* N, ]8 s0 A5 V    while (upp_interrupt_count < target_int_count && upp_error_count == 0), r4 Y; B6 l: [% d7 J; D6 `
    {2 _$ S! ~" U2 {
        /*  测试UPP传输的同时操作普通DDR数据
4 B0 H, `6 d' I4 [; E+ J        temp=i;, J) L' l, J( X# o6 ^% C* P
        i++;
# H- p; m/ I" d3 r# a& B. i( q        if(i==1024)
* q. `+ ]# R4 J        {/ q# L  {- V  A$ m
            i=0;
5 R2 Z, y% {9 j$ x5 o            j++;
5 m1 I2 L" g; ^        }
: l5 j$ S7 k) e! M, D        */: }/ p0 w1 T2 s* [. s/ d# T
3 P! c( s5 t' M" F' @
       asm(" nop");
5 E7 i$ F8 ?3 a6 f; f2 U: f- W' I
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! P1 s8 L: E8 W4 U$ a* c    }
/ n- k5 t; a& q( ]# v% t, e/ i0 z7 K
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  C) q- j0 l4 K2 }    //UARTprintf( "i=%d\n",i);
$ S+ b& l" `7 W/ B( h    //UARTprintf( "j=%d\n",j);6 @! l+ q7 K2 c, W4 G1 F* u
    UARTPuts("Data mismatch in buffers.\n",-2);, r( m; ]6 {* F# v
    if (upp_interrupt_count == 2 && upp_error_count == 0)
  U8 f$ Q$ I* c8 l1 F. b    {
7 m6 {7 ?# W+ |& X# I; W        for (i = 0; i<upp_frame_size; i++)  t% f, I! q& n( x' N+ u4 [+ M& W: s
        {) D0 ]9 }5 z" g; Y
            if (upp_buffer_a != upp_buffer_b)( [3 Z- _8 i9 Z$ |- }
            {
; W+ a: e8 L2 n, U6 ~* ^: R. n                upp_error_count++;
5 t! x* S* w. L  S* e# x            }# ?. v- i6 [# U" G% b& Z- k
        }
% k3 h6 [$ Q1 ~1 p- E    }
; |- N% A  M9 M/ H( `: @/ t1 m7 m# b, n" g% C
    /* 报告通信结果*/
$ q& l$ @, {- {3 s. b% P& I0 Q2 l1 K    if(upp_error_count != 0)
7 F( Y( S4 {4 f9 C: W        UARTprintf( "upp_error_count=%d\n",upp_error_count);. i1 W3 K3 o2 Z# ?, j
    else
7 p2 i* w9 d: F# w        UARTPuts("uPP transfers complete!\n",-2);
# [8 m* u  y4 x; }2 S4 n& r# h
+ p4 T6 l# ?8 m; E8 k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 x* X- n9 |4 E5 j, |# N. A6 r
    UARTGets(ch,2);4 l7 o& F2 u, M9 z; \: f
    UARTPuts("\n", -2);
# M! n; O# R0 O- u+ f: ~1 p6 v! O3 j1 z$ m
    if(ch[0] == 'y')1 ?& z8 s! f! `
    {
1 ^- R% r5 d/ |        /*打印全部读到的数据*/8 \$ n2 N1 C3 C
        for(i=0; i<upp_frame_size; )4 ?- T9 [' i3 m! L7 i5 }- ?
        {
# h' s0 l6 _9 Q  i, @            for(j=0; j<5; j++); M* o# d" F3 r& e5 _# q8 ~
            {
# E/ {. J, r& L0 E( k4 V4 |                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( t! X$ \8 e: b: `7 s                i++;1 B6 @3 H5 U) x( ^! o+ [- B, x6 V+ W
                //if(i >= 4096)
) ^5 {% Z5 m& x  u  v/ w                //    break;
! a; t6 g- A( _' {4 d) H
" U* m& c. ]/ j            }& Y5 [) \* `7 |/ J- U
            UARTPuts("\n",-2);
5 W6 q# z! \% L! P4 E, i$ y  `# G        }1 I# s% m. }% i7 N: x
    }4 n2 u& Y- F/ `0 P5 y% v! @
4 ^5 v& x. s5 R4 l0 e# S1 Q
}
: U' O. }8 K+ ]8 B

9 E  r. B% u7 b5 I8 i1 {0 u8 b& `

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 T: d8 _- K! M8 T" y7 V
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 ^/ J9 J, M2 j. J+ ?, F





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