嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( m- H" G6 {( I. W U* N" F. P) ]
Void UPP_TASK(Void)
$ Q4 a# t' p/ m" C7 O
{
# W( _! r# I, J# j+ n5 H0 x
- P9 w. F7 p/ z x0 H) l1 ~1 E
int i,j,k,target_int_count=2;
5 y L" k; ~; k
char ch[2];
# c8 A% C* u6 B+ ?. e8 ~4 y' ?
" A# `% i2 R) O# g
2 Y5 P% M7 h; ?4 S: @4 f5 ^' E. l/ Z
$ @( M: i% f! C- a% j' W, P3 {4 M- F
upp_interrupt_count = 0;
7 ]+ t; _0 r# Q, X
upp_error_count = 0;
2 V c' P" Y" d' |
( |% x7 u0 |9 }0 f- L& e8 D
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. v4 a( H4 R% N6 w2 G/ x) P9 _0 U
// Initialize data buffers
; L3 h8 M, q+ O7 B' R- D5 ?$ H
for (i = 0; i < upp_frame_size; i++)
~' D& }! d, W8 A
{
: A3 K7 P' Y5 Z. f. r. j- @
upp_buffer_b
=i;
* L, S- I1 p5 U8 V1 n; D% B: J4 S# ^* l
upp_buffer_a
= 0xDEAD;
) O% s# U! @& n9 K" W* }
}
* N7 c4 w5 B" a/ c. D
7 o0 X. j' f, r/ }& O9 y" {7 j- }7 h
//for(i=0;i<1024;i++)
$ \/ }6 k, C4 k) u9 O
// temp
=0;
# X/ s* U T+ k7 {/ O+ k
- X, }2 H5 s, X" g) s/ B
//UPPReset();
. `' E, o3 R% v5 I- Z
/*启动UPP DMA传输*/
( K! F( [& O/ b b
UARTPuts("upp_prog_dma_i\n",-2);
" T+ F% y+ c K: o1 }; m1 ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, d G+ |/ h* A( f1 \4 i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 O$ V" M$ J: l& z8 T. f' w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ ^8 U3 J6 c1 E5 A* P' t
) w: O) g7 q( I- ]; H3 E
UARTPuts("upp_prog_dma_i\n",-2);
* M7 Y+ M3 ~$ T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 t, X6 F9 \8 T( E. ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& C* Y5 t% O7 n% Y6 s' z& L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 {& A% J# S' D8 T! }$ O/ R
/ W. ]5 e2 {$ w' G, n, U9 x
/*等待UPP传输完毕*/
S7 |7 u s' @9 D* A7 {
//i=0;
# M- I7 z- P+ d$ r, Q. K
//j=0;
* Y) b1 J5 O+ \# Q# G. c6 Y/ R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 j F3 S Y/ k/ ?
{
6 B* y! n! E7 V0 }
/* 测试UPP传输的同时操作普通DDR数据
& k) b; s' G9 s. f# y1 z+ w
temp
=i;
2 o: G4 a7 _0 {5 J7 Y; [, c
i++;
0 u: u( A u$ t4 n/ a8 r V
if(i==1024)
5 h4 ^! t+ W1 l
{
3 P4 C, E: t6 s
i=0;
+ V( Q% G3 C% H& c4 Z! N
j++;
+ x9 t. }8 q# H" P: x
}
5 p, O7 R3 f, A
*/
h8 Z; q G6 ^9 K/ ~5 B- z
$ r. H/ P( N0 @8 v4 i
asm(" nop");
% g' D+ i) _$ A5 h6 H: S
: k/ C6 Q0 `' n3 V; j% E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 P2 {! d9 G6 m- ~" E# L: ?# ~/ t; P
}
8 R" _0 p3 E- d
6 Y6 m8 L( X( C: }2 C0 G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
H R/ s' B( j' e& A- Z
//UARTprintf( "i=%d\n",i);
6 w9 [& U! z/ H- S/ l
//UARTprintf( "j=%d\n",j);
3 x) ]9 P3 z- E0 a( J) A
UARTPuts("Data mismatch in buffers.\n",-2);
. i: Q0 M/ J# T' P1 y$ p
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m5 D2 q1 E) i/ E- p
{
. V9 ^8 v: @: O7 G
for (i = 0; i<upp_frame_size; i++)
$ F6 a4 U9 Y0 ?% `- n1 X8 e
{
/ p" T& r; y3 S: s7 K
if (upp_buffer_a
!= upp_buffer_b
)
3 {/ ?* x' i/ o/ L" |7 ^% y
{
4 Z0 G4 B3 ^' ~5 N9 \1 ^; S+ i7 A
upp_error_count++;
, m7 {1 f1 }2 ?* J& E$ [/ m
}
2 o8 Q, M! U$ k' c
}
* Q: e9 P- U4 @
}
4 n2 |6 P2 t# e' |" Z
$ E. q6 R* f: W, g2 E
/* 报告通信结果*/
9 p) _; r. q; `, v
if(upp_error_count != 0)
s2 I/ A5 o6 m3 b+ `$ j
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ T1 k) r ?' r* }
else
' S3 T- y: h' y) i$ g
UARTPuts("uPP transfers complete!\n",-2);
J- @5 @, B" V& X1 s( v4 e% x
& @( x7 @: t2 e4 P( I4 g. I. R; e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 g. a# M0 e4 X: w9 j7 [
UARTGets(ch,2);
+ t" }; a) k, ~5 E7 r: |
UARTPuts("\n", -2);
& ~' Z8 Z4 |. K7 `
3 Q. w! e+ Y( K6 k& ?; @
if(ch[0] == 'y')
/ m3 d9 m: n( N/ ~% w0 Z/ V9 K
{
/ X8 O4 o/ X T. M. |4 L
/*打印全部读到的数据*/
9 ^. M! S9 T, i8 c& W" l5 ?
for(i=0; i<upp_frame_size; )
! f0 D: P, z' H" h- |' k+ V+ r
{
, L8 C! R% z4 h- J
for(j=0; j<5; j++)
# |5 M; ]/ u% s& a0 q
{
% ~0 O& P. `2 \: T P$ z3 C& P* ]2 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' U' }5 c0 @) Q* O
i++;
) Z6 V1 M: J" d0 S" i. w" e
//if(i >= 4096)
$ P: z3 B; h% Q9 k; |; f _ J
// break;
4 t4 u1 V& w( ^/ F6 m; L% Q
4 ~5 s' C: b! i% r5 O2 K4 B3 B/ g
}
f* m/ z0 }7 v" x* Q0 k
UARTPuts("\n",-2);
# u" g2 x( g; p" p' ]
}
4 u' v% K$ m6 a9 }/ D
}
" r9 Z6 I9 u( p3 B5 y" h
5 L. s# l- {. \) P; Z; ?
}
h e# |# H& M, s" i
/ w% e. ?# K6 _ n
o$ |# }! h) I/ R7 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 M, v" L- n' v u# n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ G8 y. v$ ?& Q# X
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4