嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& ?# Z. q7 T, V5 t! \4 ^5 \
Void UPP_TASK(Void)
# d. k0 u o# Q/ n c
{
6 U* o- N Y; a. M( D
- a( u& c2 B2 C' I6 s+ R3 @
int i,j,k,target_int_count=2;
# |( S# g6 r; G" \( ~
char ch[2];
% k' B0 S4 a0 @- A' }0 X. v+ X
; H- \: k6 ~3 a8 B
" `1 K' {1 I5 w
' t( @/ \( A3 M+ w$ a
upp_interrupt_count = 0;
1 N/ }2 U: p+ d/ ]/ u/ i' p9 b
upp_error_count = 0;
8 r$ l% h6 c+ A% m% A
7 A9 `6 f! O6 _# ~& n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 S5 N M) z; o9 C! Y, ?
// Initialize data buffers
( J) {9 Q: t/ l8 Z1 f
for (i = 0; i < upp_frame_size; i++)
2 y0 Z1 b; r. H- U! c' E$ G
{
6 k2 I9 Z" y+ y$ c! t$ W
upp_buffer_b
=i;
9 A+ k4 ]& M! ~- I" g1 x1 K% `; }
upp_buffer_a
= 0xDEAD;
" {# ]$ z8 k9 m; @; a3 S" a' l
}
: ]* M0 }5 {" M3 N. B$ N
- R% B2 U- k, o2 W G. F8 \
//for(i=0;i<1024;i++)
c9 U4 ]/ ]5 d% Y/ G4 S
// temp
=0;
9 G( G) W# ^0 x& L5 y) Q. z
8 Y9 [$ w. v3 g+ s- S
//UPPReset();
# Z/ W y% u6 P7 u1 G/ R: R1 |; v4 ^
/*启动UPP DMA传输*/
/ S, S" F8 G0 B, N( w$ k
UARTPuts("upp_prog_dma_i\n",-2);
G3 n3 v: \% l* V% g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 W" _1 b# J* Q4 }* S F3 _$ i# ]% e5 G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; H/ U. f0 t1 s6 x) T. b) A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; r8 Q& X3 d& |+ f& e: }1 e! s# F
7 \* H1 B; c! U2 t4 _) ^3 \
UARTPuts("upp_prog_dma_i\n",-2);
. U, i2 `# h) Q4 S" ^& u6 I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- E, d) ?0 _8 D3 V% \: e: d+ N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 G) m( n) Q& b$ [' [: E8 p
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ M$ E b1 c) h1 s& F. ~
* Z4 @8 t, K; z( p" ^) j M: q
/*等待UPP传输完毕*/
! ~2 x2 B/ T" G- U u& @
//i=0;
5 u. }. O2 I! k: Y1 d
//j=0;
( Z# `7 |) {: I% E0 h4 T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% c( Y, r* R4 [. F
{
- w& [5 t7 C0 _3 w' O8 s
/* 测试UPP传输的同时操作普通DDR数据
! G O+ i1 B' ], y% L- m1 K
temp
=i;
; R# j. \1 e5 `$ b* g' t
i++;
( J T1 G& U- z7 y$ L/ ^+ M7 h
if(i==1024)
4 b" a" Z1 p5 B& K( Q
{
2 |) A* `1 ^8 V
i=0;
& I7 ] q' g& X; A+ R& e$ p) {* D
j++;
9 K& U2 r( E5 K% B1 X6 [) U
}
* u* Y: N" H* F' e- u! _2 d
*/
& y* {4 ~- P4 ~6 b* b9 A
8 T" L, T9 F& V1 ^
asm(" nop");
! U1 ]" \9 x. H9 p
7 K! X# G' [8 ~/ R1 V$ a3 J: i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 m) z; z l1 ~. a+ K; }
}
- e% P% S# |* J3 w
$ `1 a0 s ~ r i' l4 f. G* |) y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ n) g: V, l4 W5 d9 Z% T
//UARTprintf( "i=%d\n",i);
7 T: i$ e7 x' W6 V. m
//UARTprintf( "j=%d\n",j);
$ [" @% Y6 P7 s& E/ d4 F
UARTPuts("Data mismatch in buffers.\n",-2);
( p: K2 u; H+ }1 q1 D4 V3 u o3 ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
' V0 x& C% F& f; h) U
{
o% \6 K' ?9 m8 x' [* { N
for (i = 0; i<upp_frame_size; i++)
_+ m( `+ M( L
{
/ V* {( h2 ` ^$ i6 X
if (upp_buffer_a
!= upp_buffer_b
)
: ?# ?$ e$ l" A8 `( l2 i
{
' {: u6 L( b: m" r- a, H
upp_error_count++;
3 s# l) Z6 Q, U
}
- c8 f# G% A, o# F& N
}
( N+ z# q6 q+ w9 r& o
}
5 t v8 D% ^* n
, _! h& Y5 _: p' ]% ?
/* 报告通信结果*/
4 C! g7 e6 g6 c" t' _ P/ y
if(upp_error_count != 0)
3 G# i& {) s& X% K6 q& I4 {: B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. ]. Q7 O/ V7 h! m0 F; I6 e+ {
else
8 X7 h7 |3 H) h+ E
UARTPuts("uPP transfers complete!\n",-2);
- r4 k0 d3 S. o3 u- p M3 Q2 }$ T
) y. a* W: s% y) f4 d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ s( {( y) B3 ~! N. u) R
UARTGets(ch,2);
. \- ]4 Y0 }) w
UARTPuts("\n", -2);
5 |- ^. B2 ~# ~9 B/ c- d% S4 |
. g' H* M- t! I$ X
if(ch[0] == 'y')
+ ~0 m( _9 ]4 K/ s. W% M
{
0 L" A3 N4 @& T M. J
/*打印全部读到的数据*/
7 K7 S2 L# T6 O( Q% h
for(i=0; i<upp_frame_size; )
4 x8 ]' o7 ?: a8 V Y* Z
{
8 c+ O& W7 u* ~* F, Q: K2 r
for(j=0; j<5; j++)
+ o6 N8 [# M- w6 ^- U
{
1 u) P% C) h- Z$ P5 X! ?7 ~. b
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 a. E, q; @. d5 }& O6 x% l
i++;
8 x# K: G6 p. L9 A
//if(i >= 4096)
# N& _, m/ L I1 B; |. \# |' M' `1 W! B
// break;
( h% I0 N. Y* @) x
3 D* Y$ |4 W2 T
}
/ ~$ O4 P0 N/ F4 K0 u
UARTPuts("\n",-2);
- y/ G3 L3 ]4 J" N4 y3 e
}
+ b# @8 a& B2 Z
}
+ d, ]2 _9 _- B! m9 q4 Z! ]
: a+ s& k9 M5 Y. d5 S, r
}
0 x, l- f- M& y) [" Q- |
. ^7 S2 C% m2 U7 s! x9 _3 B2 k7 K9 D
6 U n+ T4 y. X) H% @! Z8 |1 t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) Y+ d! V) x, l9 P: I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 }% c- k) b& g9 Q0 G5 f. V! j
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4