嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% O5 f+ W2 P8 o! o1 _0 c
Void UPP_TASK(Void)
, J+ @9 T j6 Y5 X. P
{
5 W, l6 Z! x+ l l7 r$ e
6 T( j0 i8 x. u+ Z" a4 Q
int i,j,k,target_int_count=2;
) {9 P/ i7 W7 Q7 F$ o& o
char ch[2];
7 U& @8 w8 |3 ~
$ |. x& v* O( r/ p7 w$ {3 s! [
4 W2 ?( [+ @7 v x4 T' F/ Y
% W/ F: n! g" ~8 ~6 Y, }7 ?( |/ B9 b
upp_interrupt_count = 0;
2 I$ V+ X) a- E: i
upp_error_count = 0;
7 A" c @! @/ J# C! M% d
7 p0 U5 ^6 `+ ?4 K" K* q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& t2 C5 B' }( t: l* q% p
// Initialize data buffers
* a5 {$ S9 ~9 X9 @' ?* \# j7 ~: p
for (i = 0; i < upp_frame_size; i++)
. c0 g H/ \( l2 y: }! f
{
0 C6 q# b; x, F
upp_buffer_b
=i;
$ Q8 q D9 L. S, o
upp_buffer_a
= 0xDEAD;
6 W6 T9 T2 o/ a3 k+ D1 o
}
& ~" p% Q, p6 ]% O
5 k! C) t. }2 K$ ?
//for(i=0;i<1024;i++)
' Z8 o1 ?( Z/ G
// temp
=0;
3 y. O+ }1 d$ o' t8 @" U
. z' X% ]- U# V- }- y7 V2 Q5 T; ?
//UPPReset();
7 B8 n* b, C2 G! {1 f7 [- ?
/*启动UPP DMA传输*/
! {$ b$ t7 ?5 Y+ j0 T
UARTPuts("upp_prog_dma_i\n",-2);
3 m- c# [* J6 ?3 j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- m: f1 t# Z+ G) Y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! h8 X6 d+ U7 D" @! R
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) J- q1 |# x3 i6 }4 S' a7 Q( L- P
6 n9 E* N1 j% k$ o! K. G) {, d
UARTPuts("upp_prog_dma_i\n",-2);
: A* R! i" ?( u$ ?
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ t' t2 @% n, @! T9 A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
~* u$ w! C2 h* K7 t, ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 z7 R( |3 ^9 J" l# ~, h7 X
# Q; L& H# r/ S/ S) P" k ~
/*等待UPP传输完毕*/
$ X2 Z& Y& P& A; f6 L
//i=0;
- U' [& b F# U; M
//j=0;
7 F6 [ B+ ^) \7 {" Q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ e* e3 u' g& ~# p
{
M. R, V' Z J
/* 测试UPP传输的同时操作普通DDR数据
: }* r% n( J) F6 K
temp
=i;
! N' C0 F7 l/ E) h% b
i++;
1 [' q: w: K& i1 x- v
if(i==1024)
8 y3 k2 W h, ^! M
{
$ M2 n) a) {# k6 t, W; V# H9 F- @
i=0;
" M: p9 t6 b, |5 l
j++;
% s6 V7 p, Y3 m' J
}
: }5 L+ T) q* t; J
*/
' l7 r( U7 _7 C; h
2 }4 f% ]# s. L0 ?+ Q* K
asm(" nop");
4 X) w) {. H& h |0 U- f
, B6 h" \8 X# `# X+ W3 O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ z2 j& B) X' e5 c
}
+ L" f' m' o. p7 C# Q8 o
2 i. P) d3 T. p5 S$ F( m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& d. ~; x9 y/ u
//UARTprintf( "i=%d\n",i);
9 t z+ N6 a5 X" [+ d2 \( y1 U$ N- f
//UARTprintf( "j=%d\n",j);
3 `; n' B6 n8 y
UARTPuts("Data mismatch in buffers.\n",-2);
+ w" w* A8 R3 d+ Q/ N1 s/ D
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 ]0 F) O- E4 g ^4 e
{
* U0 a" U" ]7 p$ K) c1 u5 N* z, \: o
for (i = 0; i<upp_frame_size; i++)
! ~/ u: y1 R* ~7 e5 D% I
{
* i# Z& L6 o' `/ C( z
if (upp_buffer_a
!= upp_buffer_b
)
; Y+ i; `7 d" Z
{
8 [5 m6 Q+ L4 p, l6 {* q4 l J. C' c
upp_error_count++;
7 Y& ?( X8 a) K) ?1 M
}
/ m% g& V: ~4 ^! l# Z% F
}
# E6 |/ k/ d% x3 G7 d. Y
}
! t" v: r$ o- q7 ^
' i5 a* ^3 V- b2 y3 K
/* 报告通信结果*/
' a+ e4 G1 l, m; n% a
if(upp_error_count != 0)
. S. \) A% }1 ]0 _& e* n. ]2 N, n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' c4 ~, B! N, Q! h4 u |& x
else
* ^8 i4 k( Q2 j% |5 D
UARTPuts("uPP transfers complete!\n",-2);
2 ^$ X, A. x4 _& M- G
: O/ y1 h+ {1 p9 P" K7 w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' e" t+ ~& ~7 N; a$ b
UARTGets(ch,2);
# L0 L2 k/ |: ]+ J$ h9 F
UARTPuts("\n", -2);
- Y6 s* j# x2 u8 R# c7 M
2 K$ A8 V6 R9 l) o& e* w: }& N+ r
if(ch[0] == 'y')
$ m S- e, G) o" F6 D6 A
{
4 [* T! \- E# j5 I- |2 L7 G. j
/*打印全部读到的数据*/
# v2 k* b% [7 U, C9 L$ @3 y+ l
for(i=0; i<upp_frame_size; )
9 |# E. U* e3 K( F c. j4 C$ L
{
0 x% J% }' j3 @1 R1 T; [
for(j=0; j<5; j++)
* e) _2 q) f/ G& p6 b7 b. j% U- m
{
" ?+ A& |% W1 z, M9 e6 i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 l( x2 | c* x
i++;
' f3 r u: D- Y: `+ L
//if(i >= 4096)
) q) D, f6 N/ y3 x
// break;
. c2 }1 P) _$ t2 n$ c1 m
3 H0 e% z9 Z! ?3 N7 j1 M
}
* T$ f( b' [& l) V+ V1 M, r
UARTPuts("\n",-2);
# g0 x1 n: ^4 V. I
}
$ \* M8 `" x$ R# o( {4 j
}
( P) Q1 _) A/ C8 \ F) u E. \
( m' Y8 {! l" Y
}
4 Q- j1 `. D2 N0 N
) j- A# P ?) B/ Q& F& f( {% a
1 q, P+ P3 }/ I8 H2 R9 x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% p3 A# U* M& v7 i: Y3 m: h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 o1 ? @5 }9 O- F$ R" @; }
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4