嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?" N% `4 `! |) f% j  L/ R# Y
Void UPP_TASK(Void)% `! s. f' z: N) x5 R- I
{
$ h1 b1 `" _. J0 S
  P+ C9 {2 E/ @) K) s9 I    int i,j,k,target_int_count=2;
& \; y0 _7 A) H3 X  p2 t    char ch[2];1 p: I/ O5 D8 {* J" t# r8 ?

" W5 ^0 [$ W2 a5 r7 D5 P* D- n4 _! Y$ c
6 Z) g, b8 x: T: G4 K% c5 K- a1 p' [$ J$ \; [
    upp_interrupt_count  = 0;
6 a7 R( @5 A9 u5 V    upp_error_count = 0;/ Q! Z  S  B, y; B9 i7 d% R

% _/ f1 @4 L$ ?  v    UARTPuts("\tResetting uPP buffers...\r\n",-2);# c/ X3 d& x9 h3 X: A
    // Initialize data buffers
5 W# K7 Q. |3 R" c; Z" C* J    for (i = 0; i < upp_frame_size; i++)
+ A2 \0 C- r5 A. q* x* H" i! H9 @  m    {' f/ Q  {2 \1 u& m0 d" ?8 u" r
       upp_buffer_b =i;
3 q+ i5 z9 [2 K2 f       upp_buffer_a = 0xDEAD;* T3 o- W8 G; b0 X# `
    }
+ T, B  O! V5 T: o$ E5 A" \- e  i5 z- T/ N3 f2 W/ q! ]
    //for(i=0;i<1024;i++)! c. q# ]% g3 Z
    //    temp=0;
$ D9 ]' N( C/ u7 r' ~1 C- l" \  u8 a4 U9 W; {
    //UPPReset();
( e/ v/ X6 j7 U7 Z7 o5 K    /*启动UPP DMA传输*/
% ]+ U5 j- `4 F2 V( H2 j0 U; i    UARTPuts("upp_prog_dma_i\n",-2);% W4 ~0 v2 N! v2 M0 _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ m  Z" T$ P- q1 B* d! b8 b+ O    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# s/ U7 [" K# e3 g6 ]4 t+ c
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 C2 v$ J; J3 k2 n6 A& C- c# a5 m% P" h, |; o3 G9 V
    UARTPuts("upp_prog_dma_i\n",-2);
1 `3 a5 N% w( P, F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' f# i( u. P: U: S( [    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  M# u* ~" l( V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 }6 Q6 |5 r5 ^5 r3 p
9 n; B. E# u) S0 E0 M1 ^
    /*等待UPP传输完毕*/! Y8 Y: u0 W: V
    //i=0;0 O# ?& u- O' y4 v; o5 @  U
    //j=0;
. k; @1 [& d0 j( ]! m    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 i: O! s( O9 x3 `: L
    {
2 W* g7 `" S$ u9 Y: V! `! {        /*  测试UPP传输的同时操作普通DDR数据$ M3 R7 @" ^( K0 U. j/ z; ?
        temp=i;8 S+ E. a* b( k2 e& z, l7 f0 D! }
        i++;
) D0 {" ]0 h: c9 _0 r4 k        if(i==1024)% L( _- @4 B' z2 U( N5 h) Q: g
        {: V0 t, B- ~6 M3 |
            i=0;
2 `8 O" s" `4 G: N# A            j++;
+ D" F3 ?  a& r# ^        }
2 h, k+ I9 I& q) y, R7 X        */
0 w9 L% E1 m5 H8 _- t' Y
. S: H% W2 s0 S7 p       asm(" nop");
# E5 i$ r* w: q# c1 {! C
% Y6 M; t. ^6 w! r       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 t) p; n$ t" G, P& V* {    }
5 |8 G- p( f; V4 G; R+ P- r" k* T  O2 ~9 x1 \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, k+ Y9 S+ v8 V: Q% i: B5 t    //UARTprintf( "i=%d\n",i);/ m' O0 M/ ]5 J
    //UARTprintf( "j=%d\n",j);
" I) B  v* t1 r0 t    UARTPuts("Data mismatch in buffers.\n",-2);
; r# ~. q& ?  {* P& X4 W0 ^    if (upp_interrupt_count == 2 && upp_error_count == 0). X- m  x5 u  q% Y9 C! [
    {0 ~8 u* c( w( h9 p
        for (i = 0; i<upp_frame_size; i++)! G& F: H; @" s- G* k# U! H5 a
        {
9 z& Z5 ~9 ?0 X3 V            if (upp_buffer_a != upp_buffer_b)6 ?( g0 Z5 b* h& }
            {
' z. O% B3 i6 {; O' S3 E                upp_error_count++;, t1 ~* B( i# I5 t  g" a
            }" ^8 H& _0 f) z5 w- l" `8 C# ^
        }2 Z2 _! T9 X1 e% g6 o$ O0 g
    }
1 N' ^* q8 ?& A( S) Y8 K  ~
% ?7 J9 P3 M: I. ~# q$ g/ S1 ]    /* 报告通信结果*/6 W% m7 \6 N) `
    if(upp_error_count != 0)0 n. s8 k( S+ d
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 |. `, S% {( S+ S) H: `$ m    else
9 n" u  e' g6 M! _* C3 }. M' g( d* j        UARTPuts("uPP transfers complete!\n",-2);
: B6 o2 G) \, C3 v5 n
0 a& P) g& ]7 J6 w- ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ x5 L$ i2 L$ o  d" q    UARTGets(ch,2);! Z. `8 Y1 n% n: g6 \3 x
    UARTPuts("\n", -2);# R. S/ W2 z3 C  c+ V

' O) d7 D+ Q6 J! e: M9 v: t7 z    if(ch[0] == 'y')
5 M- u% n. `& {7 p8 ^/ ?    {' c( f/ z7 J2 G- i: H; J2 `, C( [
        /*打印全部读到的数据*/
2 Z1 b/ E1 j, `+ t        for(i=0; i<upp_frame_size; )
# M' J" u# A/ B3 S) ]        {8 N; C0 N6 i+ O$ S0 {
            for(j=0; j<5; j++)
  S1 C2 X/ U. n! L3 Q& n" O            {
$ E1 H& z( q& n$ b' A                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);7 R' `( T4 r, R4 j: V0 ]! h8 ]
                i++;
& D' N0 z- ?; ~4 i8 M: |: @: ~3 ^                //if(i >= 4096)/ L. W+ ]& S. z; G4 Y4 D! i$ u5 U
                //    break;6 v/ }( L3 G" ?/ L" y" O

! \5 C: k) f$ M! U! a! s3 u* D            }% d3 \; S% G! Q' S& e4 H( {
            UARTPuts("\n",-2);
5 ^  N/ B7 h0 W7 s; t        }. U! A8 D4 e! E8 C9 A0 J0 }# S% Q; j
    }
4 [& `* R/ x  A' `' D
+ M, M6 Y7 d: I) v) C( I}

0 P9 G, B# p' w5 e: g
! W8 e8 u9 O! ~% X1 f5 F% R. p
, Y3 e4 \8 ]& Z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。: i; Q2 G$ U, O, u5 T4 h9 n1 O

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) S: R+ C) s7 i0 {, X





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