嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- V% d- f0 l' e8 m" ^4 j4 m' x* ?
Void UPP_TASK(Void); e& W0 Q" ~& X# b$ S! \3 Q7 I3 O) M
{
* Q$ O' g" @+ ^+ {/ F" m6 F1 e
& l! c& `/ \6 T    int i,j,k,target_int_count=2;
  G1 A- Q1 P1 Y' j4 [    char ch[2];
4 P, @7 N$ V. i# V1 ]8 ?8 ]+ h; P' E$ E. l" `

( n! ^$ a7 H# \) l1 w+ Q! a3 E& O, h
    upp_interrupt_count  = 0;
" c- o' P1 p4 l' `* H- h    upp_error_count = 0;
1 s- |6 a& n* y7 ^; o9 @, N. B' G$ u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 Q1 a9 a5 D' q7 t
    // Initialize data buffers
7 o. ^/ F* H+ V; t' ~1 G    for (i = 0; i < upp_frame_size; i++)9 k$ q% u/ Y9 h; R. v8 N# a
    {
! l7 `9 O! ]6 O8 D$ P$ V, O6 g       upp_buffer_b =i;; [& |( U3 }& {' Q  T
       upp_buffer_a = 0xDEAD;
% p- [: P; T1 P! |    }1 h: i- S! ?$ _/ f+ k
  p) p! w4 f& e: g- z3 M
    //for(i=0;i<1024;i++)$ B2 j) X& f9 d: \! p5 X7 I
    //    temp=0;
6 B5 X0 m4 N! S; v; ^6 d5 M  n! w" [" K
" S  V5 F3 V/ ]8 {' k3 g) ]: u    //UPPReset();
! _. Y1 \* C$ k  u5 k6 B    /*启动UPP DMA传输*/9 w: |" I+ R* R8 e  L. R
    UARTPuts("upp_prog_dma_i\n",-2);6 N" i% z, _( F* e# X, B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- g0 W, C/ ^; d. t    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ f" M/ j/ k5 ]" h* v    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- ^- z! ?6 i' H9 W( N  j/ q
+ Z; g0 K5 _- O
    UARTPuts("upp_prog_dma_i\n",-2);' e% C3 D4 b) k6 Y$ a
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; ?1 s- _' ^; s* o) E$ F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* j" |! [4 p  f9 U8 r/ W9 ^) s! S
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" P: a" f" R  x1 R6 @- m

* {: A3 K" y( q+ J    /*等待UPP传输完毕*/
0 L/ ?  H; l0 A, P% x2 u. z  z    //i=0;
9 h$ z+ E  ~% s( [7 N/ {4 E    //j=0;
& @9 l4 z: o- R$ B    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 o- s3 |" I  {
    {1 E$ k8 U. [( ~' \! D2 d/ y
        /*  测试UPP传输的同时操作普通DDR数据- Y1 m0 t* D4 N8 L6 \
        temp=i;
4 h/ V" [3 ]% C  z/ Y        i++;# D% w" q: p% G0 n% |; Z
        if(i==1024)4 {2 e+ F% C0 L9 t+ j) ^. _
        {
! J$ j7 G/ [( c+ m4 u$ L. O            i=0;/ W* g( }8 `4 E! M# `4 Q6 e
            j++;
) k1 q" R; k! P/ g- x/ }        }. `: l7 L1 N% C- ~1 V9 w
        */
, I- u/ n8 B7 S1 E! a) i# h1 ]% Y( g  E2 A" l2 m( C
       asm(" nop");- Y/ \- M, a1 o3 X1 H9 w6 d3 R
! m; Q# P4 _1 S( S/ b2 a
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! |+ `  h* `9 c. d! \
    }- o; a: l+ E( b, W8 C

' s" h5 S# x2 k    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 n% w8 {, }" `; G3 u5 f2 ^    //UARTprintf( "i=%d\n",i);
: E1 {- i1 \( O+ ~6 B- y( S5 p0 _    //UARTprintf( "j=%d\n",j);
; u* {" K2 c* S4 J2 I5 e    UARTPuts("Data mismatch in buffers.\n",-2);
2 U! B% z) L; m1 i# K# [    if (upp_interrupt_count == 2 && upp_error_count == 0)
% L, a+ p: L: b1 T    {
% j0 d7 O" g5 c! F, Q1 _; V5 j        for (i = 0; i<upp_frame_size; i++)
3 O/ {( R7 _" M; E( g6 }        {
, h7 W7 T8 Z! {) U, A4 ]            if (upp_buffer_a != upp_buffer_b)7 K. q- P. w7 t/ \, _
            {
8 q! I2 Q8 f3 h! D+ i                upp_error_count++;% f& i- d2 H( C6 a9 j1 x) L7 V
            }$ R% f8 F7 u& Z. t0 d1 m/ p6 D
        }. c/ k: w& m% }+ x) L" N9 J& q
    }9 \( s4 t7 ]- D2 l* d

2 w4 D) \5 k2 f! M  v5 j    /* 报告通信结果*/
0 u8 h$ H1 `8 q# r9 {    if(upp_error_count != 0): x- Q9 |0 X1 \" G/ r
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: ?! t. S8 X) N3 n# Q& h: h    else: a6 E$ e6 }/ D) X
        UARTPuts("uPP transfers complete!\n",-2);
" A8 c2 ]- \7 c# b5 ?# S9 j6 s: l: z$ T4 p7 W# @: Y0 i
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 w1 N% b0 e5 k
    UARTGets(ch,2);' |# j- R/ Y* W7 m- w6 g
    UARTPuts("\n", -2);
8 [/ m, I+ h2 ~' v# n& u8 B% h2 |; G, C/ y" U
    if(ch[0] == 'y')8 n( m! d1 z% m1 i  C
    {
6 ?. ~1 y9 l9 v& y. a/ M0 a        /*打印全部读到的数据*/  s6 l% t3 C6 m  h( q
        for(i=0; i<upp_frame_size; )7 }8 d( S/ N( a0 q
        {
, A6 `7 r2 H3 F, n            for(j=0; j<5; j++)
& N7 A6 L0 G5 S) g0 D) O            {! q4 O' i( `" o8 F% s
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ W: }5 e9 a' ^( U                i++;+ c9 F2 O9 b& y! ^# @' c
                //if(i >= 4096)( D: o" Y- \7 J& c% |9 y* }
                //    break;
- F  k( P! q, L2 X* n
9 x! a# Y( H& @: [& K$ l! R            }3 a) r$ ]6 }3 s3 P
            UARTPuts("\n",-2);
1 R. ]' T+ Q4 }) z        }% M5 m* I1 g: Q- t. E5 ?1 h
    }
" M- H0 p9 Q) r; s- m# I  J- }' v9 L/ i$ N  z1 s9 n0 d
}
: ]4 `/ P3 r. {9 t! N& w* I

* \# r+ ]2 C% X* b' |
" a; Z; q! s7 ~- X
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% i2 U3 @) D2 @2 O
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ d6 T+ C; T7 V) k% L+ L4 e





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