嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- u9 j# N: z4 ~, u
Void UPP_TASK(Void)
: \, }8 E; \$ ^) X! D+ D
{
0 s/ I4 B/ Q6 W5 V: L
, a( j k* `& K
int i,j,k,target_int_count=2;
h; B& H- [, p
char ch[2];
5 s5 H6 J! g+ t8 q+ P7 o
3 r9 L' U3 l- J
' [8 `+ B0 V3 K2 g( |- k
+ _4 r2 D# }) j" V
upp_interrupt_count = 0;
" f1 G8 i. u) c) v5 U% P8 F. u
upp_error_count = 0;
) R2 m! `% x9 {! H+ W: k- w) V3 h
, P0 e! K2 s- P7 [* e3 y9 {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& h T& L" S+ g( r
// Initialize data buffers
$ D% Q, \: C& j: Q, e5 z+ O
for (i = 0; i < upp_frame_size; i++)
* @) ?2 O! S. L# T6 w7 R8 m. i
{
# s6 a% z' b: }8 K
upp_buffer_b
=i;
) d, E& \6 n9 _& `* t, C+ h$ x5 M
upp_buffer_a
= 0xDEAD;
; J, g. R3 V" Y5 G$ i+ {
}
4 Y1 W. p }9 h1 D$ t* s; Z7 t
" h. A$ U7 h! C2 Z9 l5 I; @
//for(i=0;i<1024;i++)
+ S, w* o8 z' h
// temp
=0;
4 Y E8 J2 R. N, r( _+ u
8 p! @( z8 m1 \" o- X* r; @
//UPPReset();
, }. ~ }& l* ]
/*启动UPP DMA传输*/
3 s& E6 _" P: m9 r* ]
UARTPuts("upp_prog_dma_i\n",-2);
" o$ Z$ b5 c0 F+ S1 h" e
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* P$ g, T( A1 _. Y/ K; q4 z( d8 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
r' d9 B0 w% @0 F' M2 j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, t5 H; z' D" x/ [
& n, I: I/ @+ U& x4 U
UARTPuts("upp_prog_dma_i\n",-2);
; {& `8 \9 U3 k4 F9 X3 _1 r8 E; I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: i! q. x7 s- |: h$ p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* [. k( q) c! D+ m& |2 S1 R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 J& Q2 {/ @# d# I V( j8 @% N
- S; z$ }8 x3 m9 Y8 g( l' Y5 l7 b
/*等待UPP传输完毕*/
" }; u" G1 h6 J0 n: G' K* ^
//i=0;
0 b) y w% n5 V7 _
//j=0;
5 c3 C. ~# N4 ~4 P7 a8 L; Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" }8 }7 z6 @7 _7 a5 a
{
# ?% m, [# X) f. ?
/* 测试UPP传输的同时操作普通DDR数据
/ _# C- w/ l0 ~5 y3 D
temp
=i;
0 B3 q+ a9 U# C. L% g' }% n, I
i++;
* O: w& A% ^! D5 F
if(i==1024)
( K% [/ F" }! V5 s- b
{
' I$ f9 s) q! Y2 x3 t
i=0;
+ w8 d2 O. b) {; Q
j++;
5 W# t/ ]! p- r# n9 w( b$ y
}
( |7 R N1 }: Q7 n c8 ?- k/ _: D
*/
% i, {# m* ?/ T$ {7 q
8 s6 Q9 Z" ^ N4 ?
asm(" nop");
# ?/ m/ N3 ~( \% p( f8 q6 s2 b( U
1 \2 A1 }/ q; j, X; T) x/ O8 R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; Z2 `! E0 t+ B8 q/ i
}
5 K8 ~( ^3 m5 h/ d* i
$ ]' s# c, H3 d# o3 f
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 F m: K, n& |- x) U1 U5 J
//UARTprintf( "i=%d\n",i);
4 e/ C2 ^) P- G7 P2 p' r* [
//UARTprintf( "j=%d\n",j);
* C. t, r* e, |! I3 \+ ~
UARTPuts("Data mismatch in buffers.\n",-2);
( S' B& _' ~& s
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m$ v- s: ^2 ?9 [6 y5 r4 O2 S
{
1 x) b7 {% u: g' ?0 y2 F0 z
for (i = 0; i<upp_frame_size; i++)
, {6 \! E+ `6 h. w2 }
{
' V5 ?/ U) x" l
if (upp_buffer_a
!= upp_buffer_b
)
/ l9 A2 J5 R! {5 J2 d t9 ]
{
6 C, A( a% }# ]) i' d# \7 \( R
upp_error_count++;
' p$ ?' B1 t% o# i I" [+ U
}
' R0 O1 {: V* W+ _; y4 i
}
' U& ] N8 W, Y. X0 @
}
! h) n9 z2 `/ Z1 Z0 [
# T, `+ R0 t" A9 b8 G6 C
/* 报告通信结果*/
7 m3 P+ d" a( @/ d% q1 z. G
if(upp_error_count != 0)
0 |7 Q8 C' ~; G, Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' P2 W+ B: }/ [- N! Z2 U3 j
else
) y. I0 X& X7 ?
UARTPuts("uPP transfers complete!\n",-2);
5 r6 D: V, [* p% }* j" h" Q$ |
: m4 x% Q, w2 q7 n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ r$ W( d z! B- w* `7 t
UARTGets(ch,2);
% e/ O& ~' B7 Q$ I& u* ]) u
UARTPuts("\n", -2);
5 z4 k6 ^8 L. F# ?( v. F( U: T0 B
3 u, u; q& n% D" a6 _% x2 E
if(ch[0] == 'y')
: [4 v' H) ?9 z* ]
{
# }; F* G/ I4 ]
/*打印全部读到的数据*/
) H2 @1 ?( x% m/ Z, X$ T2 n( s( z
for(i=0; i<upp_frame_size; )
: o N7 T2 B% q$ [: b7 x
{
4 P e3 h3 L$ M! c/ \+ X
for(j=0; j<5; j++)
% `) l3 X3 e9 M5 Y5 a( y
{
) K( F; ]4 H) M) l& Y/ [7 x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 \6 M1 c& z# R2 { q) I- U
i++;
4 Q- [& a2 b- a$ i# Y9 T
//if(i >= 4096)
& Q- P p) h2 k# u1 M3 t( Z" d
// break;
p: V; f( t' `& s2 {5 \0 @! u% q/ z8 Z
n, o, Q. k) A6 w1 U3 @. J
}
, r! v& `- T" b$ i; \
UARTPuts("\n",-2);
9 C. ~8 s# x3 t- Y8 Z8 }8 a. z
}
9 a9 i% J% ^# e- ~* Y/ t6 X
}
2 {5 ~) k8 {' Q( U N A& [
1 z. u6 L7 Q; s- k
}
/ I5 ?8 Z4 K- h& k% p3 e
( }6 ]/ N. X! G1 i
4 p: N. ?8 b+ t* l/ i: `' ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; d+ ?0 g/ ^# F/ `5 m7 N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# L5 H, i" N' K' ~6 w/ w
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4