嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& f: ^$ @+ ~7 \) X+ J( s m
Void UPP_TASK(Void)
( f M5 b2 S* q2 ^% O
{
0 u$ L4 E/ C: w& l) \3 O( _( z7 z
3 v# Q" H6 F5 @ R# ?+ Z; [1 P( N& c
int i,j,k,target_int_count=2;
, i# R0 D( k; l7 E5 d
char ch[2];
: H* ~: g! r# \, u) {4 }4 R. I/ l
; Z* j7 M$ d# N
3 C' b* h5 U* }4 ?' ?' p& G
6 I# U! Z! l" W
upp_interrupt_count = 0;
$ \# F9 y, O) q9 J1 M
upp_error_count = 0;
8 b! q+ x4 D* e6 H0 h
3 Q) e7 V* B8 p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 a( Q' q6 ]) [" I& y
// Initialize data buffers
1 b: t3 {+ t4 X2 ~& x$ I8 @. B
for (i = 0; i < upp_frame_size; i++)
4 z+ S5 {: `4 m. ^
{
" ]# M7 l# D( B% K& ]9 J _6 Q! N
upp_buffer_b
=i;
1 q7 P% M8 q( W# d2 [
upp_buffer_a
= 0xDEAD;
1 h5 a' L- ^+ p/ N/ X2 Z, t) K; T! m/ Z
}
( }" Z' U8 B9 n
& W$ u% Q% x# d3 l! e
//for(i=0;i<1024;i++)
7 b: @7 b% t; h( c2 q
// temp
=0;
7 D/ X4 J- w9 I& Z8 T( x; P4 u) m
- g- q# _* ?. F# J
//UPPReset();
5 q, X: b0 S" F$ Z3 L$ @
/*启动UPP DMA传输*/
$ K8 r- W6 a# c2 u
UARTPuts("upp_prog_dma_i\n",-2);
' v' v4 P: E' L+ a. Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 x4 t: F5 G3 _5 }/ c& ]/ D u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 C& p9 n7 A+ {' E# ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, p7 l# z2 U5 K# S9 i6 K; S s
. J. h8 a% P+ G+ n/ x) Y
UARTPuts("upp_prog_dma_i\n",-2);
, h0 k* r Y. i8 E) ^0 `6 V
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( b5 P3 e- E4 j! a/ Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 Q1 ~. w4 [& Z, r+ ]1 r$ v4 W' v+ z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ Y6 `0 Z4 J. I8 |6 E, B& ], Y
. J' U+ ~7 b3 L) `7 l
/*等待UPP传输完毕*/
/ {1 E6 p7 D# Y
//i=0;
. n; j. _% D$ x/ o; ~1 P
//j=0;
) j0 b3 O5 }; P/ r2 _) S. D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! ~: ?: _4 d5 I' R3 ]
{
% r# o- K6 \: K _
/* 测试UPP传输的同时操作普通DDR数据
8 I/ {, ?" X* y. U
temp
=i;
1 S3 ^# Y& U/ N+ W* ]& @' n. b
i++;
. H0 [; A$ k/ k& q$ P
if(i==1024)
9 a3 k9 F( u; G0 p; e' g2 n
{
, ]' F0 [# a- q& ~3 I8 f" a% x
i=0;
: Z! F( z/ Z, E6 q: y
j++;
5 ^ g; o) t: i' N0 [, {/ }& g
}
5 C4 g$ ]2 O+ Q$ v
*/
" r7 Y/ y6 H5 L( j6 l" T5 s
9 S8 n+ d# v! t
asm(" nop");
6 ~' \' h/ m/ U( ^! ?8 h
! G- X8 `/ ?$ Z3 h( W
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 R0 M. T/ v) R) S( M
}
+ z( ]( Y1 H) f8 J0 ^2 r7 r
8 U; R, r( z, j: m* Z2 K( r' H* D$ L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ Z' U |7 d8 y$ u
//UARTprintf( "i=%d\n",i);
7 v! G5 u v3 l/ Q8 ] P6 c
//UARTprintf( "j=%d\n",j);
( i( Z6 i( n% ?# U) E' o4 d
UARTPuts("Data mismatch in buffers.\n",-2);
, L+ u5 i3 ?& `/ q) F
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 G Q( N( t- S* Y
{
' i- K+ r+ Y1 P8 F
for (i = 0; i<upp_frame_size; i++)
1 c2 H: X+ }/ L
{
$ \$ C* p" b: `: N: m
if (upp_buffer_a
!= upp_buffer_b
)
4 {- a& u# Z% A0 V( w$ M0 W
{
5 _( x& K. j, K" `
upp_error_count++;
' [0 j* l" g3 ~& @4 B7 i6 V* l
}
+ p9 \/ w" K% z8 l0 f2 I: [# ^# D u
}
8 k3 ?/ V; P0 W3 V! U
}
% {; f0 p! m/ Z2 m( q+ q, H' q) M
% {- r, T4 ~% g
/* 报告通信结果*/
" a- d: U$ D7 F9 J4 a8 L
if(upp_error_count != 0)
/ @( B% O- P; O- T
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( T$ E0 r3 Y$ d% O" V& E) H
else
" X) ^% q5 O2 c( c: i& @4 @
UARTPuts("uPP transfers complete!\n",-2);
# u& z* S/ v0 Z8 ?; Z
9 m) w8 {' e$ e2 l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* g" v4 E+ U) `( U/ P
UARTGets(ch,2);
; ?" b/ c1 p& h6 T- p% q$ d6 s+ {
UARTPuts("\n", -2);
: \- v' ^+ d U- W
; E$ O" x5 p4 W/ h# ^3 m* l
if(ch[0] == 'y')
- V6 s4 H4 r! c( e Z! x
{
/ Q- j; N& O% R3 E9 J# f
/*打印全部读到的数据*/
$ J' i+ G2 a7 s: L! r: W4 X" ^
for(i=0; i<upp_frame_size; )
$ H" X& U) y$ o, ?# B
{
$ Y( j3 O* h2 N1 r' k# J
for(j=0; j<5; j++)
5 v7 l/ h/ R, T7 Y8 d
{
7 v* [, \; R3 Q; v0 x/ K
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ W% D$ Q) C5 S
i++;
% A+ K' W7 `2 X4 ~
//if(i >= 4096)
/ D0 ?- P& l3 ], e0 A6 B
// break;
$ L: C+ ]7 O l
! }7 W7 a* t8 A( z, X$ I6 W
}
* C, G% P$ G* x; [7 v0 |
UARTPuts("\n",-2);
& m1 G- Q2 }0 m1 B9 H! R
}
2 \' r7 H$ k- V( Z& }
}
& |& L4 }; a' W2 {
7 ~* U& H7 `# A8 z
}
1 ~& U5 N! k* t% v/ G
! X5 y2 {4 ]6 ^2 `1 K
1 {5 F! j5 ~: V* `4 C
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% \* r- ^9 X& W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, C5 }' z$ ]+ Y' E! x" `) v1 V
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4