嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# s, I1 U# ^. a0 V9 y# |" ?; j
Void UPP_TASK(Void)
Z* M% Z' Z; {( C6 X2 `
{
# P6 s% U; v# l# g5 [: G& V3 ~
8 y# }1 O' L# E3 ?
int i,j,k,target_int_count=2;
& c3 h1 j4 d, p5 t5 Z* c7 s
char ch[2];
+ n! }4 o4 J, ] N) u1 \
$ G8 p( t) m, V" }( y
8 }% l; m/ d4 q, o7 e
4 x8 N7 e, f& N/ v1 H
upp_interrupt_count = 0;
/ n. l& c6 X. Z
upp_error_count = 0;
7 C# E+ C. X# ^$ }/ m5 D
8 f A5 C; j! \* Y8 ^. g5 H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 Q& R& ]- N4 e E
// Initialize data buffers
4 ]2 O, `/ v8 E& S! P1 v3 { A& y" ^
for (i = 0; i < upp_frame_size; i++)
/ ?4 R3 V' d7 j$ s. \$ z
{
4 t- ~$ i" v/ J; ~1 e/ q
upp_buffer_b
=i;
( F) Y9 X; c7 ?( O; D
upp_buffer_a
= 0xDEAD;
8 S' f! j8 U4 \0 M" Q
}
% l5 [5 ?% R% w
]8 F6 N4 V t' H' m% S3 z* R
//for(i=0;i<1024;i++)
' z- i, r" f5 q4 W+ b1 _2 }
// temp
=0;
. b" X! b: m4 |; D, D
$ y" F4 G# X0 D
//UPPReset();
- O" U: v! U K# H; q7 v; f3 H
/*启动UPP DMA传输*/
% b1 K- H- [! q q% n
UARTPuts("upp_prog_dma_i\n",-2);
7 d/ l& m' M. U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 ]4 C/ U. |2 ]: i t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
x( ]# \4 b6 e" t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" C9 I7 b2 O* S% R O( z
t5 G% A3 F& f3 G; Q" I
UARTPuts("upp_prog_dma_i\n",-2);
5 w6 }; ]+ H% z9 |# O3 T! d1 }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
f6 Z/ E% m2 k1 d% X# j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) L) \: D+ q6 D9 n9 A6 U9 V- {/ w
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; p# S, P) [- ~9 n4 [# S0 v7 ^4 s
. f. @' a9 o6 F, j$ A. s: C
/*等待UPP传输完毕*/
6 b. x( J. w( q# w0 T& ^' D
//i=0;
: b7 H; E) E( v% |0 y! t
//j=0;
/ K% a4 u2 b! A& D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ l; i% l+ U7 }. C
{
* c! O( W% Z" [$ Q6 O+ _8 E1 r: m. A
/* 测试UPP传输的同时操作普通DDR数据
4 T+ S* K, t, {/ t6 z# [
temp
=i;
" v' T% \- @& z& I8 v" e8 U5 c, {
i++;
0 `5 o. B. u$ \& y
if(i==1024)
- [3 I8 I9 w& Z
{
4 T1 S. B5 W% Y C* y) N
i=0;
0 t( R; b& ^4 q, M
j++;
- m+ ^3 x2 W( u/ a2 f" G
}
* U6 w6 W+ M0 ^4 v( ^
*/
5 C9 n" P# O/ P6 ?1 ]7 u. C
: G! S* d2 q0 P7 H9 a
asm(" nop");
8 u( T; P# b% u
0 I9 r+ ^5 _8 D% H
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' `2 U4 O; b" k+ i0 H+ M
}
3 D+ {) l) B8 _! W
" Y. ^1 P1 A- z$ K: `, g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 M$ A6 U" O" S3 E
//UARTprintf( "i=%d\n",i);
, x$ J: S7 L8 F
//UARTprintf( "j=%d\n",j);
1 P3 F: T3 p' `- R8 m& ?! |4 o
UARTPuts("Data mismatch in buffers.\n",-2);
; r+ _" ]- ?0 R( w' n) r
if (upp_interrupt_count == 2 && upp_error_count == 0)
" g# K$ }; `8 J, \
{
R! Y: a: v( L9 b+ p |, d' l! M
for (i = 0; i<upp_frame_size; i++)
8 c( Q, P* V; O' v& ?1 `% U
{
0 K4 c/ t% p, k" \# I
if (upp_buffer_a
!= upp_buffer_b
)
- g5 ]4 n/ O' S9 K" Y& E% M& z
{
9 }- _( v% c+ y; i. I
upp_error_count++;
" T/ o5 J2 B% _( O
}
* E3 ~4 e- Q; k- g! r# K! C: {
}
4 d5 t5 X: ?$ x: }5 e* c
}
* ?/ u, A* w& r
4 N" W( z9 I5 X2 U1 Y' `, t" H
/* 报告通信结果*/
* v) v/ w; g5 N9 \
if(upp_error_count != 0)
1 P. u3 B5 z8 \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* B! v1 \, d: P$ u# L) V5 V) N; C* N
else
) \: z2 D/ c" Y' r" r
UARTPuts("uPP transfers complete!\n",-2);
8 x' U7 M$ I3 R1 p* Y& ^/ {# o
9 h* j3 D8 ]' n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: x* k, s* v% N" F
UARTGets(ch,2);
/ w, D! o2 w0 x& j; B7 y
UARTPuts("\n", -2);
& T" `8 L3 F7 n9 N4 q& b, z& X" {$ j
% v" l6 V' k' T+ C
if(ch[0] == 'y')
" f1 S' F' M& z& h
{
( u( U* f' q3 S
/*打印全部读到的数据*/
3 ]5 G* `4 _2 p! m3 i. P
for(i=0; i<upp_frame_size; )
2 [7 x y$ w1 R2 M3 d: W; ^ S) Z
{
$ f& v, S% T+ J- z! A- v3 e# l" W
for(j=0; j<5; j++)
3 q' _; e5 ^2 x
{
6 V& o: l; q5 I) g* S9 ~" f' e
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ \# k* ]: ~! I
i++;
2 \; i3 D9 S w
//if(i >= 4096)
2 I8 U% q) q" A6 l5 Y8 `
// break;
- C9 c6 D& O! `* v7 k+ D6 G% ?1 u$ g
3 H5 x/ {- z) p2 m# q# F& V
}
* R' x/ r" |. p
UARTPuts("\n",-2);
$ @6 c8 X1 {1 Z8 m2 H, p2 v- g& X
}
) ]8 ]/ y; l) L2 l; z
}
* D, C) Q+ I& z! f8 b% m
7 c% \ P% [! d7 ~8 F
}
2 m' Q6 t; }0 r$ j+ x
3 h! R) G! J$ c- g6 p. o
F4 a) i. X3 W) y7 z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
L; [8 L6 c: L- N; ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 G( a& v+ N% H5 m( w, Q k3 ^' V
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4