嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 T, V" M: D& u7 Y* x+ }
Void UPP_TASK(Void)
8 ~1 A+ R! d0 Q U/ D7 ]0 I/ J
{
2 q+ W8 U* E3 H4 _7 U7 W
( t/ a7 V. S& R8 a" Q' p1 s
int i,j,k,target_int_count=2;
" H% s8 A# }8 u* h7 [3 z
char ch[2];
$ o/ A# D$ M+ F7 a6 `3 _: u
6 V8 u1 n) K. f Z% x7 k/ }
5 d: X: {1 d, ^. i
5 D6 D9 n m) [
upp_interrupt_count = 0;
) | J: I' ^8 z: h, f8 a; x2 _
upp_error_count = 0;
/ x& Y5 I; s5 g( ~5 E
8 H0 z# Q% Y9 f% l4 k
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ e6 x' S/ N0 `- y
// Initialize data buffers
+ K3 b2 f8 W5 N9 Q3 _2 [* E3 x
for (i = 0; i < upp_frame_size; i++)
1 z0 j7 V, j* u: {. ]. @
{
& A H/ B. B t* |3 |+ m
upp_buffer_b
=i;
4 X9 C8 l3 y: e2 A4 {4 f% l
upp_buffer_a
= 0xDEAD;
( ^4 w6 e$ R5 t J2 s
}
! K( d3 v3 l+ A. s" Y
; `1 H0 O6 A) ~( s& c) j/ _) o
//for(i=0;i<1024;i++)
& C: H" @# ]9 S; Z
// temp
=0;
; i6 e! n2 ?4 U9 \
( m1 w- p* M# p+ g3 {1 V
//UPPReset();
# s- e& I9 [# e8 ~, @, @
/*启动UPP DMA传输*/
) M5 u: A! I& c' C8 A( C: H/ s$ n$ z
UARTPuts("upp_prog_dma_i\n",-2);
7 C+ d& N# D0 e$ |* c, Q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( W6 h+ p* N% D+ N4 N% L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# q: [& d( Z/ A2 r8 x% q6 C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% e% z8 g3 t" C6 ^( p
2 }% w# q% A3 C7 Q$ Q
UARTPuts("upp_prog_dma_i\n",-2);
6 p6 q% h& k) v/ m. N+ ?: t5 g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 ?% d+ E0 N- G: m1 x, a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, t: j% Y7 b8 W" j2 y6 i' W, z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" y+ n6 z3 Y S' ^. a
9 a( Z1 ^; p$ _/ } c" w+ |. t( E
/*等待UPP传输完毕*/
. q' s O! x* F
//i=0;
/ N* r5 b/ x( n$ O- O
//j=0;
' F; c- W5 ~1 W! ]: N1 f' ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( P) u" Z+ q4 H) H
{
! d" k0 W5 h: K* ?% e, t4 X! |
/* 测试UPP传输的同时操作普通DDR数据
$ f; ~$ c- i- Z: ?
temp
=i;
6 B2 e [$ u: m% F3 |9 o) c2 e8 _
i++;
f- M& q5 g* ?- S. D
if(i==1024)
* u8 O; u& w I, w
{
a( _! z- @. {9 w! h
i=0;
; h* p/ j9 c9 R' L3 K
j++;
% E7 P: p; K) F
}
' \: G# h7 r9 O1 ^- B1 D3 j. }
*/
# E! A+ f% p3 U" T5 R
& B8 n. Z; m S' P0 L
asm(" nop");
% ?% f A$ X/ g+ b! g
b0 r k& U3 c6 C& O s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& T, v; S8 S: `& e: a8 Q
}
1 u6 B# J# B* B7 W3 A: \/ I
6 B3 a9 K- J* V3 ^" u
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. U2 r+ p9 }* g3 X2 |3 X3 U
//UARTprintf( "i=%d\n",i);
/ W/ c/ q1 k( x6 M6 i& Q: k1 B
//UARTprintf( "j=%d\n",j);
+ F# ]( }6 J3 S. M1 ?- W
UARTPuts("Data mismatch in buffers.\n",-2);
" q6 o) p* s5 ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
) ]& H; f* _/ \0 y( E+ o; M
{
8 g. w1 n( k1 w) a% \1 E
for (i = 0; i<upp_frame_size; i++)
2 S, Y8 O. v% J( U
{
7 H! [8 }& B' g: ?3 M% X4 N, [ [- t
if (upp_buffer_a
!= upp_buffer_b
)
# K$ l. w% T' z" R! t' K9 l
{
' }0 V' C+ D% E+ b/ d/ p
upp_error_count++;
3 S4 R. I, _, B1 s# G S0 U! H
}
7 s2 z! ]( S# p0 \. S, G% W
}
0 i( e' r6 r9 v- h# a3 j0 }1 U
}
: v7 ]: N, F ]# M4 n7 K! S
5 _3 `' e" m. C7 y q$ ^
/* 报告通信结果*/
+ R/ d& D) E1 P. M6 Z
if(upp_error_count != 0)
* s' t3 W7 j: \) {1 l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- n& M- a& `8 X5 H: }: j1 @
else
1 ?# C7 Q2 V! m5 E- _; J9 Y/ m2 Y; B
UARTPuts("uPP transfers complete!\n",-2);
1 c' c3 F0 O) L3 `
# J' R6 f( y) C. G+ K F6 t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 X$ e1 X( j4 G& X
UARTGets(ch,2);
8 g! F8 Q& E7 f4 ^
UARTPuts("\n", -2);
. I: G0 k' [) ^6 s% k1 |# H" P
; N; R7 e' D2 r" y
if(ch[0] == 'y')
2 j1 |! F- C9 T" l0 k
{
) t, l" t6 J P+ @$ P; ~
/*打印全部读到的数据*/
9 u+ @9 l3 F' ?4 J( m" A
for(i=0; i<upp_frame_size; )
. `2 R# t% u8 a% l5 `' ~8 P
{
n& w" n/ x( M1 I
for(j=0; j<5; j++)
% c7 r+ o* @3 [
{
{6 ?( E2 [* R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% x% q" [7 o/ Q$ |# z; z
i++;
# t$ E0 o a- G+ b
//if(i >= 4096)
) V: X8 c4 h8 k. n* C# z3 J G
// break;
1 @' N: F" t# Q E9 ~
# l6 m3 ~$ @! S- z4 t7 t( F
}
" T5 z: Q1 \& u. ?8 j# G
UARTPuts("\n",-2);
6 t) ]; F& J/ |
}
- S( L& g6 u3 ^5 r( Z- j
}
7 a, Z8 W# Y* _$ O1 W4 y
( @2 ~, j8 `3 L
}
R9 R* `. ^# x9 g3 j
' c9 j* x2 J3 h" H
' m) j/ k8 f7 u) a1 ~% S* p
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 b; {# [% A3 G7 U' L- Y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- m. ` u' n M5 P7 Z n7 N
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4