嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 U; s+ J8 [3 K5 z
Void UPP_TASK(Void)
0 Z1 s" i4 P9 L+ ~% r
{
9 i. e, c2 |: |9 ?2 s" c4 L) E" f: L* C
* k& z. a* p: D6 p
int i,j,k,target_int_count=2;
% t' @# u6 V6 n# E( F3 w7 @$ s
char ch[2];
) L' f z: l8 r/ I( n; P7 h
& }4 x9 y' a- u
& J( X1 L, ?9 f2 p# o
! O! b# S( _+ V/ t: U, M
upp_interrupt_count = 0;
) ~8 L( d% V/ v3 \ n' y+ p
upp_error_count = 0;
7 m5 n' T* r( y4 j. M- @2 e
' K1 @8 v: f$ t5 X; X! U, p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; n/ N# T( o6 x
// Initialize data buffers
. n5 f3 ~& u% Y
for (i = 0; i < upp_frame_size; i++)
# v3 {3 K' `7 z9 P, L! }$ _$ Z
{
% _% G' r4 H1 m" I% c
upp_buffer_b
=i;
5 s/ i" K- j( U
upp_buffer_a
= 0xDEAD;
; y; ]/ p; Y8 j, x
}
2 P9 }( @* d8 R
2 x5 U: ?5 ?9 h B0 r* {$ J# f
//for(i=0;i<1024;i++)
6 G% V- g1 u8 q9 Q: [+ n
// temp
=0;
8 u5 G* i: w- L. N
$ w( t$ D' e- o( R/ p
//UPPReset();
' F+ }( e4 x2 i1 B! n& ~) `( Z
/*启动UPP DMA传输*/
/ f2 D# [: j. W& K
UARTPuts("upp_prog_dma_i\n",-2);
: Y+ b& D* N: C* l
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ P3 w% N9 U0 B! M, }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 a+ U" ^) T7 A7 o- o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 ]- n% Y; Y# i1 d, p& E
0 G& E4 \" T- k9 D
UARTPuts("upp_prog_dma_i\n",-2);
8 P, q$ {5 @& ~; b6 S+ X- |/ Y0 [
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* o# |: t% j- o0 \0 ~3 {. }
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% B/ k& @9 C8 j4 g2 _6 g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ {& o) G! J( t/ `
3 L8 @# a! d0 }% a8 p
/*等待UPP传输完毕*/
% @7 @. @0 J9 O2 I4 o0 b/ w; ~
//i=0;
Q! c% @$ H) m: Q; w f
//j=0;
+ D% `) {5 A. `8 c1 I& r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: S6 ?2 P7 t, }" }) L! F
{
& m9 E& l7 T$ c' \
/* 测试UPP传输的同时操作普通DDR数据
3 U# Q: `) I' y- {# Q
temp
=i;
: g2 x4 U& \6 S. g
i++;
' I; G' P! a0 G/ Q$ z
if(i==1024)
& k) F% R$ v. g+ z+ E# A6 {5 B5 g
{
- x! l0 J( g6 a3 t
i=0;
% d& _( ~! E, b% U& e r/ Z
j++;
; C& i& A8 s+ r) L& @/ O4 q
}
% C/ H9 t: m$ D! v+ ?. _
*/
+ m$ Y$ d* L& X5 z+ r
P8 a0 w& d; D8 ^9 }- l
asm(" nop");
! q; ]9 U. C) [% h" }& r! ~
- S9 V2 _0 i" x5 u# E/ e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 B7 t1 P' x: v( w. S2 O" L
}
9 j: ^: W- V4 S
2 G# _: k: ?) i( d- w+ z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 q2 t B; u; P# I! N' O; z
//UARTprintf( "i=%d\n",i);
3 |6 r6 g; _$ u: a3 D- F
//UARTprintf( "j=%d\n",j);
B% ~# }/ o% K' Q# V+ U
UARTPuts("Data mismatch in buffers.\n",-2);
! T. W$ ]! g1 C/ \4 A9 M- k Z% f
if (upp_interrupt_count == 2 && upp_error_count == 0)
% ]8 p6 F, |, l( d8 P9 W5 ~; |
{
! x6 W3 M- Y7 Y) H
for (i = 0; i<upp_frame_size; i++)
3 _, m; i, z7 M% V" k
{
2 W2 B3 k1 j5 I8 Z2 A8 @5 N
if (upp_buffer_a
!= upp_buffer_b
)
6 w7 {# g0 r' n/ ~
{
! P+ o: [" W1 z$ \
upp_error_count++;
! C9 C- q$ m$ h3 ?
}
- ?. x$ F, b" c/ E/ ?! j9 g+ U
}
5 }0 W: ^- R3 v F/ i1 h
}
6 K! Z; ]6 O2 K. h+ W% d0 h
, v, k) f8 q3 t* t5 Z6 n4 t8 H- |
/* 报告通信结果*/
% ?) f. B. s8 q8 \
if(upp_error_count != 0)
6 E( m+ q) O& Z+ g# U( L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 M3 W' X2 X6 C" d4 d M" V: `) Z/ N
else
1 m) ^/ k+ d; Y# a% n
UARTPuts("uPP transfers complete!\n",-2);
: i, C0 B+ O9 |/ F) f1 x
; j) r7 d4 w4 P: W, r7 U- k9 p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 a9 e; W" \. g' T0 `1 n$ {' x
UARTGets(ch,2);
" s2 [. ?6 E5 s8 h' | _
UARTPuts("\n", -2);
. q5 K5 g% T" C/ `: R5 k- u* i" _
. b& ^5 ?: S5 R3 A
if(ch[0] == 'y')
, g4 n5 G% |- G w& q1 a
{
$ k4 P! G+ K; E- V
/*打印全部读到的数据*/
2 \6 C& L& C ~% ^
for(i=0; i<upp_frame_size; )
6 d9 J: Y+ L- v+ t5 F* _
{
+ J$ _& }' Y# [+ M8 Z
for(j=0; j<5; j++)
& K& N0 H6 |( z! f. x
{
$ `9 C# {% S6 W$ ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 C) B5 p) q$ y
i++;
: ?) l1 p: W7 X
//if(i >= 4096)
1 C" S9 [. b+ k# f' U! j
// break;
% z# q; a2 C' G! \
; w3 L4 u P( {! E6 N
}
8 x7 [, b# n5 B
UARTPuts("\n",-2);
, b) Q" z/ L7 b5 p7 @
}
?1 z+ S3 t# h0 g% W# h J' J ^9 R
}
5 \& ~/ t6 j8 o# L$ K, e2 {
4 S, x$ i" r1 K. I+ ]+ F
}
8 Z. n: x- z* U3 p. ]% G
. V, ?2 w3 y/ V9 L. B
" P. _! m9 `* O( t; w! A$ ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 c3 x, k4 l6 K1 c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 Q8 Q( f) @+ r+ {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4