嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ N( i5 B' k7 Z7 ^# h d" Z! F; ~
Void UPP_TASK(Void)
) ]% F4 S/ P. n0 d/ \4 N
{
) p4 e# b1 Y/ x6 G' j# T+ P" ]
6 O) P; t! k6 j' t9 `3 x$ g
int i,j,k,target_int_count=2;
8 E) F' d. g4 O/ M* I" {5 K
char ch[2];
8 d+ C9 J# j9 D, i: ?" z
, A0 Y7 x- Y4 e* |, q2 T/ L1 b
+ g! j M" w; P' M" i( E4 W1 O4 C
4 Q! b% D6 R( h/ e8 h
upp_interrupt_count = 0;
9 a, U0 M5 l/ k O
upp_error_count = 0;
9 K X5 j c) t7 q2 g, o
2 ^6 j( r% y ?/ l6 D$ E+ U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( P, }6 @0 O+ B# `
// Initialize data buffers
; V! F9 F2 m* Y( \9 X' e
for (i = 0; i < upp_frame_size; i++)
8 |: ~, k$ m7 @3 t3 O
{
0 X$ e0 ^- }- G, o
upp_buffer_b
=i;
5 v2 ~/ A9 C7 x
upp_buffer_a
= 0xDEAD;
& L/ @4 \0 e1 E2 X8 s) n5 \6 L* d$ `1 v
}
! }" Z* u, t. K+ F' _6 H
H. l0 Z3 s5 n, ?0 u Z( u
//for(i=0;i<1024;i++)
, Y: H* O0 Y/ S4 Y9 v K0 O& E
// temp
=0;
4 M8 U' L) e* V# S/ i S" |
% A: q) t) v" ~2 ?
//UPPReset();
) v* A5 f( w' V; @
/*启动UPP DMA传输*/
% o: s0 _9 d2 T% W0 w
UARTPuts("upp_prog_dma_i\n",-2);
5 T9 A8 R/ B3 c; T4 T$ u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' E" K+ T5 R0 J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* n6 f# ?+ I- Z& W
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' O. a3 e/ d( u- ^. a
. ~/ f) I7 }& M: T4 i9 ?
UARTPuts("upp_prog_dma_i\n",-2);
. K" f' \" |5 }- _, w1 p8 _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 F& f3 E0 O% a* m9 ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# h2 R' F+ L+ `6 e+ N5 D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# W/ k: [* j7 j! ]6 B
, [ b* F0 w& x2 ` g- L- E
/*等待UPP传输完毕*/
! f6 @/ a$ C$ }9 B2 N, i2 }
//i=0;
( v S7 P8 U- i, }; r; V& ?
//j=0;
- M, L( @& s+ c0 d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- Q% k0 H1 Y: {. ]" w
{
) j3 j6 z% D8 s
/* 测试UPP传输的同时操作普通DDR数据
, M- o& p$ r% S* u! q" s$ s" j- L3 O8 j
temp
=i;
$ D' z9 R! Y+ _
i++;
2 ~/ |" f$ v" i+ M1 W1 }( B. c( x- m4 m
if(i==1024)
( O% J: ]$ D: M9 y; ~
{
( q8 U8 o+ E9 b
i=0;
. u4 w8 K' F. C8 s" L2 l
j++;
! ~ J6 m. F# ?7 ?
}
8 u" u6 A4 c" r1 ?
*/
1 q- |, \& Z2 ?8 m, p
& H% q& A5 Q4 Y! R1 m3 \& J
asm(" nop");
! M7 _- N0 O3 ?0 ^- W8 V
! a) z6 c; {/ Z# l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 C3 f" ]- I8 z2 _. ^% T! _' S
}
: @7 R& K: q: ~' ?' c% v; j, ?0 H' X5 ]
N, V+ E; G& l: X' ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( z- D+ s. l# N" z/ P
//UARTprintf( "i=%d\n",i);
, j9 l* ^1 v$ N
//UARTprintf( "j=%d\n",j);
$ c% n9 p5 }) C
UARTPuts("Data mismatch in buffers.\n",-2);
! [3 [3 L3 |5 _( P8 f2 r
if (upp_interrupt_count == 2 && upp_error_count == 0)
{. O$ L7 F8 C0 D( R
{
5 w# O2 E( u' S% C4 @3 J* f- g9 v6 u
for (i = 0; i<upp_frame_size; i++)
/ x( C- `7 `( _: |
{
! W K: j/ c; E/ e) f! H- W7 G T3 J
if (upp_buffer_a
!= upp_buffer_b
)
E. [ _# X7 G( a6 @
{
( }0 T& K9 I. m
upp_error_count++;
0 T, M+ |7 F: j
}
4 F# h" M3 }; M( v. |- N5 f
}
& G3 o3 F( f- w/ z& `* L
}
k. g6 e/ x7 U: z& F
6 }/ G' C+ }! j L V- h! P' ~
/* 报告通信结果*/
1 L+ B+ U4 [, q: L
if(upp_error_count != 0)
& @1 p) S) f9 p+ h) |" K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( D1 b+ ? b& [$ J* H8 Q
else
) b! w- y; O" u& a
UARTPuts("uPP transfers complete!\n",-2);
9 z- y3 B) R ]5 \9 w* i: ?' ?
' a5 |2 M7 Z/ }4 Y+ I. X
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' j/ |% u% p" V3 m4 S1 {$ S/ y
UARTGets(ch,2);
6 v5 s, e3 T8 D" y' Y8 R+ H
UARTPuts("\n", -2);
- B, z0 S( i H" R6 q
! {8 p2 l% J5 n Y4 ^
if(ch[0] == 'y')
0 J* w3 c3 J. }7 |
{
1 T# ?7 I4 N3 p
/*打印全部读到的数据*/
9 ] ~4 f3 V' C5 Y( D
for(i=0; i<upp_frame_size; )
! K7 r2 H% {+ Y3 I, `
{
( _" g R! V( h0 J: y
for(j=0; j<5; j++)
7 M+ P/ K2 i+ y1 X
{
0 D* U& V* t5 c3 d2 w a1 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! B8 p3 h& _' ] U' r4 m- o: t
i++;
' M0 o5 q R- r. v. e4 Q; z4 z% a! M
//if(i >= 4096)
$ a0 e2 K }2 j2 w
// break;
0 |* A* v$ L4 s9 t2 M% r' X
4 i8 I9 ^* |! Y2 _
}
0 V, d3 ?2 d L4 z2 j! ~% N
UARTPuts("\n",-2);
+ ]3 A2 L$ s: |6 V: m; c. R
}
* s0 q$ }+ n' N. s: Q
}
. e/ {0 v9 l5 ?. f
% Q: _ H2 a; I" j( |
}
2 K: ~( B0 Y3 Z& Z& e6 m
) `1 w' p' |; A3 I6 Q" m- ~
) y) t" d! I) W2 e) ?
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" p& I' G( q6 |: a& W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& z) Y# d: {$ F: i6 Z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4