嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, ?( K, G8 l% M4 N8 T! s' k' B3 ]
Void UPP_TASK(Void)
% o) t* M& R" ]# @
{
Z4 u4 ]- \$ u2 s1 o( n* f% h
, ~* C" w7 H4 I4 F$ r) S
int i,j,k,target_int_count=2;
0 L; B! x F4 P8 E
char ch[2];
2 }) a r/ p, U& x8 l
9 F: `. ?" X7 ^
# Z( h) |4 s: h% o s5 {
. d1 W) e6 B0 I; d# ^2 L
upp_interrupt_count = 0;
8 ~ r0 S/ _) c/ J, j
upp_error_count = 0;
8 |5 t1 @. ]9 a( S3 X3 O6 P
1 Q% Z4 O) `0 S0 A/ m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& `2 Y: A9 ~+ ?4 I0 h1 |& W
// Initialize data buffers
! m. S* ^0 k+ B' [5 A
for (i = 0; i < upp_frame_size; i++)
0 {, a; n O$ E$ T
{
" ~2 s/ F7 d4 v7 T$ B7 |2 T1 Y4 f6 z, P
upp_buffer_b
=i;
* P3 b, j+ A( h* J5 l5 Z
upp_buffer_a
= 0xDEAD;
9 S$ n( H! V* _' x) E7 I5 s
}
0 @( C6 n0 x& q5 M, w
; G, i% G C& B' h1 q/ R X. R- V
//for(i=0;i<1024;i++)
4 {/ ^+ X. u* A" g/ T$ Z& u
// temp
=0;
, |$ ]$ A! O( y8 |0 ?+ i
$ I h+ L4 X) Z, n) t. x. m
//UPPReset();
3 X& B9 W3 N: x3 ^0 D9 P% Y
/*启动UPP DMA传输*/
% v; B* d7 ~* R* n
UARTPuts("upp_prog_dma_i\n",-2);
4 c7 T; t' |4 L6 ^% A4 j1 F# C. s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' f' T. ?7 X, v! v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
q+ ?6 _2 u( {/ U
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 C) O r' Y. ?9 C
/ P* p: V4 X9 r/ [9 H! f" h1 i
UARTPuts("upp_prog_dma_i\n",-2);
# Y. C) h( J" _. o; C1 b! g6 ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 }; ~2 K& t; M: k$ w" Z8 t5 f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 p* C- O* M7 K9 h! S: n% ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; l0 e+ [1 D- ?2 E8 ]
+ @4 G. g3 c# l$ x
/*等待UPP传输完毕*/
) \2 a7 I! y4 ~! h1 h
//i=0;
6 r- h' ^: T% A" a& j5 ~8 |- B
//j=0;
6 @' b, l8 d, z+ j d! {
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* O) f. c' m( @
{
7 t. g# p5 y, L
/* 测试UPP传输的同时操作普通DDR数据
: K& ]- J+ ~( A# J' T' F
temp
=i;
0 T+ ^8 _( ~' i- r0 V0 p: r. R
i++;
( {( x/ ^/ B" w+ L: t# u3 ?* M/ J
if(i==1024)
4 u+ I% k z x1 A* A' j4 I+ ^* _
{
! e: |( v( H% p8 a& t7 ]3 s
i=0;
J% n* L5 Y. ]( ~8 @3 R
j++;
7 J3 B1 G6 M2 U& O$ w2 d+ e b
}
/ Y# S& v" X P, G% i) Q9 p0 T
*/
4 w) c; O+ E- p4 X2 I! v
* w! g$ D k/ t7 o
asm(" nop");
' g1 t0 n2 r" \" |4 B! L) Y
+ e) Y( x2 L1 r( i& J+ q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 G& M' W; o: b1 ~ x
}
4 g! K0 T$ a7 E$ T9 `" g0 @& ]: f$ G
% X/ P! [. ^. h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# X# y* }6 N% ^4 A" g& f* N
//UARTprintf( "i=%d\n",i);
; b O9 J' A9 n! @" R' F1 g
//UARTprintf( "j=%d\n",j);
! `" [& _7 m) y0 h% ^6 q% ]
UARTPuts("Data mismatch in buffers.\n",-2);
& D$ Z$ o( f2 F5 e- R
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 A( Q) w3 Y2 ~/ k" M
{
0 Y# ?/ N3 X1 u6 v% W! V$ O" G
for (i = 0; i<upp_frame_size; i++)
: D q. n: i9 |$ T) A5 R4 ^
{
1 c( f5 y2 |" S# c# T c/ P1 r
if (upp_buffer_a
!= upp_buffer_b
)
/ N% L7 a5 y9 J$ m/ ^/ _8 s* }9 k6 s
{
8 n% Y9 U0 B% c; B, Y4 L
upp_error_count++;
2 R) d L' a6 @
}
+ A& ?% c- Y) n6 g. [
}
# t; \& u) d0 {% D* h2 {. o }( ]
}
- v, C2 N/ Y% g: T0 }
1 @, E3 c. r5 G X" a
/* 报告通信结果*/
! m, z' _. k' z" m/ A* z* p# V
if(upp_error_count != 0)
# R+ T( I/ K9 R: L. e
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. V, o7 d9 g: b# T
else
9 \0 z8 C/ d2 M, w% M
UARTPuts("uPP transfers complete!\n",-2);
* l+ F% P1 M0 ~) e3 H
" e& P9 j+ _% I' b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: M u8 m6 j7 n5 d$ b/ G2 @# ~
UARTGets(ch,2);
1 p* Z4 C9 A( S) W9 u' f" \1 I& x
UARTPuts("\n", -2);
7 p$ K# m3 Z, Y1 f
# \1 n2 C% n$ T; k. c$ `
if(ch[0] == 'y')
) A' l( ~+ E% F+ T4 }- A4 |3 ]
{
8 A8 l$ U3 Y( z8 C2 W1 a7 ?
/*打印全部读到的数据*/
4 h+ P! _# }4 F6 x
for(i=0; i<upp_frame_size; )
! R, L( L/ x. O+ N4 ~6 X; E
{
& a, N: {2 a. V. y% a- L
for(j=0; j<5; j++)
$ s1 D2 Z' X: }) f P' i5 u e
{
; h% h! L" D. d$ O. g
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- e* w! ^1 t* f# F3 Q6 Y
i++;
3 G8 L; d6 i) R& s7 b1 b: i5 g
//if(i >= 4096)
: q+ t. E7 ]% z; I6 e( u7 y
// break;
" W+ t& _& _& F8 e% t% K
: M0 e- N0 E. E" A* P
}
; C: x. R7 y7 F4 C& y1 t& f
UARTPuts("\n",-2);
' K- O- V& b; J2 E. w- S% X; Y
}
8 V& l* w, `' ]8 X
}
* X( Y; x( \( n) |) V
0 |4 N8 ^/ `& [& m9 j: u8 D" v R
}
; l/ }* c h3 ]( v' L) s% n8 m7 d5 w
$ d. p. v+ {4 k8 Y# r4 V
: g- ?- C: M: q3 Q/ A
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; ]) e5 X3 J# u6 L0 n4 ], o" k5 j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 n' F- D- m# ~3 [+ `( y. L
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4