嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 B ]$ |( r4 K+ Y! c% a6 T3 d
Void UPP_TASK(Void)
& K" e$ p6 Z- i
{
5 W3 V! x Q$ H( y
, D, P7 V0 v7 r4 {$ D
int i,j,k,target_int_count=2;
- j# r( G% d/ i U
char ch[2];
5 M- g' S. ~; `( b) ^ z
O5 z) l- H- J: x4 w' l' L
p* u# k2 `1 n2 U
( C5 V v$ k- b# H q H+ [1 L( K
upp_interrupt_count = 0;
, W$ ~0 y8 y$ ?' _
upp_error_count = 0;
. l% L) D+ L# {+ @3 V- F
5 @7 O. n! W5 p6 f0 D
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" ?+ w6 o* N3 u
// Initialize data buffers
, T w) |# g" I; p7 G4 A
for (i = 0; i < upp_frame_size; i++)
# _+ ~0 e q$ R9 L
{
/ |) ?5 j7 s2 p3 T% J" i5 |- h: C6 c
upp_buffer_b
=i;
( ]: `, V f+ f+ j* _: N: \
upp_buffer_a
= 0xDEAD;
. o; E' S* D% k
}
: R1 N4 l' }. L# y! ~1 H' u: n1 l
& D0 J& J$ E" y* X9 S6 L
//for(i=0;i<1024;i++)
5 W1 g% B1 w" X% X
// temp
=0;
, D# p5 S% x1 p1 E, S' J, V
3 j6 E0 q0 L! C+ ^' b" H
//UPPReset();
- v+ t3 a* d3 M: e* @6 h) J+ R
/*启动UPP DMA传输*/
. P5 p, g# \9 b e* C6 T! y* s8 e
UARTPuts("upp_prog_dma_i\n",-2);
9 {0 L+ F$ {% V1 y9 O. {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
t6 U) J- X2 x( `, y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- [2 g/ t2 ~% O
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, P8 z: w8 U* c5 M0 U
* `* V) y# c% `9 m+ F2 A7 L9 D4 k
UARTPuts("upp_prog_dma_i\n",-2);
8 Y; h/ z6 L8 |& }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 y/ A% t* I! a8 n3 ~7 f: P$ c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 \: ]. U" X, N6 I+ j& K; Q( y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, @% ~0 ~! |( E6 W& A
, `! u% F% t+ C. v$ E, t4 J
/*等待UPP传输完毕*/
@; b) ~+ p a' r& o
//i=0;
( {/ B5 k; v* m/ s/ n
//j=0;
' o3 k+ Y( s% \. {" {, n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ k0 z9 ^; n$ b) i
{
! {. N1 J& d" ^
/* 测试UPP传输的同时操作普通DDR数据
2 q' X1 M$ f8 E7 \/ z3 H- c8 t0 h
temp
=i;
5 P0 c( c$ U& B# v9 d' Y
i++;
6 X, s0 ?( |& I- P% | A8 k
if(i==1024)
- A8 ^, Y9 m/ |4 B" N, Z2 F6 N# @- A9 B
{
) u9 |" |0 p3 r8 W; E
i=0;
4 f1 `. l$ R8 g$ _
j++;
- E/ z/ C5 T. t; M
}
( D, Z G% w5 v/ B4 A# E* v
*/
% V5 X$ }9 ~) [/ S0 I
3 S6 f1 b2 J' V6 m) I& C9 u
asm(" nop");
4 a- k0 J% E- ^
, {( b' t$ t/ X! L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 [, I( T& L$ i5 p K& i0 q3 _) p: }
}
' v1 o/ V4 ~ H% Z9 k
/ H' c% ~0 N" ^" P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 K7 o2 A% y0 p6 H
//UARTprintf( "i=%d\n",i);
3 j; y/ x2 O8 N2 t
//UARTprintf( "j=%d\n",j);
$ r0 [- I2 a8 F: Y7 K/ u: c
UARTPuts("Data mismatch in buffers.\n",-2);
4 B; o) l6 \4 P5 W
if (upp_interrupt_count == 2 && upp_error_count == 0)
; r+ h( q) N: x3 r- n8 v
{
5 f/ K( o7 |( s& B% F& N1 n
for (i = 0; i<upp_frame_size; i++)
3 F% C$ g3 Y9 Z( b0 b
{
0 [: N% K# }8 V/ r/ b! T j; Y. o
if (upp_buffer_a
!= upp_buffer_b
)
: e# [/ p& k4 Q: M1 n5 [
{
& u# r) u: M1 W
upp_error_count++;
8 Y; _; o% l4 H& \) }% e/ O
}
# {0 ?* N# @1 K+ N! \; O
}
2 n# ] ~- m+ \
}
, ?+ ~; y% t9 L3 [9 X/ m
' B d7 U0 `. e2 J
/* 报告通信结果*/
3 a( [1 v& B' [" L5 J
if(upp_error_count != 0)
3 f" `5 U W0 e o, H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* Z2 s0 @5 a9 C+ A3 K
else
1 \9 h7 M+ }# f; N/ O: r0 g
UARTPuts("uPP transfers complete!\n",-2);
% `# \& W" [ I( V3 P
g5 m9 Q: q1 O2 V# B1 v: ?% x
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 ?3 d* x' z2 v8 u3 n! K
UARTGets(ch,2);
, G; `" }! Q: T s9 c
UARTPuts("\n", -2);
# C' R3 r5 t0 j3 w0 Q+ C
: \( B8 W( {; b, a5 L! g" t8 a" W1 q
if(ch[0] == 'y')
5 c, {* k+ [. f& v9 w. Z) [3 i) h
{
9 d0 x1 H; h9 y; V
/*打印全部读到的数据*/
5 a/ v/ K( [$ m5 d, K* f+ q* C, J
for(i=0; i<upp_frame_size; )
; }6 ^ V- M' _6 j6 B/ R* R/ G
{
1 |$ i c# D/ d5 N1 }: K
for(j=0; j<5; j++)
7 F0 b5 }! r: x& ~5 f/ ~4 l
{
5 ? v# v% Y% ^& g) U# J: l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: ?# c; o2 F: R
i++;
4 T8 V) V* _3 [) R9 d
//if(i >= 4096)
$ G( L' P2 t# G. ?& m* |# p
// break;
7 I) b0 L: ~5 v; P& Q, w/ u
- z/ c' G# S7 i* d. m
}
' q5 n( o, @+ o. ]
UARTPuts("\n",-2);
, q. @& l0 R3 A5 s8 `6 R8 ^- x" N
}
5 }0 m: f5 y# x" M) C$ A
}
! Y( r+ _5 k; w1 w" v
6 J0 D! x% T6 R: o% J
}
; E0 D1 R$ {. g. |- ]& A* q. T
8 Q( w' U4 t3 M. @* N$ ?+ t' ]2 G
" l9 {+ f, q8 B/ X6 T1 U; z4 O
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( o( n) a( R2 N( }. U! L
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& S5 I% D( |" ?' _9 T3 M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4