嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' t2 Z& j V, Q, D- b& d
Void UPP_TASK(Void)
4 e" n5 C# c" r3 X3 f
{
: E* p) X4 G9 W- {: }
2 r) C8 H( A8 r) b
int i,j,k,target_int_count=2;
# k, y( s$ M) z9 O
char ch[2];
6 Z5 i5 U" s0 k1 b
% J" M, A3 O% l U& w9 t
! o. n' j1 b& I2 R5 s/ y0 r
. g& p2 [9 [( x# p2 e) E
upp_interrupt_count = 0;
: z7 j% E7 L7 r# G. P
upp_error_count = 0;
. |6 _) t2 @" M! V. T: c
; @- U; f* ?7 b' O1 b& a$ B6 s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) ]2 F+ m3 x6 t8 P% K1 b! ?
// Initialize data buffers
- \* m) M7 d/ x, }
for (i = 0; i < upp_frame_size; i++)
5 I w0 G t9 B! w# N
{
/ H/ ]. ?5 i/ A; Q4 }
upp_buffer_b
=i;
" Z6 p# T" M% v. H. @3 J% d
upp_buffer_a
= 0xDEAD;
# m+ ?( K# L6 |' f/ W7 E
}
" ~/ c% q8 k6 J- }' `7 H. }
3 s7 _+ D0 D+ w) u
//for(i=0;i<1024;i++)
( T. h2 E0 i$ G9 h; o
// temp
=0;
1 Z, j( |1 _3 c6 l* Z
# n$ d7 A+ X% n9 Q
//UPPReset();
# a. C, ~ c: g$ i Z3 F3 r# S# b9 a
/*启动UPP DMA传输*/
K. v% }; h' t+ [4 G. N4 c
UARTPuts("upp_prog_dma_i\n",-2);
9 D! O2 _7 p" n, b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# F9 e* m3 o0 T$ W0 y5 J: j: w! _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" \: W. R3 b2 K* M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( }! m! \7 r/ I4 Z# T) L* p7 j
* ~6 z% I# \2 v% B/ b; D
UARTPuts("upp_prog_dma_i\n",-2);
o) U& p+ V D+ }% h) B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 [5 p( m# @; i T- @8 c4 R$ E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 P& G& Y" R+ K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 [; Q9 }5 Y& B( M: f
1 M* ~ ]* Y$ q, y4 @
/*等待UPP传输完毕*/
: z3 [+ F& x( J# S1 {- T6 w
//i=0;
K2 t) `! x( `8 N- Q& V- |; l
//j=0;
5 w" B: s1 C, F" _$ T) ], g
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; s, L8 W+ [7 u$ B# p2 ~7 T" c
{
; t R6 `% S2 q" C S- ]' `& C
/* 测试UPP传输的同时操作普通DDR数据
# b% n; u- u$ S1 a$ F5 u. O F
temp
=i;
& q5 X5 n7 i4 k8 b# X, ?
i++;
5 W4 p1 F' H3 [) P
if(i==1024)
) s! M8 q$ M1 F& ^
{
\8 R: u8 s6 m4 m
i=0;
4 l4 y$ {% j. m
j++;
* @) _3 S' B. M2 u
}
3 o" s# t+ s2 B& N$ S& g% R
*/
& _% {, a4 W7 s: v2 _; O
W+ u1 D9 D( h- g
asm(" nop");
$ R: I! [" w! n' k* L9 r2 u
* e1 n4 @& L: J! K, Q( w' \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 I7 d- y7 R5 V' d, ?/ D5 [
}
/ L. m4 q$ Z4 [/ w
1 @6 Y8 L& [# R8 z+ U; E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# K7 L( C8 J$ e& n! a% A1 t; R
//UARTprintf( "i=%d\n",i);
1 R" x$ s0 `3 P- x% ]. B# _" N
//UARTprintf( "j=%d\n",j);
9 J9 g$ L5 G6 p+ L5 b
UARTPuts("Data mismatch in buffers.\n",-2);
; U5 B: G' X$ l7 L) Z$ m
if (upp_interrupt_count == 2 && upp_error_count == 0)
; G6 L1 n, J! f$ c4 E
{
0 H9 k* ]6 }" ~: x2 Z7 T
for (i = 0; i<upp_frame_size; i++)
0 \; M3 C) V5 B$ ~* j$ e
{
4 `; L4 z" P6 ?0 u' V
if (upp_buffer_a
!= upp_buffer_b
)
0 T: H) I. D) n3 u. r4 D
{
, C& G; ^: {1 z( W& H( N
upp_error_count++;
. \: i+ H6 T" }+ F, k) Q2 a+ e
}
. |/ M& a+ n# K; l$ f
}
% H- H) q8 p* B* \
}
2 R3 ~+ Q* o$ ~0 i; k+ L
0 ^1 d$ R* t1 J3 y9 Q0 ~: S
/* 报告通信结果*/
2 S9 y: p6 L% D
if(upp_error_count != 0)
$ n" l1 i" G0 v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 E& \2 K* S) B# U( J
else
) ?6 m$ B3 |; m4 L- `7 c% {+ Z
UARTPuts("uPP transfers complete!\n",-2);
, k' v/ W b# w8 {
: L1 U2 ]8 _. W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: L/ d: N! J- J
UARTGets(ch,2);
2 t7 l0 ]9 d; _" Y7 U* {* N3 D
UARTPuts("\n", -2);
, ?- }, z& e$ I. b
2 o( J" f, g2 K- g
if(ch[0] == 'y')
1 G7 a' D" [- g: m) {, B7 }& {
{
z4 a* b" A `( T( o
/*打印全部读到的数据*/
" }3 K+ x- g. y0 I
for(i=0; i<upp_frame_size; )
- h* O9 v. ~7 @: c9 t
{
8 o0 ^$ x: R* s3 W3 h( ~* V _
for(j=0; j<5; j++)
# W( H; K2 r3 V6 W! d
{
* v( E9 _% j- Z/ p+ U( l7 A+ S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# E- t$ Q8 {" _( x$ c& f/ w
i++;
1 V% l& w) Y5 z' I- ]7 p
//if(i >= 4096)
, `$ m, {! D3 f) l+ l8 p' Y
// break;
. ^9 F4 \, @- |8 F2 I' T( I
6 n% w6 }6 }) Q1 p1 x! ?
}
; x: o* }. O7 V9 g* P& D" E- v
UARTPuts("\n",-2);
5 ?- J* ~* k9 |4 R0 I
}
0 `+ R$ |' y" G3 W2 l8 q
}
0 L( T- g, z0 \/ x T9 p4 q
: {# G! u: W% ?2 O
}
4 B8 j% b1 F1 [" `7 l
+ v9 s; c4 D% r7 @6 \
- {# E% |( X3 f7 k- r, Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% O- F: U( e, U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, R0 e. m0 D* O3 G" S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4