嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 _9 ?# E* J& |7 r' |$ L% A
Void UPP_TASK(Void)
8 v& H% U& G! `& V" N9 y
{
, I4 j0 o+ r( F: D9 B6 _5 u+ J
4 P7 V8 e$ t: S" e5 |4 X0 i9 c3 o! y
int i,j,k,target_int_count=2;
8 x9 V* C- e- |
char ch[2];
& ~6 \. ^& ]" N
- B- |5 H4 B/ d3 f& N
) k$ Q( J# J5 ?% d' n" \+ {
0 @0 M2 u/ |% y( R
upp_interrupt_count = 0;
% y7 v$ O6 a i6 d4 R ^7 ]. `
upp_error_count = 0;
. Y/ ~6 L9 a) U& R) [
9 t8 t4 p& R' z( u7 K/ C6 N: O. h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, X) T" f, Z q$ u
// Initialize data buffers
/ d' ^; ` Y( f, j+ F- U
for (i = 0; i < upp_frame_size; i++)
. u6 @* O G2 R5 i5 s5 |. _, d6 M
{
% G. m6 t3 f# `; x- ]
upp_buffer_b
=i;
3 y! G3 a9 V- n& P
upp_buffer_a
= 0xDEAD;
, _/ v& y3 K, `7 {3 ]. `( A
}
( @: L5 T0 ~; z2 O
4 V( E0 c! O# w, N6 @, U7 \# N
//for(i=0;i<1024;i++)
/ B9 M# p. Y; G
// temp
=0;
) i6 O# p7 ]& A
% U- [7 y4 c: {8 }0 h7 T
//UPPReset();
: z1 b: V- d4 z0 X/ h
/*启动UPP DMA传输*/
1 D- B1 [! j, [) l# r
UARTPuts("upp_prog_dma_i\n",-2);
9 {5 V- U( v' G- S2 l
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; d! s4 ?! M. ~* O% s
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 l9 ^' F h9 O5 G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& q, O" z- \8 j' Z& V2 }* a
/ p7 ^5 k" z: e! L- v+ D4 V
UARTPuts("upp_prog_dma_i\n",-2);
; e& `2 c1 Z; D0 R2 Y; m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- E& G. h+ T9 l" o' \- P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' [4 T* x+ ~" o2 |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 e4 j+ u+ a3 \' y
6 Z8 a# E3 [; B1 N% z
/*等待UPP传输完毕*/
- q4 p* l0 M- y+ V' y, p
//i=0;
- X0 e/ S% w2 k! S2 T
//j=0;
; B7 i$ ^5 `; i' a9 h* W
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ Y+ V# C/ S x, |
{
|1 K2 ~& H- D$ k
/* 测试UPP传输的同时操作普通DDR数据
! c# c. Q4 l/ c ]' `
temp
=i;
4 v+ M3 z8 F: g% {
i++;
y0 L. R8 o% G" q
if(i==1024)
+ p& O+ l5 c! [% c
{
4 g0 U1 _) ] m e/ Q& e
i=0;
9 L/ C- O) P' v, p
j++;
' ?: g: M9 A" ]
}
$ ~5 B: e- c- o5 A8 p# o4 K
*/
- x1 ]+ P+ m+ O# \
2 J& O6 q3 C! g1 Q% ^2 \
asm(" nop");
) h" V ~2 R {/ L
% G5 X% C/ N: C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# K+ z) {5 ?5 b, M: V( i
}
2 h6 Q& b1 e6 r1 h Y
; j- h- t1 M( Y0 A" ?
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- e' H) U% G3 X. ^0 M$ g3 l4 ? t
//UARTprintf( "i=%d\n",i);
! d0 y( [' Y% Z$ X( o, }
//UARTprintf( "j=%d\n",j);
/ R9 J/ Z. y+ ?# f- G
UARTPuts("Data mismatch in buffers.\n",-2);
+ @- Y. ~! c# H, n5 U
if (upp_interrupt_count == 2 && upp_error_count == 0)
H3 F6 v/ v7 e9 R
{
5 X8 \2 A, m( ] ?- c8 m
for (i = 0; i<upp_frame_size; i++)
8 J& w7 m% }5 a
{
, k+ J4 p0 p. l6 x0 U3 x5 v, E( @9 h
if (upp_buffer_a
!= upp_buffer_b
)
& l* u2 x. l& R- x+ o# ~
{
# w2 y; r) i! ]" B# z% {. t. m
upp_error_count++;
I4 m; D/ }9 M0 i) C# v9 e' n
}
+ J5 E( K! q2 m: Z9 A" O
}
- V7 K" B2 ?0 ?% S: |9 V, y- H
}
\& R) H2 J0 @. \* V
0 J. k( ?1 n" g4 B$ p. W. h
/* 报告通信结果*/
- S- i3 J0 p' d1 h( ^
if(upp_error_count != 0)
' C2 X+ h- E2 ]6 @4 ~; a2 [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; U2 O: h4 v2 W/ ~9 I
else
, I/ D8 j, Z% n
UARTPuts("uPP transfers complete!\n",-2);
( P- \$ i, g) x- X9 [8 b
) ?4 h b7 o! y4 t! q j
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 A; [& Q2 r1 n8 q
UARTGets(ch,2);
' c! \ ~* W3 c6 L6 D& V( Z
UARTPuts("\n", -2);
" H! X" ^" d0 K! u! ]) w+ p/ v* L
8 ]( u7 N, C- ^( \# R
if(ch[0] == 'y')
: Y; u& j0 D8 I( T! T! Z3 e
{
0 m1 \5 P) L3 r# D7 k/ Q
/*打印全部读到的数据*/
" R# l+ z/ Q4 P: }" q B, ^
for(i=0; i<upp_frame_size; )
: y! Z3 h# l0 F% H3 Q* O+ R
{
( |; ~$ w! p% K2 L# T% l
for(j=0; j<5; j++)
: R1 T; M" y7 \1 u9 A' Z
{
0 e' M5 k7 Y# k" R$ f' s/ y: J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 M" l8 c3 R2 Y4 }. X, U
i++;
! u1 c' @, O% _9 j
//if(i >= 4096)
! m! }2 S9 ~7 a' n
// break;
# A3 c7 E0 z+ C% I/ i1 V
4 [7 A8 f. z: G* Z
}
8 |5 c* c$ j5 T6 M
UARTPuts("\n",-2);
* x$ L0 G6 w9 c
}
8 @' u! F0 n. X/ J: [
}
2 S D+ D* c, Q; p3 M
% X+ L' n0 C+ Q- u( D2 \' |5 z9 X
}
) }8 G5 `4 N: t6 Z: I4 L ^6 o
- s/ }; s! r' \: |" ]8 `# w/ b1 u
) N- l3 e( `9 X |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( m2 A$ Z5 B( Q" ]1 Z3 u
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 t: ^; C" X" s
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4