嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* l+ b. W1 r6 E; c; u( x
Void UPP_TASK(Void)
5 ?" t6 ?8 N1 W+ w1 F
{
- a$ O7 [& ^7 A9 w8 Q
) [+ e" `2 b- \! F
int i,j,k,target_int_count=2;
* f: S! X6 k8 ~: U' x7 _7 Q& C
char ch[2];
# b, t4 U, n' B2 `) a% }9 N/ X
" c$ h& s9 n& o7 k q: P% h
- @% N8 s, p+ L3 u
/ J1 K0 v; l: q8 ~/ w. O' c
upp_interrupt_count = 0;
, o% w' |% T; [0 E
upp_error_count = 0;
* Y, I. ~. Z6 ]4 _+ m! R
% j1 [, b5 a' Z( C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ A2 k; W* u1 Z7 Y, X. N8 B& T
// Initialize data buffers
3 u1 q/ p/ K( p: \
for (i = 0; i < upp_frame_size; i++)
{8 W5 B- S) F, F+ ~8 \
{
$ h$ Z. B4 C. ?) H" P) D
upp_buffer_b
=i;
3 H( E2 }4 u$ f3 W
upp_buffer_a
= 0xDEAD;
' q2 _) ]0 |9 x
}
2 k [& \5 X! T7 t$ p
! N3 _, z3 i V q* h9 O
//for(i=0;i<1024;i++)
; L i% M) b# V2 `& A2 n! j! K. I6 {
// temp
=0;
- H/ T" `# K( W. ^% d! K: q
2 n2 C" A( [3 Y7 Y( H) e' W9 w
//UPPReset();
& n5 `# A: R5 u0 C
/*启动UPP DMA传输*/
4 ^3 m/ N' A1 b, }; A! v
UARTPuts("upp_prog_dma_i\n",-2);
& E' k! y2 b/ D# N( e3 s3 m( A
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 `, b1 a: S9 m0 x3 l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 e; e. x" P$ f9 H. n! U9 ` k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ |, H. @8 r% V2 [
8 u( K4 m% G1 `4 }) m$ p
UARTPuts("upp_prog_dma_i\n",-2);
+ v8 t& }* N1 K% ?1 L6 }" Z( d. F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. B# m- @2 S7 G+ f3 e3 A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 k9 h; V; w/ ^* }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" E# t- h; ?7 r6 \! D/ Y* F( ]+ W
: F9 {/ Q3 {9 r! c
/*等待UPP传输完毕*/
) |) V0 T5 y) m5 C8 C( L6 e7 [
//i=0;
) H) [" k# R; i' A0 O
//j=0;
& H h/ W. d" P3 C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* B* m6 Q0 K$ G. A# K
{
$ _- B8 a% N' P1 Y. G5 G
/* 测试UPP传输的同时操作普通DDR数据
9 S ]3 V: F/ J$ e/ p7 b" s
temp
=i;
* ] u) d, ?# G8 J( L
i++;
4 [, J( J9 D# k y3 k
if(i==1024)
+ V. z$ R! s- s" ~
{
) s! h3 M3 x4 n$ c0 n8 f
i=0;
# x8 @4 z& N- ?2 n
j++;
, V1 t7 m/ ^: d6 X/ k
}
; G% r2 w* a$ ~
*/
9 _- l. ^1 U# Y4 d! e) d
2 L9 Z% S/ ^3 o Z; P. Q
asm(" nop");
* l' f7 z! R' h
I: G; y; a( q! M/ s% f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: O7 J1 x( p, Q' J
}
" i( M- L# m q4 y& k6 R# u
; J+ }% t9 f5 n0 f: L# U. U
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) n" e% h" Q1 F: r8 l0 r
//UARTprintf( "i=%d\n",i);
! i6 O' E) u, x+ \' G
//UARTprintf( "j=%d\n",j);
1 S% [, \6 F/ q" o5 k
UARTPuts("Data mismatch in buffers.\n",-2);
! L2 w! N: E+ J
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 r( G6 n3 j( h' ^2 I9 _
{
' _5 |- o* k$ d* e2 n
for (i = 0; i<upp_frame_size; i++)
6 F5 X s3 z. ?0 o7 y
{
) k: z; _2 v7 ^3 X! G9 z, M; L
if (upp_buffer_a
!= upp_buffer_b
)
9 e9 `* r; i3 Z3 [1 E" ]/ i
{
0 r' `% t) M& a" O$ M2 b/ ?
upp_error_count++;
4 y$ r/ ], ~/ t! |
}
9 {. V5 D8 S7 d/ u0 U. C9 V
}
+ H/ a, i! A/ H. d0 @+ j" p& U
}
; w* v8 g1 J, c9 w4 v7 L
$ {, t; Y, M F5 h
/* 报告通信结果*/
/ h$ }7 x0 P8 t; q
if(upp_error_count != 0)
, K7 T+ g5 M/ Q5 Q- {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' F, r' z" f' e" {' o" _# h1 f
else
# Q$ D5 _6 Q. u5 a
UARTPuts("uPP transfers complete!\n",-2);
9 H. i4 V& t; N
2 `3 U" g) \ d- H! A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
_; G! \9 W$ a3 }; Q! \0 y
UARTGets(ch,2);
0 B! }3 T+ }& J% R* F
UARTPuts("\n", -2);
) L( C x5 P b4 q
9 Q+ P' o: O: F5 U6 `! g J# ?4 @. w
if(ch[0] == 'y')
3 t) c8 |1 c/ N7 r' \* y' B8 J( O
{
j3 I9 Z/ `: p, [( _
/*打印全部读到的数据*/
2 B2 Q7 \4 G% ]
for(i=0; i<upp_frame_size; )
. V" U9 W/ S% E: m& W0 U1 t9 P. ]
{
8 j# H" ?7 j' D( k4 W5 [6 J$ F
for(j=0; j<5; j++)
: k* X0 e5 x) D0 o
{
: G3 O4 R* H7 K7 o4 R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 A/ o3 E% {, l) k8 j5 Z7 j/ m% r4 q* N
i++;
5 \7 X- T0 A' P2 u4 B' S. t( k+ s Z9 U
//if(i >= 4096)
# d, h: D+ @$ C2 I8 c2 j" Z+ _( w
// break;
y+ Z9 M) t* A/ c6 \+ v
; i! c g6 `) |" X- x& [& I
}
G8 C( _; o% b9 J* e
UARTPuts("\n",-2);
& ^7 R4 s+ k, I3 P5 C- I% t
}
1 _" \: s. \% n6 k6 f
}
4 b! s* S# \$ {
* t2 O: x ~0 D1 T
}
) K! z) x6 l, d* o' ]/ ]
: M% G4 o3 r7 a* b6 ], t$ X
* X. T# i8 K8 g1 C
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( \6 {4 _: M A4 l( s. b& S
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% Y3 o2 }8 |" S# z5 E$ s# H+ R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4