嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ l$ s) U3 p* `# a8 j
Void UPP_TASK(Void)
" t0 _* B7 r1 F* L% H
{
1 q0 C% ~* a' w i) m
V% A2 M( e& T) S2 t" b- ]2 y
int i,j,k,target_int_count=2;
2 Y* F$ }0 C0 e2 |% o! P8 I# Y$ l1 I
char ch[2];
* B+ x+ |# u: x7 n0 [7 g D L, a9 r
! T0 k- Y6 O Z8 z+ Y) `
0 N0 N6 r# I5 `6 K/ E, `3 [
: ?0 Z* B' ~6 Q/ I/ u: }! D6 z' }
upp_interrupt_count = 0;
: W+ D U: R. \& |
upp_error_count = 0;
# b( t* Z# r! h7 Q- j; L K4 U! F
2 u! V% Q+ B0 s1 y' k% S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- }) Z5 T7 ?& [1 l8 E
// Initialize data buffers
! b" p! K0 Q/ V+ g( s0 Z. e7 u
for (i = 0; i < upp_frame_size; i++)
; h' q# O9 N+ [* X, j
{
( |$ @% H" ?0 N' S3 H# K' V
upp_buffer_b
=i;
; D0 n4 g2 E+ a# l' \: E% H$ E2 p: V
upp_buffer_a
= 0xDEAD;
/ \/ |% f6 L% D8 R1 q% L' W
}
2 R6 J9 |6 y2 J3 |6 V
( d. {; ^9 Y r p9 E% S& }9 C7 y* V- `
//for(i=0;i<1024;i++)
9 e( _- `# g' D
// temp
=0;
! m* ~; J! N: f( m$ q
4 r; C) p8 J" o( I: F
//UPPReset();
5 |/ H8 D+ L; _* q2 {# g
/*启动UPP DMA传输*/
# W9 Z+ I& p3 C( U9 ^! e# H2 L
UARTPuts("upp_prog_dma_i\n",-2);
1 \( y! @: K3 U# d, s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- u$ I/ j7 y0 k) L: S8 {" K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# x: G5 Y3 o2 C4 Z. v& J; K ^/ S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" N+ B4 g0 o( P* s D; b- p
$ H1 |5 y7 [% Y1 `# W- M
UARTPuts("upp_prog_dma_i\n",-2);
( `, W E W* Z7 T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- l1 o! v* g9 c1 H- d* Z9 R3 h4 L
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* {9 w. H, n" L7 j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ G& L9 r$ P: a5 d0 U" \# ^
* x; L5 u$ ^7 j
/*等待UPP传输完毕*/
( e9 n2 M5 A6 @( _8 l) R
//i=0;
! @( p8 u3 X+ [& Z! `# j" a
//j=0;
6 K5 t. G/ y5 u( C2 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 }7 A6 V7 U! Y# F e4 y5 b
{
& T! a- h5 ^& o+ j; L: h# }
/* 测试UPP传输的同时操作普通DDR数据
; W6 E8 {7 P5 j! Z2 w* V- a: ]+ x9 z- e s# @
temp
=i;
2 `& y$ G$ v4 ^) j8 Q9 b# t& s; _
i++;
0 {" C) n( }7 d3 C# E* r. m8 P
if(i==1024)
2 D" q- E/ d- L4 m
{
7 S0 F3 h) Z2 N% O! F% X. }
i=0;
8 i8 \1 k! G8 e
j++;
% h/ F7 C7 j6 p' @; r3 N( {
}
5 H: v/ r7 B0 g O
*/
g1 A* y' c% F2 j; i* t6 w
& D5 {4 t: @2 V: `# V/ j
asm(" nop");
. P, K% W! e+ e" x' t# r
4 ~* ^# [" F; j2 ^/ W+ Y9 ]
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 j' m {3 O6 s1 c! w3 b2 t, ]
}
) |/ J) l( ~& T8 u0 v6 n4 R1 \; t$ ~
+ p2 O' \( C9 z! y& b2 N4 X- D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 o9 ?5 }/ _& y' |9 c5 k
//UARTprintf( "i=%d\n",i);
) R+ O$ t7 K9 M8 G- J8 z- r8 X: j
//UARTprintf( "j=%d\n",j);
# `. f; L7 I; K0 _/ d1 {' [$ X
UARTPuts("Data mismatch in buffers.\n",-2);
; k5 i% e5 b5 u- L
if (upp_interrupt_count == 2 && upp_error_count == 0)
' N, m' `$ z, I- ~
{
( O b% O; }) D' X
for (i = 0; i<upp_frame_size; i++)
( j; g: ~6 ]3 `: ?
{
5 d% B y1 ~: w
if (upp_buffer_a
!= upp_buffer_b
)
# @4 w3 m. u) o* h h) L
{
+ w/ e3 C7 w4 i+ \$ p. r
upp_error_count++;
% O0 l6 _/ {; Z2 G2 g$ I6 J; |
}
1 [( K. A# _" P# T4 R- V7 ]
}
! B# i7 D Q4 {. f2 U5 k' F
}
/ X0 [$ g; g2 R
/ W4 L/ |% {5 H0 F1 \4 `6 U
/* 报告通信结果*/
8 j5 k' l5 }) g' M
if(upp_error_count != 0)
& e" E7 a* y% M( w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
I }6 r2 ~' ~% i
else
$ m! \8 ?3 o- P) E- }7 A
UARTPuts("uPP transfers complete!\n",-2);
$ c( ~, |9 a" W$ [' `! z6 M
& g+ M7 g! [* M2 z2 {! k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 p+ a6 }# H) X' @! Z t
UARTGets(ch,2);
. P; L/ C1 S' {3 d- n/ P0 Z! n, l
UARTPuts("\n", -2);
0 k) h5 R5 v% ]) o
' K+ ~! L/ Z* E. e
if(ch[0] == 'y')
/ R, J0 t0 c9 u7 _
{
. c. V; P: {! x
/*打印全部读到的数据*/
: C1 M( f5 r4 i3 X% u
for(i=0; i<upp_frame_size; )
* j( c! F* r& ]' I% l+ f& s6 M( m
{
/ e$ E) u. J0 j
for(j=0; j<5; j++)
: e& B* i; a( |# H
{
/ n- A( v3 S4 ]. M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 ? ^" a8 f" P1 K S- O7 b
i++;
: E. {% B8 m4 b, X& Q% {& ]4 D
//if(i >= 4096)
3 C- j7 W! W! V# |* @$ O$ y/ [
// break;
3 A% [/ w" X( J& p- @
! v( h6 v& D7 o6 W h& h9 g1 A
}
4 S2 X) P0 X9 ^7 b8 j @2 R
UARTPuts("\n",-2);
& z/ C5 f; M9 f }* E# @
}
% n: P# e% a# u) m* `
}
) x% z/ d" B3 q0 V, \0 O% v
' I5 [4 w% s* N- Q) v/ \
}
0 z$ i* e5 s6 B+ x' _( r; D
, Z) [4 B$ D2 Z/ l- y
5 M1 [9 U* S& Z, ~
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% T$ ^; k* ?3 E- o
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' `0 j% b$ e, h/ t$ F3 L
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4