嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' `. y& @6 `# [) H+ K W$ G( X8 q2 y
Void UPP_TASK(Void)
/ n# H0 G3 e4 s+ d) T$ d$ G+ r
{
+ ~6 e9 X$ T0 J& Y- N2 K' c
$ S4 n( P i2 d9 J! ~
int i,j,k,target_int_count=2;
, y r9 Q& K" h4 O0 c$ h
char ch[2];
- b' L# w! C* S2 ?7 A' K
( w" |. _$ o. @3 |! D
2 } i' Z+ K1 H
& U: D' U- h0 \1 J, U$ p$ o( x, R: b( K" L
upp_interrupt_count = 0;
8 A& X) V" u! D$ g1 j9 E1 t6 N1 u! _
upp_error_count = 0;
7 X! ?! o' T; W' Z- ~
7 [6 E/ i1 l1 B1 {$ v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 y) E7 u5 @$ \2 v
// Initialize data buffers
: \( ^. h+ y5 u: i
for (i = 0; i < upp_frame_size; i++)
+ _$ p2 ]5 i# Y1 g
{
+ K* f3 p# V" z5 h
upp_buffer_b
=i;
* o' I7 G1 g& W, u9 F" }2 x
upp_buffer_a
= 0xDEAD;
( z* q5 U* C( D+ c% }& P
}
7 Q9 r# M$ N1 B* V6 j5 P* N
* O" D9 P8 T( [+ I4 q! J/ _ e) C
//for(i=0;i<1024;i++)
( ?/ O/ J# r+ H
// temp
=0;
C+ Y0 R {. ]1 l! V, z% _
4 U, Y* x; I! Q! `) Y
//UPPReset();
3 w; O' H9 b1 m" o
/*启动UPP DMA传输*/
. _0 [$ d- p+ V8 _
UARTPuts("upp_prog_dma_i\n",-2);
! u& K; m4 a; s7 m) w0 O9 l; g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& r- q) [! E( h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 D: y6 ^3 ~, x; k ?9 q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# A0 k1 p- n) f3 x3 q% h; M+ u' K9 O
# i6 [2 c& g1 ]1 A& A" a2 R
UARTPuts("upp_prog_dma_i\n",-2);
1 M) F, a4 i# f2 \$ m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 G6 x+ ^1 U H; s) y$ @9 {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) u3 l9 u8 @% [$ ]# t% m: ]) ~& @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, Q/ z8 T; z \2 q4 e E
: [5 p2 k5 a$ a. }2 _+ t" a" @
/*等待UPP传输完毕*/
! [% |# I' S. S) y5 B0 {
//i=0;
) h G0 _9 A* K+ @& u
//j=0;
9 k8 A, d5 g: R7 @3 `! C/ _" d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 m8 H- b3 X* C( x! z) A: a5 L7 q
{
4 [7 h% |! p `' ]7 T/ P9 z
/* 测试UPP传输的同时操作普通DDR数据
) f2 v5 l4 Q+ c# `7 p- }
temp
=i;
' U# E: R8 o% [" X
i++;
4 V6 R" U9 f. b6 w. d p
if(i==1024)
4 U# {( N/ X! A0 [! R& j
{
9 k7 e- ~9 `8 U+ T( W9 D
i=0;
, N3 Z3 O q U( W0 Q9 t. H
j++;
, h; @/ ~5 I) v, \& {, T
}
$ T+ o# h( I" w& [
*/
9 D6 S6 D/ {2 X* {# D2 z) K4 a
3 j T) s2 g% d! i
asm(" nop");
" a# Z( W! m' ~
# A* B6 |: z I, J3 E& d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: q# {5 O$ |; ^3 F6 [1 G
}
. s5 l9 P! u0 ]6 i4 `( P" q* z
# f& _5 ]- l7 M: H, b. U9 h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 |8 M4 ~/ e6 V
//UARTprintf( "i=%d\n",i);
9 k% a4 F. K3 f
//UARTprintf( "j=%d\n",j);
* L; M! J4 X$ I' `" x
UARTPuts("Data mismatch in buffers.\n",-2);
* q* f, k- l [, [
if (upp_interrupt_count == 2 && upp_error_count == 0)
% ~( d1 w! ^- ]
{
; C8 U& w1 ~0 H3 {
for (i = 0; i<upp_frame_size; i++)
9 m! T% J8 n( C& M# q( g
{
3 c( p2 N6 C6 `/ r- [' K/ k, J
if (upp_buffer_a
!= upp_buffer_b
)
* H9 f: {/ ~1 H. w
{
8 s3 Q* ?3 \; J9 I0 D2 m
upp_error_count++;
" G, ~ B7 x. O
}
+ W0 {$ u# E$ g. s% L
}
1 ? x5 L: x4 h2 e7 j
}
2 f& B- W9 A7 G
! m& f! S+ _& w
/* 报告通信结果*/
* m( _$ A1 v" ]
if(upp_error_count != 0)
, A$ R: [8 ?8 T0 ~8 _
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ A2 U* m& Z0 }7 {8 H5 D
else
( h& x" e# p3 ^/ R5 U0 x$ o, y
UARTPuts("uPP transfers complete!\n",-2);
3 ~2 v( {) r- Q( Q1 ?4 D. q7 {" |
3 J$ z$ y$ ]$ F1 @" `2 e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 z# g( C) V( f9 D
UARTGets(ch,2);
/ X' N3 ~0 @* v: q* v9 z
UARTPuts("\n", -2);
2 I" e6 n9 @* D7 o; b# s' L
) ?+ F1 w: e3 q
if(ch[0] == 'y')
3 S+ n; L9 Y0 e; x/ h* m
{
$ Z& s- ?: G. X7 o/ e* r
/*打印全部读到的数据*/
; l& ^4 l8 {9 N3 m
for(i=0; i<upp_frame_size; )
6 q) p( u' i K2 v0 F; E a) x. X, `
{
" O% ?9 B9 o5 \0 Q p% A
for(j=0; j<5; j++)
/ j+ a+ }% k/ X5 H
{
' v0 J, Y# y' V+ A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! P$ |7 p5 J+ l5 w+ g6 U( I
i++;
" r2 e/ o% U/ c, H1 j1 `
//if(i >= 4096)
0 H" u5 V& U% y- d! t3 f
// break;
# x1 k% ?9 i! [) [' G) D
$ V! T& ]8 A s% @
}
# l& r. }; p5 Y6 P; k
UARTPuts("\n",-2);
# }. \0 [ i3 L
}
3 l' T; T4 X3 u2 |0 f
}
1 R; n2 Q% M2 x, ^) g& g
+ E7 W! D) n" E2 ~6 P
}
; u: G. ?) ~8 _( N( L: Z% I' O
$ I' z7 H" z0 z# a! } g6 Q$ _
* i0 ?1 C9 M) Y7 L7 t: J; S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ d' q$ z3 w3 A2 D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 p7 l4 t7 y+ V1 \3 T1 `* Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4