嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 Y5 v+ V" u' {; U/ B( s G+ f. t; c
Void UPP_TASK(Void)
# S/ W+ `* D; M$ k/ ^0 u
{
5 z: g: W8 u5 e- Z1 a! C7 n
, @/ M! X! u, Q( l9 {' U% l
int i,j,k,target_int_count=2;
2 W7 t: @3 e+ D$ ~
char ch[2];
& @, B7 W* B3 z, W5 }. G
- z2 C+ n' s& X+ v; k' [5 p
( R! D( u& R# m. T( f
0 J" r1 z$ s1 ?- m+ V- g
upp_interrupt_count = 0;
0 T3 o) X( D7 |0 @& y6 d' D& P
upp_error_count = 0;
( l5 }1 h( Z2 u! H% p
B7 K8 V1 ], E
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! b; s( L" R$ W1 u
// Initialize data buffers
, q5 v% h: _0 m7 E1 s
for (i = 0; i < upp_frame_size; i++)
7 n& k- _' i6 ~" _3 A5 b) R. R
{
9 b; w, h$ m8 y
upp_buffer_b
=i;
* o4 j9 |( E) B2 h* V
upp_buffer_a
= 0xDEAD;
f: K) k( |8 K& p* i( s2 w! I& c
}
; l* z F1 r, F5 x
3 z# \2 J6 k6 ?# Q W
//for(i=0;i<1024;i++)
/ g' S5 R6 l3 n! W" p
// temp
=0;
3 k' {1 L4 q. e- v0 X: ^1 D
& L4 Y/ S8 \ f' [ w J( u0 l
//UPPReset();
, g0 b( a' c6 |& v
/*启动UPP DMA传输*/
. i" [% I4 V @2 \. { Q0 p
UARTPuts("upp_prog_dma_i\n",-2);
; K. g' e( F* s5 ?/ u1 `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 T+ f$ B* h( [1 u1 s( H3 z) v# S
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 J( B0 \- D2 N+ A' l" \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 |8 \/ A( p+ \1 V
2 P; k# A3 X6 K2 {1 e" U. B
UARTPuts("upp_prog_dma_i\n",-2);
8 o6 S& Y: J4 x; F3 j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" ~% Y& D. `! Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) G, L+ B3 {# F
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 g+ ?- e2 U; W- q$ R* E& X
$ x E8 {6 u$ m" H$ e
/*等待UPP传输完毕*/
$ L! ?) O& ?% g: X5 m
//i=0;
1 i- a7 K! N% U4 v$ a- l
//j=0;
' R9 O3 S- z( R3 f2 [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 M9 F" @! r8 d* T- Q
{
* R- f. Q, \% N. o' `. Q" z
/* 测试UPP传输的同时操作普通DDR数据
( G( u5 f" d8 m
temp
=i;
6 e) B. P: A( j/ C4 u
i++;
c1 W9 z1 }. }6 \
if(i==1024)
M. X' r! [. e: \' P2 y
{
0 v5 S3 F: [9 S+ k: j
i=0;
% u; ?/ q& J, ?8 `7 Z
j++;
8 R* W( i+ m6 d
}
- i/ p9 S9 D# u' H/ q" e
*/
* F; p& P' a$ V4 c! \- t) u
- f/ N: S, K9 d4 ]$ @) T
asm(" nop");
7 i9 ~* s( {$ D# e
2 {# F) p" n, y/ w6 O2 T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- v9 h+ D7 D4 a% I5 m1 @
}
8 A) P N) f8 R5 y T
9 M$ q0 @6 p, m. V$ `8 v0 S4 n' g& v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# w9 u! K2 M& a0 j/ D8 r! Z$ [3 j/ Z( y
//UARTprintf( "i=%d\n",i);
; {7 d9 D9 w7 k
//UARTprintf( "j=%d\n",j);
0 n9 Y, l8 A* }
UARTPuts("Data mismatch in buffers.\n",-2);
' P- }) h7 d5 T+ k& x
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ T1 Y2 @6 R* ]7 x/ e" t8 D$ R
{
( }3 q1 d" L' D
for (i = 0; i<upp_frame_size; i++)
* S2 u+ U0 F9 y/ l, _: G; B1 i6 u% P% h
{
* h- L6 v& P* o. f8 r z
if (upp_buffer_a
!= upp_buffer_b
)
8 K, L0 f8 z5 N$ L8 `' c# ~8 x
{
f9 v% K8 [1 W; W
upp_error_count++;
6 I( E0 }6 a" J- l5 }' F
}
3 X$ V; s1 x4 }
}
0 H/ z+ i% \! B% ` _
}
% b( b% i% K5 `1 _, E- E7 }: R
p' E( r6 d, p& E' b
/* 报告通信结果*/
" x `# \ `( H5 h, f. Z1 c
if(upp_error_count != 0)
3 T' N2 ]3 k3 |1 n/ S4 T
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- n4 D* V* ]2 q9 S
else
Z. t: H6 E; r3 l( A
UARTPuts("uPP transfers complete!\n",-2);
' M6 i4 D+ r8 }; ]
3 e) c' b, F* t% r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ E1 Y @/ [. Q& {2 {3 c
UARTGets(ch,2);
5 C, V! M' G+ b6 ]
UARTPuts("\n", -2);
# A) n+ r( ?* y w% |2 n! r5 P7 ?1 e
- Z% K- i' |. m
if(ch[0] == 'y')
& I6 L d" H- l6 _* Z3 C2 o6 @
{
" S; B7 c* Z N5 _' |2 P
/*打印全部读到的数据*/
" d; ?* B* c2 h6 l: W" H# ~1 W$ P
for(i=0; i<upp_frame_size; )
/ _6 _. X7 e, U1 r
{
. P7 M) Y/ Q3 v' r
for(j=0; j<5; j++)
! g8 \' P0 d1 k; d# m6 L6 p z, }
{
, W1 @' _7 \) ~7 e9 N8 R. G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; T0 h, N5 Z W% @' J9 e5 _& B
i++;
# R+ ?; h u0 n6 V
//if(i >= 4096)
# R' O. r# J* m8 }' o, s# g
// break;
; P' o. Y4 z, [0 x, \$ E/ R
( N3 P3 a, O Y$ w9 K/ x
}
& A: s) X' A5 O: f
UARTPuts("\n",-2);
! S8 b' V! u3 l* }
}
8 T& E5 ?+ I8 f5 s9 K
}
7 P0 D- v3 D+ R8 d1 J* ]( f% u8 d
2 p1 F3 M. N+ [# W1 r0 X; e) ^
}
; l+ n5 C; }$ C& P
! A+ C2 ~/ B/ W! Y& E
* w1 J4 Y% T( U
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& V# {( T, v8 |% F$ L
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ ~3 B' [8 e- c
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4