嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ J5 X+ @! H0 ^3 b! D
Void UPP_TASK(Void)$ T8 M( ?$ p7 U  H5 a+ J
{8 @! J5 q) e7 y) j

" h% }) ~( P0 W& U    int i,j,k,target_int_count=2;( A4 R. Y6 f/ `) S* U
    char ch[2];7 M& B# g7 ~5 n5 N

. e9 i. K6 Q' f8 z) [% G0 ~, B" ^1 U0 X! E
$ \7 U! g( V1 a; [) n
    upp_interrupt_count  = 0;% C, U" I  q& K/ ?7 j
    upp_error_count = 0;2 j3 Y7 b- u! O
/ V6 v$ L3 T& e* o
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" ]7 \3 `1 T) G% r  t8 w    // Initialize data buffers# B* P2 }; h" T
    for (i = 0; i < upp_frame_size; i++)& K) B1 Y9 A, P4 m
    {9 F6 ~# v- {0 ~2 T. p
       upp_buffer_b =i;
+ C3 g! b5 K" P! {, e       upp_buffer_a = 0xDEAD;
. t5 s! F  P8 ~8 S    }
/ P; r4 X6 ]9 Y% N+ F6 {1 z" ~) P4 H( l
    //for(i=0;i<1024;i++)) V, J' @4 V" {# s
    //    temp=0;* E# r$ }: {# M" k7 p/ w

/ y  r) b) x, [' {. _! T    //UPPReset();
( n, W' g+ y% Z! {7 q5 |    /*启动UPP DMA传输*/
; ~5 X8 v- |* D" C    UARTPuts("upp_prog_dma_i\n",-2);
( b% I8 P  W" N3 Z  r" j& u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 n& k. ]' \) H0 ^
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ O+ X+ ?1 q  M( q4 c
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* k) Y& ~9 ?: Z) x; s
2 l+ k! q5 ~2 ?6 e+ E" |! m    UARTPuts("upp_prog_dma_i\n",-2);# }3 K2 d& S& D* L
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 g- ~9 X2 ^; |8 p0 v! ~4 a7 d9 n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; x( E. J4 E' j& M# y$ ?9 B2 q0 s    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 g  ~0 L3 y5 f* i; b7 j4 a
. k6 l0 m2 Q0 B" w) a% u8 C    /*等待UPP传输完毕*/9 x" D( G# G+ W% d% G$ P' N# o) g5 Z
    //i=0;
2 b: ~$ u1 \' G' Q    //j=0;) G$ P* R# r4 A: Z' c2 b+ Z% J1 {
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ e0 h+ H8 |) u3 R, W
    {
" J* T6 P4 U) E5 [6 G        /*  测试UPP传输的同时操作普通DDR数据  R0 j/ w2 N3 \  u( F
        temp=i;
4 t& U2 b( V$ R8 d9 E        i++;) m- _8 D0 l) Y* q7 a% g& d/ @
        if(i==1024)
7 b8 G( X4 F! w2 E! J6 i. y- g        {; Z2 G8 }+ q: h' v
            i=0;7 @) a6 u" T' I8 u1 z2 ~2 N
            j++;
- e/ I% R! `% R$ R        }4 f1 y- j9 E, w
        */
  r: X" r) w8 C7 M# S7 e* l/ B0 M9 v6 X/ ^7 u) @
       asm(" nop");
3 E7 |% J( B8 _  K" A
) C/ q0 P8 Y7 z" q; w       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 N) L4 q% p$ F- j( b
    }
+ `( y( H) c- |
: _- o2 K$ B- h1 s( b' g' L4 U    /*检查UPP传输的数据是否正确 (loopback modes only)*/' t- ]% n0 Y+ _  U+ }& W
    //UARTprintf( "i=%d\n",i);
2 x; i, h9 `6 d0 p    //UARTprintf( "j=%d\n",j);" f( w+ F; y' Q9 z
    UARTPuts("Data mismatch in buffers.\n",-2);0 X3 T9 q/ X, b
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' {7 P0 i- U' [9 ^    {
$ v0 p# U; W3 \3 C8 x- M" J        for (i = 0; i<upp_frame_size; i++)
; i  g+ G; c( C; j7 U        {% m( K6 V1 R8 {  g/ [; p! u
            if (upp_buffer_a != upp_buffer_b)
) N2 ^) a3 c# v$ ]& J$ V            {
1 H+ a2 |/ {" j; c                upp_error_count++;! O/ L6 n& ]5 ?! Y/ T
            }
7 `$ D- l  G, Y6 u2 T        }
' S7 b9 W& D2 \# l    }3 c8 R& M' |. ~( W4 e

$ @2 P( L7 I. T% L9 v5 K' H    /* 报告通信结果*/
( w  [  w) O2 J' a, [' C    if(upp_error_count != 0)7 `, f7 z5 j3 U; J0 h
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 w: y# Q4 G0 f/ H    else
8 @& X. o4 C; z3 m# Q        UARTPuts("uPP transfers complete!\n",-2);
, q; a/ ^3 X$ T" N, g: P, O: A9 f, Y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; X& i/ q: F2 \0 \    UARTGets(ch,2);: Q; }6 m8 q3 o& S& e6 z2 |
    UARTPuts("\n", -2);
5 Z) v% T) N; F# G$ K4 T% ?& I, ~3 E+ w( B
    if(ch[0] == 'y'). m  I  ^" L" ]3 I9 n- M
    {
( M9 d' o  |5 \) W0 R3 ^% N! p        /*打印全部读到的数据*/6 ]& [) ], }" C+ X8 f0 n
        for(i=0; i<upp_frame_size; )$ s' e' |, x  C" ]
        {8 S  f3 Q# F# r- t
            for(j=0; j<5; j++)
) O; h8 c: x# O( H" G            {
% q  N) ]7 B; Q/ ?                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# ~" w- ?3 _: q                i++;
' l0 g5 v) H$ W9 |/ O" m1 o                //if(i >= 4096)
- T' A* p& o3 |* c" ?                //    break;
" L& Z5 K: p. b, z5 N/ E* j- H7 S) R, E" i- ?, p: W
            }
) z7 P2 G" p8 i, S: X: p. o            UARTPuts("\n",-2);/ E# `- C3 i* C
        }$ v+ ]6 O# f6 C+ R# N2 M  q
    }1 z; ~& ^% _' ^0 {

, g, h* {6 X% N6 }}

, x5 |$ M6 f3 ?& F  Y; q
. V: y4 T2 W: X; G9 w4 ~
& a& A- n3 W' ?' N7 }2 p+ D) x

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) B' Y! p7 |8 @# _- ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& \5 R9 I  B( c7 x6 b$ o. {* m0 }9 u




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